- N +

如何用MATLAB做一个低通滤波器?

  滤波器有很多种设计方最简单的,就是用已有的buttord计最符合条件的巴思滤波器的阶数n和截止频率,再用butter计算n阶巴特沃斯数字滤波器系统函数分子、分母多项式的系数向量b、a。用freqz函数画出滤波器的幅频、相频图。用filter滤波。

  例:

  规定:wp为通带截止频率;ws为阻带截止频率;ap为通带最大衰减(dB);as为阻带最大衰减(dB);wc为3dB截止频率;fn为采样率;

  滤波器设计条件:通带最大衰减ap=1dB,阻带最小衰减as=15dB,通带截止频率为wp=2000Hz,阻带截止频率为ws=5000Hz

  代码:

  fn=16000;

  ap=0.1;

  as=60;

  wp=2000;

  ws=5000; %输入滤波器条件

  wpp=wp/(fn/2);wss=ws/(fn/2); %归一化;

  [nwn]=buttord(wpp,wss,ap,as); %计算阶数截止频率

  [ba]=butter(n,wn); %计算N阶巴特沃斯数字滤波器系统函数分子、分母多项式的系数向量b、a。

  freqz(b,a,512,fn);%做出H(z)的幅频、相频图

  t=(1:1000)/16000;

  x=cos(4000*pi*t)+cos(6000*pi*t); %输入信号

  figure(2);

  subplot(2,1,1);

  plot(t,x); %合成信号时域波形

  axis([0 0.01 -22])

  X=fft(x); %进行傅里叶变换

  subplot(2,1,2);

  plot(abs(X));

  y=filter(b,a,x); %滤波b、a滤波器系数,x滤波前序列

  figure(3);

  subplot(2,1,1); %

  plot(t,y); %分离输出信号的时域波形

  axis([0 0.01 -1.51.5]);

  subplot(2,1,2);

  plot(t,cos(4000*pi*t));%cos(4000*pi*t)理论时域波形

  axis([0 0.01 -1.51.5])

  采Kaiser窗设2113计

  >> wp=2000*2*pi/10000;ws=2500*2*pi/10000;As=50;这里的衰减是5261随便设计的,你可4102以改

  >> tr_width=ws-wp;

  >> M=ceil((As-7.95)/(14.36*tr_width/(2*pi))+1)+1

  >> n=[0:1:M-1];;

  >> beta=0.1102*(As-8.7)

  >> wc=(ws+wp)/2;

  >> hd=ideal_lp(wc,M);

  >> w_kai=(kaiser(M,beta))';

  >> h=hd.*w_kai;

  对了,要一1653个M文件,

  function hd=ideal_lp(wc,M);

  %Ideal Lowpass filter computation

  %------------------------------------

  %[hd]=ideal_lp(wc,M)

  % hd=ideal impulse response between 0 to M-1

  % wc=cutoff frequency in radians

  % M=length of the ideal filter

  %

  alpha=(M-1)/2;

  n=[0:1:(M-1)];

  m=n-alpha+eps;

  hd=sin(wc*m)https://zhidao.baidu.com/question/(pi*m);

  命令行下面输入:fdatool

  产生的界面里,把你的参数放进去即可

返回列表
上一篇:上一篇:刘福洋退赛原因 刘福洋为什么退赛
下一篇:下一篇:没有了