滤波器matlab.docx
- 文档编号:8697666
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:11
- 大小:24.46KB
滤波器matlab.docx
《滤波器matlab.docx》由会员分享,可在线阅读,更多相关《滤波器matlab.docx(11页珍藏版)》请在冰豆网上搜索。
滤波器matlab
>>n=31;%定义滤波器阶数32
fs=12.8*10^3;
fc1=49;
fc2=51;
w1=2*pi*fc1/fs;
w2=2*pi*fc2/fs;%参数转换,将模拟滤波器的技术指标转换为数字滤波器的技术指标
window=hanning(n+1);%使用hanning窗函数
q=fir1(n,[w1/piw2/pi],hanning(n+1));%滤波器时域函数,使用标准响应的加窗设计函数fir1
w=linspace(0,pi,512);
h1=freqz(q,1,512);%进行512个点的傅里叶变换
figure
(2);
plot(w/pi,20*log10(abs(h1)));
title('滤波器频谱图');
xlabel('频率');
ylabel('幅度');
grid;
设计FIR低通滤波器,系统频率为50MHz,通带截止频率Fpass为1MHz,阻带截止频率Fstop为4MHz,通带最大衰减Apass为1dB,阻带最小衰减Astop为30dB。
程序和必要的程序注释谢谢
最佳答案
只要用一个公式就行。
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
entityfiris
Port(clk:
instd_logic;
reset:
instd_logic;
inpx:
instd_logic_vector(11downto0);
outy:
outstd_logic_vector(11downto0));
endfir;
architecturebehoffiris
signalx0,x1,x2,x3:
std_logic_vector(11downto0);
constantc0:
integer:
=-1234*32768/1000;
constantc1:
integer:
=2345*32768/10000;
constantc2:
integer:
=5*32768;
constantc3:
integer:
=-3*32768/10000;
signalp0,p1,p2,p3:
integer;
signalsum:
integer;
begin
sample_delay_line:
process(clk)
begin
ifrising_edge(clk)then
ifreset='1'then
x3<=(others=>'0');
x2<=(others=>'0');
x1<=(others=>'0');
x0<=(others=>'0');
else
x3<=x2;
x2<=x1;
x1<=x0;
x0<=inpx;
endif;
endif;
endprocess;
p0<=conv_integer(x0)*c0;
p1<=conv_integer(x1)*c1;
p2<=conv_integer(x2)*c2;
p3<=conv_integer(x3)*c3;
sum<=p0+p1+p2+p3;
outy<=conv_std_logic_vector(sum/32768,12);
endbeh;
4.1数字滤波器简介
数字滤波器是一种用来过滤时间离散信号的数字系统,通过对抽样数据进行数学处理来达到频域滤波的目的。
可以设计系统的频率响应,让它满足一定的要求,从而对通过该系统的信号的某些特定的频率成分进行过滤,这就是滤波器的基本原理。
如果系统是一个连续系统,则滤波器称为模拟滤波器。
如果系统是一个离散系统,则滤波器称为数字滤波器。
信号通过线性系统后,其输出就是输入信号和系统冲激响应的卷积。
除了外,的波形将不同于输入波形。
从频域分析来看,信号通过线性系统后,输出信号的频谱将是输入信号的频谱与系统传递函数的乘积。
除非为常数,否则输出信号的频谱将不同于输入信号的频谱,某些频率成分较大的模,因此,中这些频率成分将得到加强,而另外一些频率成分的模很小甚至为零,中这部分频率分量将被削弱或消失。
因此,系统的作用相当于对输入信号的频谱进行加权。
4.2IIR滤波器的设计原理
IIR数字滤波器的设计一般是利用目前已经很成熟的模拟滤波器的设计方法来进行设计,通常采用模拟滤波器原型有butterworth函数、chebyshev函数、bessel函数、椭圆滤波器函数等。
IIR数字滤波器的设计步骤:
(1)按照一定规则把给定的滤波器技术指标转换为模拟低通滤波器的技术指标;
(2)根据模拟滤波器技术指标设计为响应的模拟低通滤波器;
(3)很据脉冲响应不变法和双线性不变法把模拟滤波器转换为数字滤波器;
(4)如果要设计的滤波器是高通、带通或带阻滤波器,则首先把它们的技术指标转化为模拟低通滤波器的技术指标,设计为数字低通滤波器,最后通过频率转换的方法来得到所要的滤波器。
4.3FIR滤波器的设计原理
FIR滤波器通常采用窗函数方法来设计。
窗设计的基本思想是,首先选择一个适当的理想选频滤波器(它总是具有一个非因果,无限持续时间脉冲响应),然后街区(加窗)它的脉冲响应得到线性相位和因果FIR滤波器。
我们用Hd(e^jw)表示理想的选频滤波器,它在通带上具有单位增益和线性相位,在阻带上具有零响应。
一个带宽wc 为了从hd(n)得到一个FIR滤波器,必须同时在两边截取hd(n)。 而要得到一个因果的线性相位滤波器,它的h(n)长度为N,必须有: 这种操作叫做加窗,h(n)可以看做是hd(n)与窗函数w(n)的乘积: h(n)=hd(n)w(n) 其中 根据w(n)的不同定义,可以得到不同的窗结构。 在频域中,因果FIR滤波器响应H(e^jw)由Hd(e^jw)和窗响应W(e^jw)的周期卷积得到,即 常用的窗函数有矩形窗、巴特利特(BARTLETT)窗、汉宁(HANNING)窗、海明(HAMMING)窗、布莱克曼(BLACKMAN)窗、凯泽(KAISER)窗等。 4.4FIR滤波器的窗函数设计法 FIR滤波器的设计方法有许多种,如窗函数设计法、频率采样设计法和最优化设计法等。 窗函数设计法的基本原理是用一定宽度窗函数截取无限脉冲响应序列获得有限长的脉冲响应序列,主要设计步骤为: (1)通过傅里叶逆变换获得理想滤波器的单位脉冲响应hd(n)。 (2)由性能指标确定窗函数W(n)和窗口长度N。 (3)求得实际滤波器的单位脉冲响应h(n),h(n)即为所设计FIR滤波器系数向量b(n)。 五、设计内容 5.1设计题目: 1-1.试用MATLAB设计一巴特沃斯低通数字滤波器,要求通带截至频率Wp=30HZ,主带截至频率为Ws=35HZ,通带衰减不大于0.5DB,主带衰减不小于40DB,抽样频Fs=100HZ。 1-2.基于Butterworth模拟滤波器原型,使用双线性状换设计数字滤波器: 各参数值为: 通带截止频率Omega=0.2*pi,阻带截止频率Omega=0.3*pi,通带波动值Rp=1dB,阻带波动值Rs=15dB,设Fs=20000Hz。 1-3设计一巴特沃斯高通数字滤波器,要求通带截止频率0.6*pi,通带衰减不大于1dB,阻带衰减15DB,抽样T=1。 1-4.设计一巴特沃斯带阻数字滤波器,要求通带上下截至频率为0.8*PI、0.2*PI,通带衰减不大于1DB,阻带上下截至频率0.7*PI、0.4*PI阻带衰减不小于30DB, 2-1.用窗函数法设计一个线性相位FIR低通滤波器,并满足性能指标: 通带边界频率 Wp=0.5*pi,阻带边界频率Ws=0.66*pi,阻带衰减不小于40dB,通带波纹不大于3dB。 选择汉宁窗。 2-4.用海明窗设计一个FIR滤波器,其中Wp=0.2*pi,Ws=0.3*pi,通带衰减不大于0.25dB,阻带衰减不小于50dB。 5.2设计程序代码及结果: 1-1一.试用MATLAB设计一巴特沃斯低通数字滤波器,要求通带截至频率Wp=30HZ,阻带截至频率为Ws=35HZ,通带衰减不大于0.5DB,阻带衰减不小于40DB,抽样频Fs=100HZ。 代码为: fp=30; fs=35; Fs=100; wp=2*pi*fp/Fs; ws=2*pi*fs/Fs; wp=tan(wp/2); ws=tan(ws/2);%通带最大衰减为0.5dB,阻带最小衰减为40dB [N,wn]=buttord(wp,ws,0.5,40,'s');%模拟低通滤波器极零点 [z,p,k]=buttap(N);%由极零点获得转移函数参数 [b,a]=zp2tf(z,p,k);%由原型滤波器获得实际低通滤波器 [B,A]=lp2lp(b,a,wp); [bz,az]=bilinear(B,A,.5); [h,w]=freqz(bz,az,256,Fs); figure plot(w,abs(h)) gridon 图1巴特沃斯数字低通滤波器 1-2基于Butterworth模拟滤波器原型,使用双线性状换设计数字滤波器: 各参数值为: 通带截止频率Omega=0.2*pi,阻带截止频率Omega=0.3*pi,通带波动值Rp=1dB,阻带波动值Rs=15dB,设Fs=4000Hz。 代码: wp=0.2*pi;ws=0.3*pi; Fs=4000;T=1/Fs; OmegaP=(2/T)*tan(wp/2); OmegaS=(2/T)*tan(ws/2); rp=1;rs=15;as=15; ripple=10^(-rp/20);attn=10^(-rs/20); [n,wn]=buttord(OmegaP,OmegaS,rp,rs,'s'); [z,p,k]=Buttap(n); [b,a]=zp2tf(z,p,k); [bt,at]=lp2lp(b,a,wn); [b,a]=bilinear(bt,at,Fs); [db,mag,pha,grd,w]=freqz_m(b,a); % %下面绘出各条曲线 subplot(2,2,1);plot(w/pi,mag);title('MagnitudeFrequency幅频特性'); xlabel('w(/pi)');ylabel('|H(jw)|'); axis([0,1,0,1.1]); set(gca,'XTickMode','manual','XTick',[00.20.31]); set(gca,'YTickMode','manual','YTick',[0attnripple1]);grid subplot(2,2,2);plot(w/pi,db);title('MagnitudeFrequency幅频特性(db)'); xlabel('w(/pi)');ylabel('dB'); axis([0,1,-30,5]); set(gca,'XTickMode','manual','XTick',[00.20.31]); set(gca,'YTickMode','manual','YTick',[-60-as-rp0]);grid subplot(2,2,3);plot(w/pi,pha/pi);title('PhaseFrequency相频特性'); xlabel('w(/pi)');ylabel('pha(/pi)'); axis([0,1,-1,1]); subplot(2,2,4);plot(w/pi,grd);title('GroupDelay群延时'); xlabel('w(/pi)');ylabel('Sample'); axis([0,1,0,15]); set(gca,'XTickMode','manual','XTick',[00.20.31]);grid 运行结果: 图2巴特沃思数字低通滤波器幅频-相频特性 1-3设计一巴特沃斯高通数字滤波器,要求通带截止频率0.6*pi,通带衰减不大于1dB,阻带衰减15DB,抽样T=1。 Wp=0.6*pi; Ws=0.4*pi; Ap=1; As=15; [N,wn]=buttord(Wp/pi,Ws/pi,Ap,As);%计算巴特沃斯滤波器阶次和截止频率 %频率变换法设计巴特沃斯高通滤波器 [db,mag,pha,grd,w]=freqz_m(b,a);%数字滤波器响应 plot(w,mag); title('数字滤波器幅频响应|H(ej\Omega)|') 图3巴特沃斯数字高通滤波器 2-1用窗函数法设计一个线性相位FIR低通滤波器,并满足性能指标: 通带边界频率 Wp=0.5*pi,阻带边界频率Ws=0.66*pi,阻带衰减不小于40dB,通带波纹不大于3dB。 选择汉宁窗。 代码: wp=0.5*pi; ws=0.66*pi; wdelta=ws-wp; N=ceil(8*pi/wdelta) ifrem(N,2)==0 N=N+1; end ); 1数字滤波器及传统设计方法 数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。 数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。 IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配。 所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。 FIR数字滤波器的单位脉冲响应是有限长序列。 它的设计问题实质上是确定能满足所要求的转移序列或脉冲响应的常数问题,设计方法主要有窗函数法、频率采样法和等波纹最佳逼近法等。 在对滤波器实际设计时,整个过程的运算量是很大的。 例如利用窗函数法【2】设计M阶FIR低通滤波器时,首先要根据 (1)式计算出理想低通滤波器的单位冲激响应序列,然后根据 (2)式计算出M个滤波器系数。 当滤波器阶数比较高时,计算量比较大,设计过程中改变参数或滤波器类型时都要重新计算。 (1) (2) 设计完成后对已设计的滤波器的频率响应要进行校核,要得到幅频相频响应特性,运算量也是很大的。 我们平时所要设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候都是要根据设计要求和滤波效果不断的调整,以达到设计的最优化。 在这种情况下,滤波器的设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难在短时间内完成设计。 利用MATLAB强大的计算功能进行计算机辅助设计,可以快速有效的设计数字滤波器,大大的简化了计算量,直观简便。 2数字滤波器的MATLAB设计 2.1FDATool界面设计 2.1.1FDATool的介绍 FDATool(FilterDesign&AnalysisTool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB6.0以上的版本还专门增加了滤波器设计工具箱(FilterDesignToolbox)。 FDATool可以设计几乎所有的基本的常规滤波器,包括FIR和IIR的各种设计方法。 它操作简单,方便灵活。 FDATool界面总共分两大部分,一部分是DesignFilter,在界面的下半部,用来设置滤波器的设计参数,另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。 DesignFilter部分主要分为: FilterType(滤波器类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的FIR滤波器。 DesignMethod(设计方法)选项,包括IIR滤波器的Butterworth(巴特沃思)法、ChebyshevTypeI(切比雪夫I型)法、ChebyshevTypeII(切比雪夫II型)法、Elliptic(椭圆滤波器)法和FIR滤波器的Equiripple法、Least-Squares(最小乘方)法、Window(窗函数)法。 FilterOrder(滤波器阶数)选项,定义滤波器的阶数,包括SpecifyOrder(指定阶数)和MinimumOrder(最小阶数)。 在SpecifyOrder中填入所要设计的滤波器的阶数(N阶滤波器,SpecifyOrder=N-1),如果选择MinimumOrder则MATLAB根据所选择的滤波器类型自动使用最小阶数。 FrenquencySpecifications选项,可以详细定义频带的各参数,包括采样频率Fs和频带的截止频率。 它的具体选项由FilterType选项和DesignMethod选项决定,例如Bandpass(带通)滤波器需要定义Fstop1(下阻带截止频率)、Fpass1(通带下限截止频率)、Fpass2(通带上限截止频率)、Fstop2(上阻带截止频率),而Lowpass(低通)滤波器只需要定义Fstop1、Fpass1。 采用窗函数设计滤波器时,由于过渡带是由窗函数的类型和阶数所决定的,所以只需要定义通带截止频率,而不必定义阻带参数。 MagnitudeSpecifications选项,可以定义幅值衰减的情况。 例如设计带通滤波器时,可以定义Wstop1(频率Fstop1处的幅值衰减)、Wpass(通带范围内的幅值衰减)、Wstop2(频率Fstop2处的幅值衰减)。 当采用窗函数设计时,通带截止频率处的幅值衰减固定为6db,所以不必定义。 WindowSpecifications选项,当选取采用窗函数设计时,该选项可定义,它包含了各种窗函数。 2.1.2带通滤波器设计实例 本文将以一个FIR滤波器的设计为例来说明如何使用MATLAB设计数字滤波器: 在小电流接地系统中注入83.3Hz的正弦信号,对其进行跟踪分析,要求设计一带通数字滤波器,滤除工频及整次谐波,以便在非常复杂的信号中分离出该注入信号。 参数要求: 96阶FIR数字滤波器,采样频率1000Hz,采用Hamming窗函数设计。 本例中,首先在FilterType中选择Bandpass(带通滤波器);在DesignMethod选项中选择FIRWindow(FIR滤波器窗函数法),接着在WindowSpecifications选项中选取Hamming;指定FilterOrder项中的SpecifyOrder=95;由于采用窗函数法设计,只要给出通带下限截止频率Fc1和通带上限截止频率Fc2,选取Fc1=70Hz,Fc2=84Hz。 设置完以后点击DesignFilter即可得到所设计的FIR滤波器。 通过菜单选项Analysis可以在特性区看到所设计滤波器的幅频响应、相频响应、零极点配置和滤波器系数等各种特性。 设计完成后将结果保存为1.fda文件。 在设计过程中,可以对比滤波器幅频相频特性和设计要求,随时调整参数和滤波器类型, 以便得到最佳效果。 其它类型的FIR滤波器和IIR滤波器也都可以使用FDATool来设计。 图1滤波器幅频和相频响应(特性区) Fig.1MagnitudeResponseandPhaseResponseofthefilter 2.2程序设计法 在MATLAB中,对各种滤波器的设计都有相应的计算振幅响应的函数【3】,可以用来做滤波器的程序设计。 上例的带通滤波器可以用程序设计: c=95;%定义滤波器阶数96阶 w1=2*pi*fc1/fs; w2=2*pi*fc2/fs;%参数转换,将模拟滤波器的技术指标转换为数字滤波器的技术指标 window=hamming(c+1);%使用hamming窗函数 h=fir1(c,[w1/piw2/pi],window);%使用标准响应的加窗设计函数fir1 freqz(h,1,512);%数字滤波器频率响应 在MATLAB环境下运行该程序即可得到滤波器幅频相频响应曲线和滤波器系数h。 篇幅所限,这里不再将源程序详细列出。 3Simulink仿真 本文通过调用Simulink中的功能模块构成数字滤波器的仿真框图,在仿真过程中,可以双击各功能模块,随时改变参数,获得不同状态下的仿真结果。 例如构造以基波为主的原始信号,,通过Simulink环境下的DigitalFilterDesign(数字滤波器设计)模块导入2.1.2中FDATool所设计的滤波器文件1.fda。 仿真图和滤波效果图如图2所示。 图2Simulink仿真图及滤波效果图 Fig.2Simulatedconnectionsandwaveform 可以看到经过离散采样、数字滤波后分离出了83.3Hz的频率分量(scope1)。 之所以选取上面的叠加信号作为原始信号,是由于在实际工作中是要对已经经过差分滤波的信号进一步做带通滤波,信号的各分量基本同一致,可以反映实际的情况。 本例设计的滤波器已在实际工作中应用,取得了不错的效果。 4结论 利用MATLAB的强大运算功能,基于MATLAB信号处理工具箱(SignalProcessingToolbox)的数字滤波器设计法可以快速有效的设计由软件组成的常规数字滤波器,设计方便、快捷,极大的减轻了工作量。 在设计过程中可以对比滤波器特性,随时更改参数,以达到滤波器设计的最优化。 利用MATLAB设计数字滤波器在电力系统二次信号处理软件和微机保护中,有着广泛的应用前景。 通带截止频率fp=1KHz,阻带截止频率fs=1.5KHz,通带衰减Rp=1.5dB,阻带衰减Rs=25dB,采样频率Fs=10kHz。 wp=1k/10k ws=1.5/10 rp=1.5db rs=25 [N,Wn]=BUTTORD(wp,ws,rp,rs) [b,a]=butter(n,wn) freqz(b,a)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 滤波器 matlab