学习笔记-滤波器的系数

1 篇文章 0 订阅
1 篇文章 0 订阅

滤波器系数的获得有三种方式,一是根据公式计算得出;二是使用MATLAB的FDAtool设计得到;三是使用MATLAB的函数得出。

(一)公式推算

无限冲激响应数字IIR滤波器的设计步骤:

(1)将数字滤波器的技术指标转换为模拟低通滤波器的技术指标;

(2)设计模拟低通滤波器G(s)

(3)将G(s)转换成H(z)

例如,设计低通滤波器,要求采样频率Fs=500Hz,fp=100Hz,在通带内最大衰减ap=3dB,在fs=120Hz最小衰减as=20dB。

第一步,①通过w= 2*pi*f/Fs将上述fpfs转换成wpws;②再通过omega= tan(w/2)转换成omegapomegas;③归一化lambdap =omegap/omegaplambdasomegas/omegap

第二步,得出所求滤波器的阶数N = lg(sqrt((10^(as/10)-1)/(10^(ap/10)-1)))/lg(lambdas),向上取整;

第三步,得到模拟低通滤波器的转移函数G(s):①首先归一化后的转移函数G(P)Pk=exp(j*(2K+N-1)*pi/(2N)),Gk(P)=1/(P^2-2P*cos((2K+N-1)*pi/(2N)));若N是偶数,G(P)=G1(P)*G2(P)*……*G(N/2)(P),是N/2个Gk(P)连乘;若N是奇数G(P)=(1/(P+1))*G1(P)*G2(P)*……*G((N-1)/2)(P),(N-1)/2Gk(P)连乘与一个一阶系统相级联;②去归一化,利用P=s/omegap,将G(P)转换成G(s)

第四步,使用双线性z变换法得到数字滤波器H(z):利用s=(z-1)/(z+1),将G(s)转换成H(z)

备注      如果是带通或者是高通等数字滤波器,在第一步的③归一化时,需要omegaBW = omega3-omega1,eta = omega/omegaBW;lambdap = 1;lambdas = abs(min(abs( etasl-eta1*eta3/etasl ),abs(etash-eta1*eta3/etash)));还有在第三步的②,去归一化,利用P=(s^2+omega1*omega3)/(s(omega3-omega1)),将G(P)转换成H(s)

(二)FDAtool设计

1、MATLAB命令输入fdatool,打开设计工具;


2、设计数字IIR低通滤波器,设定阶数specify order为20阶,采样平率Fs为500Hz,Fc为100Hz。


3、点击design filter,


显示的是幅频响应magnitude response,可以变化一下显示界面,选择滤波器系数filter coefficients,


此时显示的系数是二阶级联情况下的系数,在Edit中选择转换convert to single section,


Z系统下的系数,numerator是分子系数,Denominator是分母系数,依次为z的0次方、z的-1次方、z的-2次方……。

4、保存系数。在targets下选择生成C的头文件generate C header...。

按照个人习惯命名变量,以单精度保存数据,generate。


5、按照H(Z)的系数与data计算得出滤波后的数据。


(三)MATLAB函数

fp=100;fs=120;Fs=500;
rp=3;rs=20;

wp=fp*2*pi/Fs;ws=fs*2*pi/Fs;
% Firstly to finish frequency prewarping;
[n,wn]=buttord(wp/pi,ws/pi,rp,rs);
n=20;
[bz,az]=butter(n,wp/pi);
%
[bz1,az1]=butter(n,wn);
%
[h,w]=freqz(bz,az,128,Fs);
[h1,w1]=freqz(bz1,az1,128,Fs);
plot(w,abs(h),w1,abs(h1),'g.');grid on;

上述数字低通滤波器,其中bz,az就是系数,n为阶数。

  • 32
    点赞
  • 198
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
《Python学习笔记》是由皮大庆编写的一本关于Python语言学习的教材。在这本书中,作者详细介绍了Python语言的基础知识、语法规则以及常用的编程技巧。 首先,作者简要介绍了Python语言的特点和优势。他提到,Python是一种易于学习和使用的编程语言,受到了广大程序员的喜爱。Python具有简洁、清晰的语法结构,使得代码可读性极高,同时也提供了丰富的库和模块,能够快速实现各种功能。 接着,作者详细讲解了Python的基本语法。他从变量、数据类型、运算符等基础知识开始,逐步介绍了条件语句、循环控制、函数、模块等高级概念。同时,作者通过大量的示例代码和实践案例,帮助读者加深对Python编程的理解和应用。 在书中,作者还特别强调了编写规范和良好的编程习惯。他从命名规范、注释风格、代码缩进等方面指导读者如何写出清晰、可读性强的Python代码。作者认为,良好的编程习惯对于提高代码质量和提高工作效率非常重要。 此外,作者还介绍了Python的常用库和模块。他提到了一些常用的库,如Numpy、Pandas、Matplotlib等。这些库在数据处理、科学计算、可视化等领域有广泛的应用,帮助读者更好地解决实际问题。 总的来说,《Python学习笔记》是一本非常实用和全面的Python学习教材。通过学习这本书,读者可以系统地学习和掌握Python编程的基础知识和高级应用技巧,为以后的编程学习和工作打下坚实的基础。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值