FIR低通滤波器+matlab编程+滤波前后图形
用MATLAB设计FIR数字滤波器
实验八 用MATLAB 设计FIR 数字滤波器(二)一、实验目旳:1、加深对窗函数法设计FIR 数字滤波器旳基本原理旳理解。
2、学习用MATLAB 语言旳窗函数法编写设计FIR 数字滤波器旳程序。
3、理解MATLAB 语言有关窗函数法设计FIR 数字滤波器旳常用函数用法。
二、实验原理:1、用窗函数法设计FIR 数字滤波器 FIR 数字滤波器旳系统函数为N-1-n n=0H(z)=h(n)z ∑这个公式也可以当作是离散LSI 系统旳系统函数M-m -1-2-mmm=0012m N -1-2-k-k12k k k=1bz b +b z +b z ++b z Y(z)b(z)H(z)====X(z)a(z)1+a z +a z ++a z1+a z ∑∑ 分母a 0为1,其他a k 全都为0时旳一种特例。
由于极点所有集中在零点,稳定和线性相位特性是FIR 滤波器旳突出长处,因此在实际中广泛使用。
FIR 滤波器旳设计任务是选择有限长度旳h(n),使传播函数H(e j ω)满足技术规定。
重要设计措施有窗函数法、频率采样法和切比雪夫等波纹逼近法等。
本实验重要简介窗函数法。
用窗函数法设计FIR 数字滤波器旳基本环节如下:(1)根据过渡带和阻带衰减指标选择窗函数旳类型,估算滤波器旳阶数N 。
(2)由数字滤波器旳抱负频率响应H(e j ω)求出其单位脉冲响应h d (n)。
可用自定义函数ideal_lp实现抱负数字低通滤波器单位脉冲响应旳求解。
程序清单如下:function hd=ideal_lp(wc,N) %点0到N-1之间旳抱负脉冲响应%wc=截止频率(弧度)%N=抱负滤波器旳长度tao=(N-1)/2;n=[0:(N-1)];m=n-tao+eps; %加一种小数以避免0作除数hd=sin(wc*m)./(pi*m);其他选频滤波器可以由低通频响特性合成。
如一种通带在ωc1~ωc2之间旳带通滤波器在给定N值旳条件下,可以用下列程序实现:Hd=ideal_lp(wc2,N)-ideal_lp(wc1,N)(3)计算数字滤波器旳单位冲激响应h(n)=w(n)h d(n)。
matlabfir滤波器设计
matlabfir滤波器设计在数字信号处理中,滤波器是一种常用的工具,用于处理信号的频率特性。
其中,FIR(有限脉冲响应)滤波器是一种常见的滤波器类型之一。
MATLAB提供了方便的工具和函数来设计和实现FIR滤波器。
在本文中,我们将介绍MATLAB中如何使用fir1函数来设计FIR滤波器。
要使用fir1函数设计FIR滤波器,需要指定滤波器的阶数和截止频率。
阶数决定了滤波器的复杂度,而截止频率则决定了滤波器的频率响应特性。
通过调整这两个参数,可以设计出不同类型的滤波器,如低通滤波器、高通滤波器、带通滤波器和带阻滤波器。
接下来,我们可以使用fir1函数来设计一个简单的低通滤波器。
例如,我们可以指定一个4阶低通滤波器,截止频率为0.5(归一化频率,取值范围为0到1)。
通过调用fir1函数并传入相应的参数,即可得到设计好的滤波器系数。
设计好滤波器系数后,我们可以将其应用于信号处理中。
例如,我们可以使用filter函数来对信号进行滤波。
将设计好的滤波器系数和待处理的信号作为输入参数传入filter函数,即可得到滤波后的信号。
这样,我们就可以实现对信号的滤波处理。
除了fir1函数外,MATLAB还提供了其他用于滤波器设计的函数,如firpm、fircls、firls等。
这些函数可以实现更复杂的滤波器设计,满足不同的需求。
通过选择合适的函数和参数,可以设计出性能优越的滤波器,用于各种信号处理应用中。
MATLAB提供了强大的工具和函数来设计和实现各种类型的滤波器。
通过合理选择滤波器的阶数和截止频率,以及使用适当的函数来设计滤波器系数,可以实现对信号的有效滤波处理。
希望本文能够帮助读者了解MATLAB中fir1函数的使用方法,进一步掌握滤波器设计的技巧,提高信号处理的效率和质量。
使用MATLAB设计FIR滤波器
使⽤MATLAB设计FIR滤波器1. 采⽤fir1函数设计,fir1函数可以设计低通、带通、⾼通、带阻等多种类型的具有严格线性相位特性的FIR滤波器。
语法形式:b = fir1(n, wn)b = fir1(n, wn, ‘ftype’)b = fir1(n, wn, ‘ftype’, window)b = fir1(n, wn, ‘ftype’, window, ‘noscale’)参数的意义及作⽤:b:返回的FIR滤波器单位脉冲响应,脉冲响应为偶对称,长度为n+1;n:滤波器的介数;wn:滤波器的截⽌频率,取值范围为0<wn<1,1对应信号采样频率⼀半。
如果wn是单个数值,且ftype参数为low,则表⽰设计截⽌频率为wn的低通滤波器,如果ftype参数为high,则表⽰设计截⽌频率为wn的⾼通滤波器;如果wn是有两个数组成的向量[wn1wn2],ftype为stop,则表⽰设计带阻滤波器,ftype为bandpass,则表⽰设计带通滤波器;如果wn是由多个数组成的向量,则根据ftype的值设计多个通带或阻带范围的滤波器,ftype为DC-1,表⽰设计的第⼀个频带为通带,ftype为DC-0,表⽰设计的第⼀个频带为阻带;window:指定使⽤的窗函数,默认为海明窗;noscale:指定是否归⼀化滤波器的幅度。
⽰例:N=41; %滤波器长度fs=2000; %采样频率%各种滤波器的特征频率fc_lpf=200;fc_hpf=200;fp_bandpass=[200 400];fc_stop=[200 400];%以采样频率的⼀半,对频率进⾏归⼀化处理wn_lpf=fc_lpf*2/fs;wn_hpf=fc_hpf*2/fs;wn_bandpass=fp_bandpass*2/fs;wn_stop=fc_stop*2/fs;%采⽤fir1函数设计FIR滤波器b_lpf=fir1(N-1,wn_lpf);b_hpf=fir1(N-1,wn_hpf,'high');b_bandpass=fir1(N-1,wn_bandpass,'bandpass');b_stop=fir1(N-1,wn_stop,'stop');%求滤波器的幅频响应m_lpf=20*log(abs(fft(b_lpf)))/log(10);m_hpf=20*log(abs(fft(b_hpf)))/log(10);m_bandpass=20*log(abs(fft(b_bandpass)))/log(10);m_stop=20*log(abs(fft(b_stop)))/log(10);%设置幅频响应的横坐标单位为Hzx_f=0:(fs/length(m_lpf)):fs/2;%绘制单位脉冲响应%绘制单位脉冲响应subplot(421);stem(b_lpf);xlabel('n');ylabel('h(n)');subplot(423);stem(b_hpf);xlabel('n');ylabel('h(n)');subplot(425);stem(b_bandpass);xlabel('n');ylabel('h(n)');subplot(427);stem(b_stop);xlabel('n');ylabel('h(n)');%绘制幅频响应曲线subplot(422);plot(x_f,m_lpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(424);plot(x_f,m_hpf(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(426);plot(x_f,m_bandpass(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);subplot(428);plot(x_f,m_stop(1:length(x_f)));xlabel('频率(Hz)','fontsize',8);ylabel('幅度(dB)','fontsize',8);2. 采⽤fir2函数设计,函数算法是:⾸先根据要求的幅频响应向量形式进⾏插值,然后进⾏傅⾥叶变换得到理想滤波器的单位脉冲响应,最后利⽤窗函数对理想滤波器的单位脉冲响应激进型截断处理,由此得到FIR滤波器系数。
matlab的fir滤波器设计
matlab的fir滤波器设计Matlab是一种常用的科学计算软件,可以广泛应用于信号处理领域。
其中一个常用的信号处理技术就是滤波器。
FIR滤波器是数字滤波器的一种,它具有线性相位特性和稳定性,并且在数字信号处理中应用非常广泛。
在Matlab中,设计FIR滤波器有多种方法,其中最常用的是窗函数法和最小二乘法。
窗函数法是基于理想滤波器的幅频响应,在频域上与希望的滤波器响应相乘的方式得到FIR滤波器系数。
而最小二乘法则是通过最小化滤波器输出与希望的输出之间的误差平方和来设计FIR滤波器。
在Matlab中,可以使用fir1函数实现FIR滤波器设计。
这个函数的输入参数包括滤波器阶数、截止频率、滤波器类型等。
例如,下面的代码可以实现一个低通FIR滤波器的设计:fs = 1000; % 采样频率fc = 100; % 截止频率N = 100; % 滤波器阶数h = fir1(N, fc/(fs/2), 'low'); % 低通FIR滤波器在上面的代码中,fs表示采样频率,fc表示截止频率,N表示滤波器阶数,h表示设计得到的FIR滤波器系数。
'low'表示设计的是低通滤波器,如果要设计高通、带通或带阻滤波器,可以将'low'换成'high'、'bandpass'或'bandstop'。
设计好FIR滤波器后,可以使用filter函数将滤波器应用于信号中。
例如,下面的代码可以将一个信号x通过上面设计得到的FIR 滤波器h进行滤波:y = filter(h, 1, x);在上面的代码中,h表示设计得到的FIR滤波器系数,x表示需要进行滤波的信号,y表示滤波后的信号。
'1'表示滤波器的分母系数为1,因为FIR滤波器的分母系数恒为1。
综上所述,Matlab的FIR滤波器设计方法包括窗函数法和最小二乘法,可以使用fir1函数实现滤波器设计,使用filter函数将滤波器应用于信号中。
基于Matlab的FIR滤波器设计与仿真
一 1
基于 L Ma t l a b的 F I R滤波器设计与仿真
文/ 张劲峰
一 一 一 一 一 一 一
波器 。
对于任一种滤波器来说 ,其系统函数 是 以及通 过 查 表 ,选定 窗 最重要的 ,一般我们也会针对其 系统 函数进行 函 数 ,以及 确 定 阶数 N 分析 。而 F I R滤波器 的系统 函数则如 下图所示 的 大小 ;综 合 上诉 求 出
足设计要求 。 可用框图表示 :
7 F I R 滤 波器的特 点
【 关键 词】F I R 滤波器 M a t l a b 仿真
序列 。又或者把 x ( n ) 补上 L N2个零 值点 , 选择性 ,必须用较高的 阶数 ;对于 同样 的滤 波 ( n ) 补上 L N1 个零值点 ,然后进行 L点 器设计指 标,F I R滤波器所要 求的阶数可 能比 随着 电子信 息技术的不断更新 ,数字信号 将 h 圆周 卷积 ,就可 以代 替原 x ( n ) 与h ( n )的线 I 处理 已经得 到了众多 电子领域 的认可 和应用。 I R滤波器高 5 - 1 0 倍 ,所以 F I R滤波器 的成 本 F T 较高 ,信号延时也较大 ,但使用 F 而在数 字信 号处理过程 中,数字 滤波是一个非 性卷积。而滤波器的圆周卷积就可以通过 D I R滤波器 却 和I D F T的方法进 行计算 。这样 就可 以得 到该 可 以得到严格的线性相位 。 常重要 的环节 。 要 设计 和制作 一个 F I R滤 波 器 , 可 以
晰 ,得到社会各界 的广 泛应用。其主要的设计 原理是根据滤波器 的技术指标 ,选取一个合 适 的 阶数 N 和合 适 的窗 函数类 型 ,令其 幅频 特 性能够无 限接近理想滤 波器 的幅频特性。设计
matlab写低通滤波器
matlab写低通滤波器如何在MATLAB中编写低通滤波器。
低通滤波器是一种常见的信号处理工具,在许多应用中被广泛使用。
它可以有效地滤除高频噪声或者只保留信号的低频成分。
在MATLAB中,我们可以使用不同的方式来实现低通滤波器。
第一步是定义滤波器的特性。
一个低通滤波器的主要特点是在截止频率以下保留信号的成分,并在截止频率以上去除信号的高频部分。
通常,低通滤波器被设计为具有平滑的频率响应曲线,以确保在截止频率附近没有明显的幅度衰减。
常用的低通滤波器有巴特沃斯滤波器,切比雪夫滤波器和椭圆滤波器。
在MATLAB中,我们可以使用不同的函数来创建这些滤波器。
接下来,我们需要将滤波器应用于信号。
在MATLAB中,我们可以使用函数如filter或fft来实现这一点。
函数filter可以用于对时域信号进行滤波,而函数fft则可以应用于频域信号。
下面是一个示例代码,演示了如何在MATLAB中编写一个低通滤波器:matlab创建一个低通滤波器fs = 100; 采样频率fc = 10; 截止频率order = 4; 滤波器阶数[b, a] = butter(order, fc/(fs/2), 'low'); 创建巴特沃斯低通滤波器系数生成一个测试信号t = 0:1/fs:1; 时间范围x = sin(2*pi*20*t) + sin(2*pi*50*t); 以20 Hz和50 Hz频率成分的正弦信号应用滤波器y = filter(b, a, x); 使用filter函数进行滤波绘制结果figure;plot(t, x, 'b', 'LineWidth', 1.5); hold on;plot(t, y, 'r', 'LineWidth', 1.5);xlabel('时间(s)');ylabel('幅度');legend('原始信号', '滤波结果');title('低通滤波器应用');频谱分析X = fft(x); 计算原始信号的频谱Y = fft(y); 计算滤波结果的频谱f = (0:length(X)-1)*(fs/length(X)); 频率范围figure;plot(f, abs(X), 'b', 'LineWidth', 1.5); hold on;plot(f, abs(Y), 'r', 'LineWidth', 1.5);xlabel('频率(Hz)');ylabel('幅度');legend('原始信号', '滤波结果');title('频谱分析');在这个示例中,我们首先使用函数butter创建了一个巴特沃斯低通滤波器。
基于Matlab的FIR滤波器设计与实现
基于Matlab的FIR滤波器设计与实现⼀、摘要 前⾯⼀篇⽂章介绍了通过FDATool⼯具箱实现滤波器的设计,见“”,这⾥通过⼏个例⼦说明采⽤Matlab语⾔设计FIR滤波器的过程。
⼆、实验平台 Matlab7.1三、实验原理 以低通滤波器为例,其常⽤的设计指标有:1. 通带边缘频率f p(数字频率为Ωp)2. 阻带边缘频率f st (数字频率为Ωst)3. 通带内最⼤纹波衰减δp=-20log10(1-αp),单位为 dB4. 阻带最⼩衰减αs=-20log10(αs),单位为 dB5. 阻带起伏αs6. 通带峰值起伏αp 其中,以1、2、3、4条最为常⽤。
5、6条在程序中估算滤波器阶数等参数时会⽤到。
数字频率 = 模拟频率/采样频率四、实例分析例1 ⽤凯塞窗设计⼀FIR低通滤波器,通带边界频率Ωp=0.3pi,阻带边界频率Ωs=0.5pi,阻带衰减δs不⼩于50dB。
⽅法⼀:⼿动计算滤波器阶数N和β值,之后在通过程序设计出滤波器。
第⼀步:通过过渡带宽度和阻带衰减,计算滤波器的阶数B和β值。
第⼆步:通过程序设计滤波器。
程序如下:b = fir1(29,0.4,kaiser(30,4.55));[h1,w1]=freqz(b,1);plot(w1/pi,20*log10(abs(h1)));axis([0,1,-80,10]);grid;xlabel('归⼀化频率/p') ;ylabel('幅度/dB') ;波形如下:⽅法⼆:采⽤[n,Wn,beta,ftype] = kaiserord(f,a,dev)函数来估计滤波器阶数等,得到凯塞窗滤波器。
这⾥的函数kaiserord(f,a,dev)或者kaiserord(f,a,dev,f s): f为对应的频率,f s为采样频率;当f⽤数字频率表⽰时,f s则不需要写。
a=[1 0]为由f指定的各个频带上的幅值向量,⼀般只有0和1表⽰;a和f长度关系为(2*a的长度)- 2=(f的长度) devs=[0.05 10^(-2.5)]⽤于指定各个频带输出滤波器的频率响应与其期望幅值之间的最⼤输出误差或偏差,长度与a相等,计算公式:阻带衰减误差=αs,通带衰减误差=αp,可有滤波器指标中的3、4条得到。
FIR滤波器的MATLAB设计与实现
FIR滤波器的MATLAB设计与实现FIR滤波器(Finite Impulse Response Filter)是一种数字滤波器,其特点是其响应仅由有限长度的序列决定。
在MATLAB中,我们可以使用信号处理工具箱中的函数来设计和实现FIR滤波器。
首先,需要明确FIR滤波器的设计目标,包括滤波器类型(低通、高通、带通、带阻)、通带和阻带的频率范围、通带和阻带的增益等。
这些目标将决定滤波器的系数及其顺序。
在MATLAB中,我们可以使用`fir1`函数来设计FIR滤波器。
该函数的使用方式如下:```matlabh = fir1(N, Wn, type);```其中,`N`是滤波器长度,`Wn`是通带边缘频率(0到0.5之间),`type`是滤波器的类型('low'低通、'high'高通、'bandpass'带通、'stop'带阻)。
该函数会返回一个长度为`N+1`的滤波器系数向量`h`。
例如,如果要设计一个采样频率为10kHz的低通滤波器,通带截止频率为2kHz,阻带频率为3kHz,可以使用以下代码:```matlabfc = 2000; % 通带截止频率h = fir1(50, fc/(fs/2), 'low');```上述代码中,`50`表示滤波器的长度。
注意,滤波器的长度越大,滤波器的频率响应越陡峭,但计算成本也更高。
在设计完成后,可以使用`freqz`函数来分析滤波器的频率响应。
例如,可以绘制滤波器的幅度响应和相位响应曲线:```matlabfreqz(h);```除了使用`fir1`函数外,MATLAB还提供了其他函数来设计FIR滤波器,如`fir2`、`firpm`、`firls`等,具体使用方式可以参考MATLAB的文档。
在实际应用中,我们可以将FIR滤波器应用于音频处理、图像处理、信号降噪等方面。
例如,可以使用FIR滤波器对音频信号进行去噪处理,或者对图像进行锐化处理等。
(完整版)使用MATLAB设计ISE中FIR滤波器系数方法总结
使用MATLAB设计ISE中FIR滤波器系数的方法
1、打开MATLAB,在命令行窗口输入“fdatool”,打开“Filter Designer & Analysis Tool”工具。
如下图所示:
2、由于FPGA中滤波器的系数需要为整数,因此需要在此处将系数设置为“Fixed -point”类型。
点击上图中红色方框内的按钮,在新出现的页面中将“Filter arithmetic”设置为“Fixed -point”。
设置完成后如下图所示:
3、点击上图中红色方框内的按钮,进入滤波器参数设置页面,在其中设置采样频率(Fs)、通带频率(Fpass)、阻带频率(Fstop)以及阻带衰减(Astop)等参数,并按最下面的“Design Filter”按钮生成滤波器系数。
如下图所示,采样频率为62MHz,通带频率为2MHz,阻带频率为4MHz,阻带衰减为-80dB。
4、然后导出coe文件,点击下图方框中的按钮即可导出coe文件:
5、在ISE中新建一个FIR滤波器IP核,在第一页设置中将“Select Source”改为“COE File”,然后在下面选择上一步生成的coe文件即可。
fir带阻滤波器matlab代码
《fir带阻滤波器MATLAB代码实现及应用》一、引言在数字信号处理领域,滤波器是一种常见的工具,用于处理数字信号的频率特性。
其中,fir带阻滤波器是一种常用的滤波器类型,它可以在信号频谱中选择性地抑制某些频率分量,从而实现信号的滤波处理。
本文将从fir带阻滤波器的原理和设计入手,结合MATLAB代码实现,探讨fir带障滤波器的应用以及个人的理解。
二、fir带阻滤波器原理与设计1. fir带阻滤波器的原理fir带阻滤波器是一种线性相位滤波器,它具有在给定频率范围内拒绝信号分量的能力。
其原理是利用窗函数的方法对滤波器的频率响应进行设计,从而实现对特定频率范围内信号的抑制。
2. fir带阻滤波器的设计方法fir带阻滤波器的设计方法多种多样,常见的包括频率采样法、窗函数法、优化法等。
在设计过程中,需要考虑滤波器的通带、阻带、过渡带等参数,并选择合适的设计方法和滤波器系数,以满足滤波器的设计要求。
三、MATLAB代码实现下面是一段MATLAB代码,实现了一个简单的fir带阻滤波器:```matlab% 设计fir带阻滤波器fs = 1000; % 采样频率fpass = [100 200]; % 通带频率范围fstop = [150 250]; % 阻带频率范围dpass = 0.01; % 通带最大衰减dstop = 0.01; % 阻带最小衰减% 根据要求设计fir带阻滤波器h = fir1(100, fstop/(fs/2), 'stop', kaiser(101, 5));% 使用fir带阻滤波器进行信号滤波t = 0:1/fs:1-1/fs; % 生成时间序列x = sin(2*pi*100*t) + sin(2*pi*200*t); % 生成测试信号y = filter(h, 1, x); % 对测试信号进行滤波```以上代码首先设定了滤波器的参数,然后利用MATLAB的fir1函数设计了一个带阻滤波器,并对一个测试信号进行了滤波处理。
matlab用窗函数法设计线性相位fir低通滤波器
%用窗函数法设计线性相位低通滤波器clear all;wp=0.5*pi;ws=0.6*pi;wd=ws-wp;%hanning窗N_hann=ceil(8*pi/wd);wc=(wp+ws)/2;if mod(N_hann,2)==0N_hann=N_hann+1;endhann_win=hanning(N_hann);b_hann=fir1(N_hann-1,wc/pi,hann_win);freq_axis=[0:pi/512:pi-pi/512];freqn=[0:511]/512;H_hann=freqz(b_hann,1,512);figure(1);subplot(211);plot(freqn,20*log10(abs(H_hann)));xlabel('归一化频率w/pi');ylabel('幅度谱(dB)'); title('采用hanning 窗设计fir滤波器幅度谱'); subplot(212);plot(freqn,angle(H_hann));xlabel('归一化频率w/pi');ylabel('相位谱');title('采用hanning窗设计fir滤波器相位谱');%hamming窗N_hamm=ceil(8*pi/wd);wc=(wp+ws)/2;if mod(N_hamm,2)==0N_hamm=N_hamm+1;endhamm_win=hamming(N_hamm);b_hamm=fir1(N_hamm-1,wc/pi,hamm_win);H_hamm=freqz(b_hamm,1,512);figure(2)subplot(211);plot(freqn,20*log10(abs(H_hamm)));xlabel('归一化频率w/pi');ylabel('幅度谱(dB)'); title('采用hamming 窗设计fir滤波器幅度谱'); subplot(212);plot(freqn,angle(H_hamm));xlabel('归一化频率w/pi');ylabel('相位谱');title('采用hamming窗设计fir滤波器相位谱');N2_hamm=2*N_hamm;wc=(wp+ws)/2;if mod(N2_hamm,2)==0N2_hamm=N2_hamm+1;endhamm_win=hamming(N2_hamm);b_hamm=fir1(N2_hamm-1,wc/pi,hamm_win);H_hamm=freqz(b_hamm,1,512);figure(3)subplot(211);plot(freqn, 20*log10(abs(H_hamm)) );xlabel('归一化频率w/pi');ylabel('幅度谱(dB)');title('窗长增大一倍,采用hamming窗设计fir滤波器幅度谱'); subplot(212);plot( freqn,angle(H_hamm));xlabel('归一化频率w/pi');ylabel('相位谱');title('窗长增大一倍,采用hanning窗设计fir滤波器相位谱'); 继续阅读。
matlabfir滤波器设计
matlabfir滤波器设计在数字信号处理中,滤波器是一种常用的工具,用于对信号进行处理和分析。
其中,fir滤波器是一种常见的数字滤波器,具有线性相位和有限冲激响应的特点。
在Matlab中,fir滤波器设计是一项重要的任务,可以通过Matlab提供的函数和工具来实现。
fir滤波器是一种使用有限长脉冲响应(finite impulse response, FIR)的数字滤波器。
与IIR滤波器相比,fir滤波器具有较好的稳定性和线性相位特性,因此在许多应用中得到广泛应用。
fir滤波器的设计通常包括确定滤波器的系数,即滤波器的频率响应。
在Matlab中,可以使用fir1、firls、firpm等函数来设计fir滤波器。
fir1函数是Matlab中用于设计一阶和二阶fir滤波器的函数,可以指定滤波器的类型(低通、高通、带通、带阻)、截止频率和滤波器的阶数。
通过调整这些参数,可以设计出符合要求的fir滤波器。
另外,firls函数可以用于最小二乘法设计fir滤波器,firpm函数可以用于最小最大法设计fir滤波器。
fir滤波器设计的关键是确定滤波器的系数,即滤波器的权重。
在Matlab中,可以通过fir1、firls、firpm等函数来计算出滤波器的系数,从而实现fir滤波器的设计。
设计fir滤波器时,需要考虑滤波器的类型、截止频率、滤波器的阶数等因素,以满足具体的信号处理需求。
除了fir1、firls、firpm等函数外,Matlab还提供了firgr、fdatool 等工具,用于可视化fir滤波器的频率响应和设计滤波器。
通过这些工具,可以直观地查看滤波器的频率响应曲线、幅度响应和相位响应,帮助用户更好地理解和调整滤波器的设计参数。
fir滤波器设计是数字信号处理中的重要任务,Matlab提供了丰富的函数和工具,可以帮助用户设计出符合要求的fir滤波器。
通过合理选择滤波器的类型、截止频率和阶数,可以实现对信号的有效滤波和处理。
FIR滤波器窗函数设计法详细步骤以及Matlab代码
FIR滤波器窗函数设计法详细步骤以及Matlab代码采⽤窗函数法设计理想低通,⾼通滤波器,参考北京交通⼤学陈后⾦主编的【数字信号处理】5.2节窗函数法设计线性相位FIR数字滤波器P164,和P188。
设计步骤如下:1)确定滤波器类型,不同的FIR类型可设计不同类型的滤波器,I型可设计LP(低通滤波器),HP(⾼通滤波器),BP(带通滤波器),BS(带阻滤波器)。
Fir I型Fir II型Fir III型Fir IV型LP,HP,BP,BS LP,BP BP HP,BP,BS2)确定设计的滤波器的参数Eg:若要设计⼀个低通滤波器,fp=20,fs=30;Ap=1,As=40,则3db截频Wc = 2*pi*(fs-fp)/Fs;Fs为采样频率。
3)确定窗函数窗的类型主瓣宽度近似过渡带宽度δp,δs Ap(dB)As(dB)矩形窗4pi/N 1.8pi/N0.090.8221Hann8pi/N 6.2pi/N0.00640.05644Hamming8pi/N7pi/N0.00220.01953Blackman12pi/N11.4pi/N0.00020.001774Kaiser可调窗,需要确定β值 50<A , β = 0.1102(A-8.7); 21<=A<=50, β=0.5842(A-21)^0.4 + 0.07886(A-21); A<21, β = 0;4) 确定滤波器的阶数M,⾸先确定滤波器的长度N。
对于除凯撒窗以外的窗函数,N值由以下公式确定:N>=(窗函数近似过渡带宽度)/(Wp-Ws)Fir I型Fir II型Fir III型Fir IV型脉冲响应h[k]为偶对称h[k]为偶对称h[k]为奇对称h[k]为奇对称窗函数长度:N=mod(N+1,2)+N N=mod(N,2)+N N=mod(N+1,2)+N N=mod(N,2)+N阶数M=N-1为偶数M=N-1为奇数M=N-1为偶数M=N-1为奇数若采⽤Kaiser窗,则M≈(A-7.95)÷ 2.285*|Wp-Ws|,A>21。
FIR数字滤波器设计及MATLAB实现
l 2 9
FR 字 滤 波 器 设 计 及 MA L 实现 I数 T AB
冯 冠超 ( 哈尔滨工业大学 ( 威海 ) 山东威海
24 0) 6 2 9
摘 要 :主要 研 究在 MA IBt境 T FR ̄ 字滤 波 器的 典 型设计 方 法 ,应 用MA L B 号 处理 工 具箱及 其 扩展 函数 ,使 得如 TA  ̄ . IA c TA信 何在 数 字信 号 处理过 程 中较 复杂 的数 字 滤波 器设计 问题 得 以解 决 。
gr i d
1 引 言 .
数字 信 号 处理 是在 2 世 纪6 年 代 ,用 数字 的数 值 计 算 方法 0 O 对 信号 进 行 处 理 ,以达 到 提 取 有 用信 息 便 于应 用 的 目的 , 目前 数 字信号 处理 技术 已广 泛 应用 于 多个领 域 数 字 滤 波器 根 据 其 单 位 冲激 响应 函数 的 时域 特 性 可 分 为两 类 :无 限冲激 响 应 l 滤波 器和 有 限 冲激 响 应 FR 波器 。 F R l R I滤 I 滤 波器 最 重要 的 优点 就是 由于 不存 在 系统 极点 ,FR 波器 是绝 对 I滤 稳 定 的系 统 。MA L B为数 字 滤 波 的研 究 提供 了一 个直 观 、高 TA 效 、便 捷 的 利器 。 它 以矩 阵 运算 为基 础 ,把 计 算 、 可视 化 、程 序 设计融 合到 一 个交互 式 的工 作环 境 中。
参 考文 献 [13 14 晓晨, 李涛, 刘路 . MATL B3 箱应 用指 南[ .电子工业 出 A - M】
版 社 .0 0 20 .
3 窗函数 设 计的基 本 思想 .
窗 函数 法 设 计 的基 本 思 想 是 把给 定 的频 率 响应 通 过 离 散傅 里 叶逆 变换 ,求 得 脉 冲 响应 ,然 后利 用 加 窗 函 数对 它进 行 截 断 和 平 滑 ,以 实现 一 个物理 可 实 现且 具 有线 性相 位 的 FR I 滤波 器 的 设 计 目的。 其 核 心 是从 给 定 的 频 率特 性 ,通 过 加窗 确 定 有 限 长 单 位脉 冲 Ⅱ 应序  ̄ h n ,过 程 如下 : 向 J ()
低通FIR数字滤波器设计
低通FIR数字滤波器设计(1)设计方案本设计利用窗函数法设计了一个低通FIR数字滤波器,利用所设计的滤波器对多个频带叠加的正弦信号进行处理,对比滤波前后的信号时域和频域图。
FIR 滤波器具有严格的相位特性,对于信号处理和数据传输是很重要的。
目前FIR滤波器的设计方法主要有三种:窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。
由于窗函数法比较简单,可应用现成的窗函数公式,在技术指标要求高的时候是比较灵活方便的,本设计方案选用窗函数法基本思路:从时域出发设计 h(n)逼近理想 hd(n)。
设理想滤波器的单位响应在时域表达为hd(n),则hd(n) 一般是无限长的,且是非因果的,不能直接作为FIR 滤波器的单位脉冲响应。
要想得到一个因果的有限长的滤波器单位抽样响应 h(n),最直接的方法是先将hd(n)往右平移,再进行截断,即截取为有限长因果序列:h(n)=hd(n)w(n),并用合适的窗函数进行加权作为 FIR 滤波器的单位脉冲响应。
按照线性相位滤波器的要求,线性相位FIR数字低通滤波器的单位抽样响应h(n)必须是偶对称的。
对称中心必须等于滤波器的延时常数,即用矩形窗设计的FIR 低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,返个现象称为吉布斯(Gibbs)效应。
为了消除吉布斯效应,一般采用其他类型的窗函数。
MATLAB 设计 FIR 滤波器有多种方法和对应的函数。
从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs现象所带来的影响。
(2)MATLAB程序设计和仿真图MATLAB程序如下:f1=100;f2=200;%待滤波正弦信号频率fs=2000;%采样频率m=(0.3*f1)/(fs/2);%定义过度带宽M=round(8/m);%定义窗函数的长度N=M-1;%定义滤波器的阶数b=fir1(N,0.5*f2/(fs/2));%使用fir1函数设计滤波器%输入的参数分别是滤波器的阶数和截止频率figure(1)[h,f]=freqz(b,1,512);%滤波器的幅频特性图%[H,W]=freqz(B,A,N)当N是一个整数时函数返回N点的频率向量和幅频响应向量plot(f*fs/(2*pi),20*log10(abs(h)))%参数分别是频率与幅值xlabel('频率/赫兹');ylabel('增益/分贝');title('滤波器的增益响应');figure(2)subplot(211)t=0:1/fs:0.5;%定义时间范围和步长s=sin(2*pi*f1*t)+sin(2*pi*f2*t);%滤波前信号plot(t,s);%滤波前的信号图像xlabel('时间/秒');ylabel('幅度');title('信号滤波前时域图');subplot(212)Fs=fft(s,512);%将信号变换到频域AFs=abs(Fs);%信号频域图的幅值f=(0:255)*fs/512;%频率采样plot(f,AFs(1:256));%滤波前的信号频域图xlabel('频率/赫兹');ylabel('幅度');title('信号滤波前频域图');figure(3)sf=filter(b,1,s);%使用filter函数对信号进行滤波%输入的参数分别为滤波器系统函数的分子和分母多项式系数向量和待滤波信号输入subplot(211)plot(t,sf)%滤波后的信号图像xlabel('时间/秒');ylabel('幅度');title('信号滤波后时域图');axis([0.2 0.5 -2 2]);%限定图像坐标范围subplot(212)Fsf=fft(sf,512);%滤波后的信号频域图AFsf=abs(Fsf);%信号频域图的幅值f=(0:255)*fs/512;%频率采样plot(f,AFsf(1:256))%滤波后的信号频域图xlabel('频率/赫兹');ylabel('幅度');title('信号滤波后频域图');低通的FIR数字滤波器的仿真图如图8~图10所示:图8低通FIR滤波器的增益响应图9 滤波前的信号时域图和频域图图10 滤波后的信号时域图和频域图。
用MATLAB设计数字FIR低通滤波器(哈明窗)
用MATLAB设计数字FIR低通滤波器(哈明窗)设计数字FIR低通滤波器,技术指标如下:Wp=0.2pi.rp=0.25db;Ws=0.3pi,as=50db.求解,如下图:程序:wp=0.2*pi;ws=0.3*pi;trwidth=ws-wp;M=ceil(6.6*pi/trwidth)+1;%朝正无穷方向取整n=[0:1:M-1];wc=(ws+wp)/2%求的截止频率(弧度)hd=ideal_lp(wc,M) %调用计算理想低通滤波器的单位取样响应wham=(hamming(M))';%哈明窗函数h=hd.*wham;[H,w]=freqz(h,1,1000,'whole'); %求Z变换频率响应函数H=(H(1:1:501))';w=(w(1:1:501))'mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(h,1,w);deltaw=2*pi/1000;Rp=-(min(db(1:1:wp/deltaw+1)))As=-round(max(db(ws/deltaw+1:1:501)))subplot(1,1,1)subplot(2,2,1),stem(n,hd);title('理想脉冲响应')axis([0 M-1 -0.1 0.3]);xlabel('N');ylabel('hd(n)');subplot(2,2,2),stem(n,wham);title('Hamming窗')axis([0 M-1 -0 1.1]);xlabel('N');ylabel('w(n)');subplot(2,2,3),stem(n,h);title('实际脉冲响应')axis([0 M-1 -0.1 0.3]);xlabel('N');ylabel('h(n)');subplot(2,2,4),plot(w/pi,db);title('相对标尺的幅度响应');grid on;axis([0 1 -100 10]);xlabel('frequency in pi units');ylabel('decibels');set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1])%设置或修改LTI对象的属性值set(gca,'XTickMode','manual','XTick',[-50,0])set(gca,'XTickLabelMode','manual','XTickLabels',['50';'0'])子程序:function hd=ideal_lp(wc,N);a=(N-1)/2;n=[0:1:(N-1)];m=n-a+eps;hd=sin(wc*m)./(pi*m);。
【FPGA】MATLAB生成FIR滤波器的操作步骤(包括生成VerilogHDL代码以及仿真过程)
【FPGA】MATLAB⽣成FIR滤波器的操作步骤(包括⽣成VerilogHDL代码以及仿真过程)使⽤MATLAB⽣成滤波器有很多学问,这⾥只是作为初步的探索,和FPGA的更多结合,也正在探索中,相关博⽂例如:,该专题⽬录正在记录我学习FIR滤波器的过程。
MATLAB⽣成30阶低通1MHz海明窗函数设计步骤:(1)在MATLAB命令窗⼝中输⼊“fdatool”出现如下对话框:注意,在MATLAB2018以后的版本中输⼊:filterDesigner,即可打开上述界⾯。
(2)设定为低通滤波器。
(3)选择FIR滤波器的设计类型为窗函数。
设置FIR滤波器为30阶滤波器,选择窗函数的类型为海明窗函数,海明窗函数可以得到旁瓣更⼩的效果,能量更加集中在主瓣中,主瓣的能量约占99.963%,第⼀旁瓣的峰值⽐主瓣⼩40dB,但主瓣宽度与海明窗相同。
它定义为:(4)输⼊抽样频率和截⽌频率,分别是16MHz和1MHz。
(5)点击Design Filter 得到结果,如下图:(6)量化输⼊输出,点击⼯作栏左边的量化选项,即“set quantization parameters”选项,选择定点,设置输⼊字长为8,其他选择默认,如下图⽰:及测试⽂件:仿真结果如下图:如上图所⽰,当输⼊为线性,或者输⼊频率较低时,输出幅度不会被抑制,当输⼊频率较⾼,输出幅度会受到⼤幅度抑制,⽽当输⼊为⽩噪声或者混频信号时,滤波器会过滤掉⾼频信号。
这⾥分出来⼀⼩部分空间,引⽤点别⼈的内容来简单介绍下上述⼏个参数的意思:Response Type:选择FIR滤波器的类型:低通、、带通和带阻等。
在DDC/DUC模块设计中,抽取和内插需要使⽤Halfband Lowpass 类型,⽽channel filr需要使⽤Rsed-cosine类型。
Design Method:FIR滤波器设计⽅法有多种,最常⽤的是窗函数设计法(Window)、等波纹设计法(Equiripple)和最⼩⼆乘法(Least-Squares)等。
FIR数字滤波器的Matlab实现
第7章 FIR 数字滤波器的Matlab 实现7.1 实验目的● 学习用窗函数法设计FIR 数字滤波器的原理及其设计步骤; ● 学习编写数字滤波器的设计程序的方法,并能进行正确编程; ● 根据给定的滤波器指标,给出设计步骤。
7.2 实验原理及实例分析7.2.1 FIR 低通数字滤波器的设计原理如果系统的冲激响应)(n h d 为已知,则系统的输入/输出关系为:)()()(n h n x n y d ⋅=对于低通滤波器,只要设计出低通滤波器的冲激响应函数,就可以由上式得到系统的输出了。
假设所希望的数字滤波器的频率响应为)(jw d e H ,它是频域的周期函数,周期为2π,那么它与)(jw d e H 相对应的傅立叶系数为dw e e H n h jnw jw d d )(21)(⎰-=πππ以)(n h d 为冲激响应的数字滤波器将具有频域响)(jw d e H 。
但是将)(n h d 作为滤波器脉冲响应有两个问题:(1) 它是无限长的,与FIP 滤波器脉冲响应有限长这一前提不一致 (2) 它是非因果的,0,0)(<≠n n h d 对此,要采取以下的措施,(1) 将)(n h d 截短 (2)将其往右平移, 由此得到)(2n h 的实际频域响应jnwN n jwd en h e H ∑-==12)()(,与理想频域响应)(jw d e H 相近,但不完全一致。
理论证明上述现象是对)(n h d 进行简单截短处理的必然结果,一般称为吉布斯现象,为尽可能的减少吉布斯现象,应对)(n h d 进行加窗截取,即以)()()(n W n h n h N d ⋅=作为FIR 滤波器的系数。
常用的窗函数有矩形窗、海明窗和布莱克曼窗等。
7.2.2 用窗函数法设计FIR 滤波器Matlab 设计FIR 滤波器有多种方法和对应的函数,见表7-1。
表7-1 matlab 设计FIR 滤波器的方法和函数窗函数方法不仅在数字滤波器的设计中占有重要的地位,同时可以用于功率谱的估计,从根本上讲,使用窗函数的目的就是消除由无限序列的截短而引起的Gibbs 现象所带来的影响。
利用MATLAB窗函数法设计一个可实现的FIR低通滤波器。
一、实验目的1.掌握在MATLAB中窗函数的使用方法,了解不同窗函数之间的差别。
2.使用窗函数法设计一个可实现的FIR低通滤波器。
3.观察在相同长度下,不同的窗函数设计出来的滤波器有什么差别。
4.观察同一个窗在不同长度下设计出来的滤波器有什么差别。
二、实验条件PC机,MATLAB7.0三、实验内容1)通过help查找窗函数在MATLAB中如何实现通过example了解MATLAB中窗函数的实现,并且利用矩形窗,汉宁窗,哈明窗,布莱克曼窗和凯塞窗来进行接下来的实验。
2)设计物理可实现的低通滤波器设计思路:因为要设计FIR有限脉冲响应滤波器,通常的理想滤波器的单位脉冲响应h是无限长的,所以需要通过窗来截断它,从而变成可实现的低通滤波器。
程序如下:clc;clear all;omga_d=pi/5;omga=0:pi/30:pi;for N=3:4:51;w1= window(@blackman,N);w2 = window(@hamming,N);w3= window(@kaiser,N,2.5);w4= window(@hann,N);w5 = window(@rectwin,N);M=floor(N/2);subplot(311);plot(-M:M,[w1,w2,w3,w4,w5]); axis([-M M 0 1]);legend('Blackman','Hamming','kaiser','hann','rectwin');n=1:M;hd=sin(n*omga_d)./(n*omga_d)*omga_d/pi;hd=[fliplr(hd),1/omga_d,hd];h_d1=hd.*w1';h_d2=hd.*w2';h_d3=hd.*w3';h_d4=hd.*w4';h_d5=hd.*w5';m=1:M;H_d1=2*cos(omga'*m)*h_d1(M+2:N)'+h_d1(M+1);H_d2=2*cos(omga'*m)*h_d2(M+2:N)'+h_d2(M+1);H_d3=2*cos(omga'*m)*h_d3(M+2:N)'+h_d3(M+1);H_d4=2*cos(omga'*m)*h_d4(M+2:N)'+h_d4(M+1);H_d5=2*cos(omga'*m)*h_d5(M+2:N)'+h_d5(M+1);subplot(312);plot(omga,[H_d1,H_d2,H_d3,H_d4,H_d5]);legend('Blackman','Hamming','kaiser','hann','rectwin');subplot(313);plot(abs([fft(h_d1);fft(h_d2);fft(h_d3);fft(h_d4);fft(h_d5)] )');pause();end程序分析:整个对称窗的长度为N,然而为了在MATLAB中看到窗函数在负值时的形状需将N 变为它的一半,即为2M+1个长度。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Matlab实现振动信号低通滤波
附件txt中的数字是一个实测振动信号,采样频率为5000Hz,试设计一个长度为M=32的FIR低通滤波器,截止频率为600Hz,用此滤波器对此信号进行滤波。
要求:
(1)计算数字截止频率;
(2)给出滤波器系数;
(3)绘出原信号波形;
(4)绘出滤波后的信号波形;
解答过程:
第一部分:数字截止频率的计算
=600/5000/2=0.24 数字截止频率等于截止频率除以采样频率的一半,即
n
第二部分:滤波器系数的确定
在matlab中输入如下程序,即可得到滤波器系数:
n=32
Wn=0.24
b=fir1(n,Wn)
得到的滤波器系数b为
Columns 1 through 9
-0.0008 -0.0018 -0.0024 -0.0014 0.0021 0.0075 0.0110 0.0077 -0.0054
Columns 10 through 18
-0.0242 -0.0374 -0.0299 0.0087 0.0756 0.1537 0.2166 0.2407 0.2166
Columns 19 through 27
0.1537 0.0756 0.0087 -0.0299 -0.0374 -0.0242 -0.0054 0.0077 0.0110
Columns 28 through 33
0.0075 0.0021 -0.0014 -0.0024 -0.0018 -0.0008
第三部分:原信号波形
将附件4中的dat文件利用识别软件读取其中的数据,共1024个点,存在TXT 文档中,取名bv.txt,并复制到matlab的work文件夹。
在matlab中编写如下程序:
x0=load('zhendong.txt'); %找到信号数据地址并加载数据。
t=0:1/5000:1023/5000; %将数据的1024个点对应时间加载
figure(1);
plot(t,x0);
xlabel('t/s');
ylabel('幅值');
运行之后就得到如下波形,即振动信号的原始波形图:
00.050.1
0.150.20.25-1.5-1
-0.5
0.5
1
1.5
t/s 幅值
第四部分:滤波后的波形图
在matlab 窗口中输入如下程序,即可得到滤波后的波形图: x0=load('zhendong.txt');
t=0:1/5000:1023/5000;
figure(1);
plot(t,x0);
xlabel('t/s');
ylabel('幅值');
fs=5000;
n=32;
Wn=0.24;
b=fir1(n,Wn); %求滤波系数
y0=filter(b,1,x0); %用matlab 自带的filter 函数进行滤波 figure(2);
plot(t,y0);
xlabel('t/s');
ylabel('幅值');
程序运行后就可以得到滤波后的波形,如下图所示:
00.050.1
0.150.20.25
-0.8-0.6
-0.4
-0.2
0.2
0.4
0.6
t/s 幅值。