单片机系统FIR数字滤波器的设计与仿真

合集下载

FIR数字滤波器的设计与仿真

FIR数字滤波器的设计与仿真

郑州大学本科毕业设计(论文)题目FIR数字滤波器的设计与仿真指导老师职称硕士学生姓名学号20081522142专业通信工程班级1班院(系) 电子信息工程学院电子工程系完成时间2012年04月25日FIR数字滤波器的设计与仿真摘要论文针对窗函数法、频率采样法和最优化设计法三种设计方法,采用MATLAB 进行FIR 滤波器的设计与仿真,并比较了三种方法的特点。

结果表明,在同样的设计指标下,利用等波纹切比雪夫逼近法则的设计可以获得最佳的频率特性和衰耗特性,具有通带和阻带平坦,过渡带窄等优点。

数字滤波器可以利用软件和数字处理硬件两种方式实现,本文在matlab基础上采用了窗函数设计法、波纹逼近设计法、频率采样分别设计了通带和阻带FIR 数字滤波器,比较了不同方法设计出滤波器的通带、阻带、过渡带以及阶数,通过分析大量的设计仿真指出了不同设计方法的特点:窗函数设计法设计方法简便,通带内稳定性高,过渡带宽度随滤波器的阶数变化而变化;波纹逼近法设计出的滤波器阶数较低,计算量较小;最小乘方法误差较低,通带内平稳度高并且最小阻带衰减高。

关键词 FIR滤波器/MATLAB/ 窗函数法/频率采样法/等波纹切比雪夫逼近THE DESIGN AND SIMUlLATION OF FIR DIGITAL FILTERABSTRACTPaper for Windows function method, the frequency sampling method and design method of optimization design method for three, FIR filter design using MATLAB and simulation, and compares the characteristics of the three methods. Results indicate that, under the same design index, wave-cut than snow and approximation rules of design can achieve the optimum frequency and attenuation characteristic, with flat passband and stopband, transition with narrower and so on. Digital filter device can using software and digital processing hardware two species way implementation, this in MATLAB Foundation Shang used has window function design method, and corrugated approximation design method, and frequency sampling respectively design has pass with and resistance with FIR digital filter device, comparison has different method design out filter of pass with, and resistance with, and transition with and order number, by analysis large of design simulation pointed out that has different design method of features: window function design method design method easy, pass with within stability high, Transition width changes depending on filter order changes; ripple lower order approximation method for design of filter, compute-smaller; method of least squares error is low, high stability and minimum in the passband higher stopband attenuation.KEY WORDS FIR filter,MATLAB,Window function,frequency sampling method,ripple cut than the snow,such as approximation目录摘要 (I)ABSTRACT........................................ 错误!未定义书签。

单片机fir滤波器算法的实现

单片机fir滤波器算法的实现

单片机fir滤波器算法的实现单片机是一种常用的嵌入式系统电路,可以通过编程控制其功能。

其中之一的应用就是实现滤波器算法,用于信号处理和数据分析。

FIR滤波器是一种常见的数字滤波器,通过有限长度的冲激响应函数来处理输入信号。

在本文中,我将探讨单片机中FIR滤波器算法的实现。

1. FIR滤波器简介FIR滤波器,全称为有限冲激响应滤波器(Finite Impulse Response Filter),它的输出只依赖于当前和过去的输入样本,不依赖于未来的输入样本。

FIR滤波器常用于去除信号中的噪声、平滑信号、滤除频率特定的组分等应用。

2. FIR滤波器算法原理FIR滤波器的算法原理是基于信号与滤波器的卷积运算。

具体来说,FIR滤波器将输入信号与一组系数进行加权求和,得到输出信号。

这组系数称为滤波器的冲激响应函数,决定了滤波器的频率特性和幅度响应。

3. 单片机中的FIR滤波器实现步骤1) 定义滤波器的系数。

根据需要设计陷波器或带通滤波器等,确定系数的数量和取值。

2) 获取输入信号样本。

通过单片机的模数转换器(ADC)获取输入信号的模拟样本值。

3) 实现滤波器算法。

将输入信号样本与滤波器系数进行加权求和,得到输出信号样本。

4) 输出滤波后的信号。

通过单片机的数模转换器(DAC)将输出信号样本转换为模拟信号输出。

4. 单片机中FIR滤波器算法的实现要点- 系数选择:根据所需的频率响应和滤波器类型,选择适当的系数。

常见的系数设计方法包括窗函数法、最小二乘法等。

- 数据类型选择:根据单片机的数据类型和精度要求,选择适当的数据类型表示滤波器系数和输入/输出信号。

- 内存管理:考虑到单片机的资源限制,合理管理存储器来存储滤波器系数和中间计算结果。

- 实时性要求:根据实时性要求,合理选择单片机的工作频率和计算速度,确保滤波器算法能够满足实时处理的需求。

5. 我的观点和理解FIR滤波器是一种常用的滤波器算法,其在单片机中的实现能够实现信号处理和数据分析的功能。

数字FIR滤波器的设计与仿真实现

数字FIR滤波器的设计与仿真实现

1 数字滤 波器设计基础
数字滤波器可以分为两大类 : 无限脉 冲响应滤波器 ( R 和有 限脉 冲响应滤 波器 (I )I Ⅱ ) F . R滤波 器一 般通过 系统 函数或 R I 差分方程建模 。 以递归的形式实现 ;I 并 F R滤波器可 以对给定的频率特性直接进行设计 , 并以非递归 的方式 实现.I FR系统有 自
Y n )= (T ( T n) () 1
任意一个 激励 ( 可以表示成 n)
() n =∑ 瓢 n) (
其 中 机( T 又可 以表示成 n)
( T ( T ( T—k ) n )= k ) n T
() 2
c =‘ { n
() 3
将式() 3 带入式() 2 中可得
h ( )截取一段 ^ n dn ( )来近似表示 h ( )可得 dn ,
^n ( )= h ( ) n d n W( )
N 1

(1 1)


由此可得
日( )=
hn: ( )
(2 1)
n=0
式 (2 1)中, Ⅳ为窗 口宽度 , 是物理可实现 系统 . 日( )
() n :∑ ( n一 ) )(
= 一 ■
() 4
在一个线性时不变系统 中 ,
,n) ( ) ∑ .)( k) , : n : ( ( n r :∑ ( ) (T ) j T } . 痢 n 一 =∑ .)( 一 ) j } ( n j T }
2 窗 函数法基本原理
兀R滤波器设计的主要任务是根据给定的性能指标确定滤波器的系数, 即系统单位脉冲序列 ^ n , ( )它是一个有限长序
列 . 设 (豇 是所要求 的理想 响应 序列 , 假 e1 ) 则

FIR数字滤波器分布式算法的原理及FPGA实现

FIR数字滤波器分布式算法的原理及FPGA实现

FIR数字滤波器分布式算法的原理及FPGA实现摘要:在利用FPGA实现数字信号处理方面,分布式算法发挥着关键作用,与传统的乘积-积结构相比,具有并行处理的高效性特点。

详细研究了基于FPGA、采用分布式算法实现FIR数字滤波器的原理和方法,并通过Xilinx ISE在Modelsim下进行了仿真。

关键词:分布式算法 DALUT FPGA FIR数字滤波器正在迅速地代替传统的由R、L、C元件和运算放大器组成的模块滤波器并且日益成为DSP的一种主要处理环节。

FPGA 也在逐渐取代ASIC和PDSP,用作前端数字信号处理的运算(如:FIR滤波、CORDIC算法或FFT)。

乘累加运算是实现大多数DSP 算法的重要途径,而分布式算法则能够大大提高乘累加运算的效能。

1 传统的乘累加结构FIR数字滤波器基本理论FIR滤波器被称为有限长脉冲响应滤波器,与IIR数字滤波器相对应,它的单位脉冲响应h(n)只有有限个数据点。

输入信号经过线性时不变系系统输出的过程是一个输入信号与单位脉冲响应进行线性卷积的过程,即:式中,x(n)是输入信号,y(n)是卷积输出,h(n)是系统的单位脉冲响应。

可以看出,每次采样y(n)需要进行L次乘法和L-1次加法操作实现乘累加之和,其中L是滤波器单位脉冲响应h(n)的长度。

可以发现,当L很大时,每计算一个点,则需要很长的延迟时间。

2 乘累加运算的位宽分配DSP算法最主要的就是进行乘累加运算。

假设采样信号的位宽用N来表示,则N位与N位的乘累结果需要2N位的寄存器来保存;如果两个操作数都是有符号数,则乘积只有2N-1个有效位,因为产生了两个符号位。

为了使累加器的结果不产生溢出,需要对累加器进行冗余设计,也就是说要在累加器2N的位宽上多设计出K位,累加器的长度M 计算方式如下(L为滤波器的长度):对于无符号数:M=2N+K=2N+log2 L对于有符号数:M=2N=K=2N+log2 L-13 乘累加运算的分布式算法原理分析得益于Xilinx FPGA查找表结构的潜能,分布式算法在滤波器设计方面显示出了很高的效率,自20世纪90年代初以来越来越受到人们的重要。

毕业设计35FIR滤波器的MATLAB仿真

毕业设计35FIR滤波器的MATLAB仿真

分类号:0304单位代码:10452 FIR滤波器的MATLAB仿真姓名学号200407340310年级 2004专业电气工程及其自动化系(院)物理系指导教师2008年02月25日摘要典型设计是先按一定规则将给出的数字滤波器的技术指标转换成模拟低通滤波器的技术指标,据此产生模拟滤波器原型,然后把模拟低通滤波器原型转换成模拟低通、高通、带通、带阻滤波器,最后再把模拟滤波器转换成数字滤波器。

完全设计方法中我们利用函数直接设计出低通、高通、带通和带阻滤波器,并分别用巴特沃斯(Butterworth)滤波器、切比雪夫(Chebyshev)滤波器、椭圆(Cauer)滤波器来实现,并比较了各自的频率响应曲线。

关键词:FIR数字滤波器、MATLAB、窗AbstractThe typical design gets the technical parameters from digital filters that should be designed, and then transformed into the analog parameters of a low-pass analog filter prototype. The prototype is converted into the analog low-pass, high-pass, band-pass, and the band-stop filters respectively, which are transformed into the digital ones.The complete design uses the given functions and releases the low-pass, high-pass, band-pass and the band-stop filters directly. Butterworth, Chebyshev and Cauer filters are used for the implementations.Key word: FIR Digital filters MATLAB Window目录摘要 (I)Abstract (II)1.绪论 (1)2.数字滤波器 (3)2.1什么是数字滤波器 (3)2.2数字滤波器的分类 (3)2.3数字滤波器的设计要求和方法 (3)2.4数字滤波器设计方法概述 (4)3.FIR滤波器的设计 (6)3.1窗函数法 (6)3.2频率取样法 (8)3.3优化设计法 (9)3.4带过渡带的多带FIR滤波器设计 (11)3.5约束最小二乘FIR滤波器设计 (13)3.6任意响应滤波器设计 (14)3.7 FIR滤波器设计实例 (15)总结 (17)参考文献 (18)谢辞 (20)1.绪论数字滤波在通信、图像编码、语音编码、雷达等许多领域中有着十分广泛的应用[1][2]。

基于FPGA的FIR数字滤波器设计与仿真

基于FPGA的FIR数字滤波器设计与仿真

a in ls p rto , so ai n o h p n . I l r i w d l s d b c u e o t t c h s itrin a d s a p c t o s s a e a ain r t r t rs a ig F R f t s i ey u e e a s fi s i tp a e d s t o n h r u — f g e o i e s r o
c a a trsi. h a i h o yo i i lf tra d t e meh d o a iai n a e r s a c e . h e i n o e rq i d d gt l h r c e i cT eb sc t e r fd gt le n h t o f e l t r e e r h dT e d sg ft e u r ii t a i r z o h e a i e sgv n u ig t e smu ae s f r fMAT AB.n h i l t r s l i ie . f tri ie sn h i lt o t a e o l w L a d t e smua e e u t sgv n Ke r sf t r d gt l c nr ls se / cl y i sal t n r v e d sr u e l oi m ; n o f n t n y wo d :i e ; ii ; o to y t msf i t n tl i e iw; it b t d ag rt l a a i ao i h wi d w c i u o
y∑c]2 + b2f = 【l ∑X ] n一 [ n
n = 0 L = 0 J
( 3 )
分 布 式 算 法 是 一 种 以 实 现 乘 加 运 算 为 目的 的运 算 方 法 。 它 与传 统 算 法 实 现 乘 加 运 算 的 不 同 在 于执 行 部 分 积 运 算 的先 后顺序。 该算 法 利 用一 个 查 找 表 (U ) 现 映射 , 用 一 个 2 L T实 即 字 宽 、 先 编 好 程 序 的 L T接 收 一个 Ⅳ 位 输 入 向 量 X= 】 预 U I 【 , x0 %[ , , [- l 映 射 , 查 找 表 的 查 找后 直接 输 出 部 分 积 。 1 … x N l】 】  ̄ 的 经 与传 统 算 法 相 比 , 布式 算 法 可 极 大 的 减 少 硬 件 电路 的规 模 , 分

数字滤波器的设计及其MATLAB实现

数字滤波器的设计及其MATLAB实现

设计低通数字滤波器,要求在通带内频率低于0.2pirad时,允许幅度误差在1dB以内,在频率0.3pi rad~pi rad之间的阻带衰减大于15dB,用脉冲响应不变法设计数字滤波器,T=1: 切比雪夫I型模拟滤波器的设计子程序:function [b,a]=afd_chb1(Omegap,Omegar,Ar)if Omegap<=0error('通带边缘必须大于0')endif(Dt<=0)|(Ar<0)error('通带波动或阻带衰减必须大于0');endep=sqrt(10^(Dt/10)-1);A=10^(Ar/20);OmegaC=Omegap;OmegaR=Omegar/Omegap;g=sqrt(A*A-1)/ep;N=ceil(log10(g+sqrt(g*g-1))/log10(OmegaR+sqrt(OmegaR*OmegaR-1)));fprintf('\n***切比雪夫I型模拟低通滤波器阶数=%2.0f\n',N);[b,a]=u_chblap(N,Dt,OmegaC);设计非归一化切比雪夫I型模拟低通滤波器原型程序:function [b,a]=u_chblap(N,Dt,OmegaC)[z,p,k]=cheb1ap(N,Dt);a=real(poly(p));aNn=a(N+1);p=p*OmegaC;a=real(poly(p));aNu=a(N+1);k=k*aNu/aNn;b0=k;B=real(poly(z));b=k*B;直接形式转换成级联形式子程序:function [C,B,A]=sdir2cas(b,a)Na=length(a)-1;Nb=length(b)-1;b0=b(1);b=b/b0;a0=a(1);a=a/a0;C=b0/a0;p=cplxpair(roots(a));K=floor(Na/2);if K*2==NaA=zeros(K,3);for n=1:2:NaArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);elseif Na==1A=[0 real(poly(p))];elseA=zeros(K+1,3);for n=1:2:2*KArow=p(n:1:n+1,:);Arow=poly(Arow);A((fix(n+1)/2),:)=real(Arow);endA(K+1,:)=[0 real(poly(p(Na)))];endz=cplxpair(roots(b));K=floor(Nb/2);if Nb==0B=[0 0 poly(z)];elseif K*2==NbB=zeros(K,3);for n=1:2:NbBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endelseif Nb==1B=[0 real(poly(z))];elseB=zeros(K+1,3);for n=1:2:2*KBrow=z(n:1:n+1,:);Brow=poly(Brow);B((fix(n+1)/2),:)=real(Brow);endB(K+1,:)=[0 real(poly(z(Nb)))];End计算系统函数的幅度响应和相位响应子程序:function [db,mag,pha,w]=freqs_m(b,a,wmax)w1=0:500;w=w1*wmax/500;h=freqs(b,a,w);mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);脉冲响应不变法程序:function [b,a]=imp_invr(c,d,T)[R,p,k]=residue(c,d);p=exp(p*T);[b,a]=residuez(R,p,k);b=real(b).*T;数字滤波器响应子程序:function [db,mag,pha,grd,w]=freqz_m(b,a);[H,w]=freqz(b,a,1000,'whole');H=(H(1:501))';w=(w(1:501))';mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(b,a,w);直接转换成并联型子程序:function [C,B,A]=dir2par(b,a)M=length(b);N=length(a);[r1,p1,C]=residuez(b,a);p=cplxpair(p1,10000000*eps);x=cplxcomp(p1,p);r=r1(x);K=floor(N/2);B=zeros(K,2);A=zeros(K,3);if K*2==Nfor i=1:2:N-2br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br');A((fix(i+1)/2),:)real(ar');end[br,ar]=residuez(r(N-1),p(N-1),[]);B(K,:)=[real(br') 0];A(K,:)=[real(ar') 0];elsefor i=1:2:N-1br=r(i:1:i+1,:);ar=p(i:1:i+1,:);[br,ar]=residuez(br,ar,[]);B((fix(i+1)/2),:)real(br);A((fix(i+1)/2),:)real(ar);endEnd比较两个含同样标量元素但(可能)有不同下标的复数对及其相位留数向量子程序:function I=cplxcomp(p1,p2)I=[];for i=1:length(p2)for j=1:length(p1)if(abs(p1(j)-p2(i))<0.0001)I=[I,j];endendendI=I';双线性变换巴特沃斯低通滤波器设计:巴特沃思模拟滤波器的设计子程序:function [b,a]=afd_butt(wp,ws,Rp,rs)if wp<=0error('通带边缘必须大于0');endif ws<=wperror('阻带边缘必须大于通带边缘');endif(Rp<=0)|(Rs<0)error('通带波动或阻带衰减必须大于0');endN=ceil((log10((10^(Rp/10)-1)/(10^(Rs/10)-1)))/(2*log10(wp/ws))); fprintf('\n***Butterworth Filter Order=%2.0f\n',N);OmegaC=wp/((10^(Rp/10)-1)^(1/(2*N)));[b,a]=u_buttap(N,OmegaC)设计非归一化巴特沃思模拟低通滤波器原型子程序:function [b,a]=u_buttap(N,OmegaC)[z,p,k]=buttap(N);p=p*OmegaC;k=k*OmegaC^N;B=real(poly(z));b0=k;b=k*B;a=real(poly(p));直接型到级联型形式的转换:function [b0,B,A]=dir2cas(b,a)b0=b(1);b=b/b0;a0=a(1);a=a/a0;b0=b0/a0;M=length(b);N=length(a);if N>Mb=[b,zeros(1,N-M)];a=[a,zeros(1,M-N)];elseNM=0;endk=floor(N/2);B=zeros(k,3);A=zeros(k,3);if k*2==Nb=[b,0];a=[a,0];endbroots=cplxpair(roots(b));aroots=cplxpair(roots(a));for i=1:2:2*kbr=broots(i:1:i+1,:);br=real(polt(br));B((fix(i+1)/2),:)=br;ar=aroots(i:1:i+1,:);ar=real(polt(ar));A((fix(i+1)/2),:)=ar;Endfunction [db,mag,pha,grd,w]=freqz_m(b,a)[h,w]=freqz(b,a,1000,'whole');h=(h(1:501))';w=(w(1:501))';mag=abs(h);db=20*log10((mag+eps)/max(mag));pha=angle(h);grd=grdelay(b,a,w);设计一个巴特沃思高通滤波器,要求通带截止频率为0.6pi,通带内衰减不大于1dB,阻带·起始频率为0.4pi,阻带内衰减不小于15dB,T=1:>> wp=0.6*pi;ws=0.4*pi;>> Rp=1;Rs=15;T=1;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs) 计算巴特沃思滤波器阶数和截止频率N =4wn =>> [b,a]=butter(N,wn,'high'); 频率变换法计算巴特沃思高通滤波器>> [C,B,A]=dir2cas(b,a)C =0.0751B =1.0000 -2.0000 1.00001.0000 -2.0000 1.0000A =1.0000 0.1562 0.44881.0000 0.1124 0.0425>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi,db);椭圆带通滤波器的设计--ellip函数的应用:>> ws=[0.3*pi 0.75*pi]; 数字阻带边缘频率>> wp=[0.4*pi 0.6*pi]; 数字通带边缘频率>> Rp=1;Rs=40;>> Ripple=10^(-Rp/20); 通带波动>> Attn=10^(-Rs/20); 阻带衰减>> [N,wn]=ellipord(wp/pi,ws/pi,Rp,Rs) 计算椭圆滤波器参数N =4wn =0.4000 0.6000>> [b,a]=ellip(N,Rp,Rs,wn); 数字椭圆滤波器的设计>> [b0,B,A]=dir2cas(b,a) 级联形式实现b0 =0.0197B =1.0000 1.5066 1.00001.0000 0.9268 1.00001.0000 -0.9268 1.00001.0000 -1.5066 1.0000A =1.0000 0.5963 0.93991.0000 0.2774 0.79291.0000 -0.2774 0.79291.0000 -0.5963 0.9399>> figure(1);>> [db,mag,pha,grd,w]=freqz_m(b,a);>> subplot(2,2,1);plot(w/pi,mag);>> grid on;>> subplot(2,2,3);plot(w/pi,db);grid on;>> subplot(2,2,2);plot(w/pi,pha/pi);grid on;>> subplot(2,2,4);plot(w/pi,grd);设计一个巴特沃思带阻滤波器,要求通带上下截止频率为0.8pi、0.2pi,通带内衰减不大于1dB,阻带上起始频率为0.7pi、0.4pi,阻带内衰减不小于30dB:>> wp=[0.2*pi 0.8*pi];>> ws=[0.4*pi 0.7*pi];>> Rp=1;Rs=30;>> [N,wn]=buttord(wp/pi,ws/pi,Rp,Rs);>> [b,a]=butter(N,wn,'stop');>> [C,B,A]=dir2cas(b,a)C =0.0394B =1.0000 0.3559 0.99941.0000 0.3547 1.00401.0000 0.3522 0.99541.0000 0.3499 1.00461.0000 0.3475 0.99601.0000 0.3463 1.0006A =1.0000 1.3568 0.79281.0000 1.0330 0.46331.0000 0.6180 0.17751.0000 -0.2493 0.11131.0000 -0.6617 0.37551.0000 -0.9782 0.7446>> [db,mag,pha,grd,w]=freqz_m(b,a); >> subplot(2,1,1);plot(w/pi,mag);>> subplot(2,1,2);plot(w/pi);数字低通---数字带阻:function [bz,az]=zmapping(bZ,aZ,Nz,Dz) bzord=(length(bZ)-1)*(length(Nz)-1); azord=(length(aZ)-1)*(length(Dz)-1);bz=zeros(1,bzord+1);for k=0:bzordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:bzord-k-1pld=conv(pld,Dz);endbz=bz+bZ(k+1)*conv(pln,pld); endfor k=0:azordpln=[1];for i=0:k-1pln=conv(pln,Nz);endpld=[1];for i=0:azord-k-1pld=conv(pld,Dz);endaz=az+aZ(k+1)*conv(pln,pld); endall=az(1);az=az/az1;bz=bz/az1;线性相位FIR滤波器的幅度特性:function pzkplot(num,den)hold on;axis('square');x=-1:0.01:1;y=(1-x.^2).^0.5;y1=-(1-x.^2).^0.5;plot(x,y,'b',x,y1,'b');num1=length(num);den1=length(den);if(num1>1)z=roots(num);elsez=0;endif(den1>1)p=roots(den);elsep=0;endif(num>1&den1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max_z=max(r_max_z,i_max_z);r_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max_p=max(r_max_p,i_max_p);a_max=max(a_max_z,a_max_p);elseif (num1>1)r_max_z=max(abs(real(z)));i_max_z=max(abs(imag(z)));a_max=max(r_max_z,i_max_z);elser_max_p=max(abs(real(p)));i_max_p=max(abs(imag(p)));a_max=max(r_max_p,i_max_p);endaxis([-a_max a_max -a_max a_max]);plot([-a_max a_max],[0 0],'b');plot([0 0],[-a_max a_max],'b');plot([-a_max a_max],[a_max a_max],'b');plot([a_max a_max],[-a_max a_max],'b');Lz=length(z);for i=1:Lz;plot(real(z(i)),imag(z(i)),'bo');endLp=length(p);for j=1:Lpplot(real(p(j)),imag(p(j)),'bx');endtitle('The zeros-pole plot');xlabel('虚部');ylabel('实部');function [Hr,w,a,L]=Hr_Type1(h)M=length(h);L=(M-1)/2;a=[h(L+1) 2*h(L:-1:1)];n=[0:1:L];w=[0:1:500]'*pi/500;Hr=cos(w*n)*a';设计I型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,a,L]=Hr_Type1(h);>> amax=max(a)+1;>> amin=min(a)-1;>> subplot(2,2,1);stem(n,h);>> axis([-1 2*L+1 amin amax]);text(2*L+1.5,amin,'n'); >> xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(0:L,a);>> axis([-1 2*L+1 amin amax]);>> xlabel('n');ylabel('a(n)');title('a(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);>> grid on;text(1.05,-20,'频率pi');>> xlabel('频率');ylabel('Hr');title('I 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);>> title('零极点分布');function [hr,w,b,L]=Hr_Type2(h)M=length(h);L=M/2;b=2*h(L:-1:1);n=[1:1:L];n=n-0.5;w=[0:1:500]'*pi/500;hr=cos(w*n)*b';II型线性相位FIR滤波器:>> h=[-4 1 -1 -2 5 6 5 -2 -1 1 -4];>> M=length(h);n=0:M-1;>> [Hr,w,b,L]=Hr_Type2(h);Warning: Integer operands are required for colon operator when used as index. > In Hr_Type2 at 2>> bmax=max(b)+1;bmin=min(b)-1;>> subplot(2,2,1);stem(n,h);axis([-1 2*L+1 bmin bmax]);text(2*L+1.5,bmin,'n');xlabel('n');ylabel('h(n)');title('脉冲响应');>> subplot(2,2,3);stem(1:L,b);axis([-1 2*L+1 bmin bmax]);xlabel('n');ylabel('b(n)');title('b(n) 系数');>> subplot(2,2,2);plot(w/pi,Hr);grid on;text(1.05,-20,'频率pi');xlabel('频率');ylabel('Hr');title('II 型振幅响应');>> subplot(2,2,4);pzkplot(h,1);title('零极点分布');function [hr,w,c,L]=Hr_Type3(h)M=length(h);L=(M-1)/2;b=2*h(L+1:-1:1);n=[1:1:L];w=[0:1:500]'*pi/500;hr=cos(w*n)*c';用MA TLAB编程绘制各种窗函数的形状。

基于MATLAB的FIR数字滤波器的设计与仿真

基于MATLAB的FIR数字滤波器的设计与仿真

本科毕业设计论文题目基于MATLAB的FIR数字滤波器的设计与仿真专业名称电子信息工程学生姓名指导教师毕业时间2012年6月毕业一、题目基于MATLAB的FIR数字滤波器的设计与仿真二、指导思想和目的要求1. 指导思想:随着信息技术的迅猛发展,数字信号处理已成为一个极其重要的学科和技术领域,在通信、语音、图像、自动控制和家用电器等众多领域得到了广泛的应用。

数字滤波器是数字信号处理的一个重要的技术分支。

利用它可以在形形色色的信号中提取所需要的信号,抑制不需要的干扰或噪声。

数字滤波器根据其单位冲激响应函数的时域特性分为两种:无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。

IIR滤波器保留了模拟滤波器较好的幅度特性,设计简单有效,但这些特性是以牺牲相位特性为代价而获得的,然而现在许多数据传输、图像处理系统都越来越多的要求系统具有线性相位特性。

在这方面,FIR滤波器具有独特的优点,它可以保持严格的线性相位特性,因此越来越受到广泛的重视。

2. 目的要求:(1)介绍当今国内外关于MATLAB设计数字滤波器的设计及研究方向,熟练使用MATLAB软件并熟练运用MATLAB编程语言;(2)介绍数字滤波器的类型并着重研究FIR数字滤波器的主要设计方法:窗函数法,频率采样法,等波纹最佳逼近法。

根据不同方法的不同设计思路编出具体程序,并将其分别进行分析比较,利用Simulink进行仿真并验证;(3)经过仿真,将各种方法设计出的滤波器对指定波形滤波前后进行比较并得出有关结论。

三、进度和要求1. 3-5周查阅资料,确定方案,撰写开题报告。

2. 6-7周学习使用MATLAB软件,翻译英文资料。

3. 8-13周完成FIR数字滤波器的设计,并通过MATLAB进行仿真测试;4. 14-15周整理、完成毕业设计,并撰写论文;5. 15-16周准备及完成毕业设计答辩。

四、主要参考书及参考资料[1]高西全、丁玉美,数字信号处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3 Proteus 仿真设计
通过上述的 MatLab 设计,得到了满足性能指标 要求的 FIR 数字滤波器参数, 下一步就需要在具体 的单片机系统中实现它。 本设计中单片机选用 AVR 系列 ATMEGA16 芯片[4],并 使用功能强 大的 Proteus 软件进行 FIR 数字滤波器的软、硬件模拟动态仿真, 待完全满足设计指标要求后,再制作实际电路,应用 到具体的数据采集产品中。
首 先 在 MatLab 软 件 中 实 现 这 个 数 字 滤 波 器[3], 得到满足以上性能指标要求的滤波器参数。 其 MatLab 程序如下:
% % 设计一线性相位 FIR 滤波器 % format long fedge=input(‘单位为 Hz 的频带截止频率=’); mval=input (‘每 个 频 带 所 需 的 幅 度 值 =’); dev=input (‘每 个 频 带 所 需 的 波 纹 =’); ft=input(‘单位为 Hz 的抽样频率=’); [N,fpts,mag,wt]=remezord(fedge,mval,dev,ft); b=remez(N,fpts,mag,wt); [h,w]=freqz(b,1,256); plot(w/pi,20*log10(abs(h)));grid; xlabel(‘\omega/\pi’);ylabel(‘增益,dB’);
一个典型 FIR 滤波器的滤波过程为:y(n)=x(n)× h(n)。 其具体实现算法[6]可表示如下:
①滤波器数据移位寄存器清零; ②数据移位寄存器顺序移位后将待滤波数据输 入移位寄存器; ③数据移位寄存器各项和滤波器参数寄存器对 应项相乘并累加; ④重 复②、③ 直 到 所 有 数 据 完 成 滤 波 。 以上算法将卷积中的数据移位寄存器和滤波参 数寄存器的对应项都逐一相乘并累加, 要求每个点 都经过滤波器移位、卷积运算,其运算量随着滤波器 阶数的上升成线性增加。 考虑到线性相位 FIR 数字
关键词: FIR 滤波器; AVR 单片机; Proteus; MatLab
0 引言
在以单片机为核心的数据采集系统中, 经常需 要对数据进行滤波处理, 但由于运算速度及存储空 间的限制, 常用的单片机滤波算法主要以多次测量 求 平 均 值 为 主 ,例 如 中 值 滤 波 [1]、 滑 动 平 均 滤 波 等 , 这 些滤波算法有时不能满足性能要求。 有限冲激响应 FIR 数字滤波器不但结构稳定, 而且在满足幅频特 性的同时能保证严格的线性相位, 在多种单片机数 据采集系统中具有广泛的应用前景。
输入以下滤波器指标: fedge=[800,1000] mval=[1 0] dev=[0.0559 0.01] ft=4000
得到系统增益响应如图 2 所示。
10 0
-10 -20 -30 -40 -50 -60 -70 -80 -90
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
貚貥貋 现代计算机 2010.03
开发案例
h(n) h(n)
N 为奇数 N 为偶数
图 1 线性相位 FIR 数字滤波器的 典型冲激响应序列 h(n)
2 FIR 滤波器的 MatLab 设计
本文以低通滤波器为例说明线性相位 FIR 数字 滤波器的设计方法。 要求滤波器满足以下指标:通带 截止频率 FT=800Hz,阻带截止频率 FS=1000Hz,通带 波纹 αp=0.5dB, 最小阻带衰减 αs=40dB, 抽样频率 Ft=4000Hz。
数字滤波器的阶数。
对(1)式进行 Z 变换,可得 FIR 数字滤波器的系
统函数:
N-1
Σ H(Z)= Y(Z) = h(k)Z-k
(2)
X(Z) k=0
从上式可见,FIR 数字滤波器是非递归系统,其
冲激响 应 h(k)是 有 限 长 序 列 ,其 系 统 函 数 H(Z)仅
在 Z=0 处有(N-1) 阶极点,而在其他地方没有极点,
Proteus 仿真中,使用 MatLab 软件计算出的 FIR 数字滤波器参数 h(k)已事先准备好,并经过数据截
现代计算机 2010.03 貋貚貦
开发案例
短, 以适合 ATMEGA16 单片机进行快速运算。 FIR 数字滤波算法由 ATMEGA16 单片机的程序来实现, A/D 转换功能由 ATMEGA16 单片机内 部 集 成 的 10 位 A/D 转 换 器 完 成 。 D/A 转 换 则 选 用 DAC0808 芯 片,将从单片机得到的滤波后的数字信号,转变为模 拟信号,送入下一级。 信号拾取电路主要由信号传感 器组成,完成对源信号的拾取,获得相应电信号,可 以视具体情况加入放大电路, 保证源信号的拾取和 初步的精度。 同时为了直观地分析系统响应,还增加 了“Analogue Analysis”仿真图形显示,可以将滤波前 后的模拟信号显示出来,便于观测和分析。 具体的用 ISIS 设计的仿真原理图如图 3 所示。
* 基金项目:广东省 2009 年社会发展重点项目(No.2009A030200016) 收稿日期:2010-01-21 修稿日期:2010-03-16 作 者 简 介 :吴 永 (1969- ),男 ,湖 南 溆 浦 人 ,副 教 授 ,高 级 工 程 师 ,博 士 ,研 究 方 向 为 通 信 与 信 息 系 统 及 嵌 入 式 系 统 研 究 开 发
开发案例
单片机系统 FIR 数字滤波器的设计与仿真 *
吴 永 1, 2 , 余爱民 3
(1. 广东工程职业技术学院, 广州 510520; 2. 华南理工大学电子与信息学院, 广州 510640; 3. 广东科学技术职业学院, 广州 510640)
摘 要: 结合 AVR 单 片 机 及 软 件 仿 真 的 特 点 , 提 出 一 种 综 合 使 用 MatLab 和 Proteus 软 件 在 AVR ATMEGA16 单片机上实现 FIR 数字低通滤波器的设计方法。 先用 MatLab 软件 设计出满足性能要求的滤波器参数,然后在单片机中进行滤波算法的 C 语言编程,再 在 Proteus 软件中进行详尽的软硬件模拟实时仿真实验, 期间重点讨论 FIR 数字滤波 算法的优化仿真。 实际测试表明,各项性能良好,对实际系统设计具有较好参考意义。
因而 FIR 滤波器总是稳定的。
同时, 具有线性相位的因果 FIR 数字滤波器的
冲激响应具有偶对称的特性,即:
h(k)=h(N-1-k)
(3)
冲 激 响 应 序 列 h(n)的 偶 对 称 特 性 可 用 图 1 表 示如下。
FIR 数字滤波器的设计问题, 通常可归结为根 据对滤波器频率特性和技术指标的要求, 选择滤波 器的结构和计算滤波器的参数 h(k)。 若已知 h(k)以 及 初 始 条 件 x(n), 即 可 通 过 求 解 式 (1)所 示 的 差 分 方 程由输入信号求得输出信号 y(n)。
图 2 FIR 线性相位低通滤波器增益响应(N=30)
由上图可见, 其通带波纹和最小阻带衰减分别 为 0.5dB 和-40.2dB,并计算出 其阶数为 30,满足设 计要求。
将在 MatLab 中计算 出的 FIR 数字滤 波 器 参 数 h(k),经 数 据 截 短 后 存 储 在 单 片 机 系 统 中 ,供 单 片 机 中的滤波程序直接查询使用。
滤波器参数的对称性,可以将其参数对折后使用,因 此上述算法可修改为将数据移位寄存器的对称项相 加后再和滤波参数寄存器的前一半参数对应项相乘 累加。 这样,每次滤波的卷积部分的运算量可以比常 规方法节省一半。
优化后的具体实现算法如下: ①滤波器数据移位寄存器清零; ②数据移位寄存器顺序移位后将待滤波数据输 入移位寄存器; ③数据移位寄存器对称位置各项相加后和滤波 器参数寄存器的前一半参数对应项相乘并累加; ④重 复②、③ 直 到 所 有 数 据 完 成 滤 波 。 假定输入数据序列为 n 个数据, 滤波器系数也 为 n 个,上述两种算法的对比可用表 1 所示。 由上表可见,采用优化(对折)算法后,运算量大 幅降低,提高了单片机的滤波处理速度。 在滤波程序设计过程中, 如何更大限度地降低 系统开销, 提高程序运行效率, 是需要重点考虑的。 AVR 单片机是一种 8 位精简指令集(RISC)单片机,其 中 MEGA AVR 系列内部都带有一个硬件乘法器 , [7~9] 计算一次 8 位×8 位的定点乘法只需 2 个时钟周期, 因此采用 8 位定点采样数据乘以 8 位定点滤波参数 的定点乘法方式完成滤波算法是最高效的。 但 A/D 转换后得到的数据,以及通过 MatLab 计算得到的滤 波器参数一般都是浮点小数形式, 因此需要对参与 运算的数据进行一些技术处理, 例如可以将 A/D 转 换得到的数据,以及滤波器参数都扩大相应倍数,保 证其为整数,然后参与滤波运算,将计算结果再同比 缩小相应倍数,从而得到正确结果。 滤波子程序的流程图如图 4 所示。 由图 4 可见, 滤波子程序实现卷积乘以及求和 处理,并存储卷积和。 如前所述,考虑到所用单片机 的数据处理特点, 程序对参与卷积运算的 A/D 转换 数据及滤波器参数先进行了放大处理, 在本设计中 放大了 10000 倍, 使其全部以整数形式参与卷积运 算,在得出结果后又将结果缩小相应倍数,以提高卷 积运算效率。
1 FIR 滤波原理简述
数字滤波过程可认为是求解差分方程, 或进行
线性卷积运算的过程。 有限冲激响应(FIR)数字滤波
器 可 用 差 分 方 程 描 述 [2]如 下 :
N-1
y(n)=Σh(k)x(n-k)
(1)
k=0
上 式 中 ,y(n)表 示 数 字 滤 波 器 的 输 出 信 号 ,x (n) 表 示 输 入 信 号 ,h(k)是 滤 波 器 的 单 位 冲 激 响 应 , 也 即 数字滤波器 的参数,N 确定 了滤波器参 数的个数 或
C1 -15V
DAC0808
相关文档
最新文档