晴溪庄园?江小妮子
2024-11-15 16:44:54
最佳回答
你得到系数a,b后,你信号也知道吧,假设是x,然后你就用y=filter(b,a,x); 我当时学时也很困惑怎么用,后来我做的尝试,我给你一个例子看看吧,是我学习时自己写的 设计一个高通滤波器,并检验它的性能 采样率为10khz 阻带边缘为1.5khz,衰减为40bb 通带边缘为2khz,波纹为3db >>fs=1e4; >>fs=1.5e3; >>fp=2e3; >>as=40; >>rp=3; >>wp=2*fp/fs; >>ws=2*fs/fs; >>[n,wn]=cheb2ord(wp,ws,rp,as); >>[b,a]=cheby2(n,as,wn,'high'); >>[db,mag,pha,grd,w]=freqz_m(b,a); >> subplot(2,2,1);plot(w/pi,mag); >> ax**([0,1,0,1]); >> setx([0 0.3 0.4 1]); >>sety([0.01 0.7279 1]) >> title('magnitude response'); >> subplot(2,2,2);plot(w/pi,db); >> ax**([0 1 -70 0]) >> setx([0 0.3 0.4 1]) >> sety([-40 -2.7589]) >> title('magnitude response in db'); 然后给你一个信号x=cos(0.2*pi*n); >>n=0:200; >>x=cos(0.6*pi*n); >>y=filter(b,a,x); >>subplot(2,2,3);plot(n,x); >>subplot(2,2,4);plot(n,y); >>x1=fft(x,201); >>x11=abs(x1); >>subplot(2,2,1);stem(n,x11); >>y1=fft(y,201); >>y11=abs(y1); >>subplot(2,2,2);stem(n,y11); >>setx([0 60 140 201]) >>title('fft of y'); >>subplot(2,2,1);stem(n,x11); >>setx([0 60 140 201]) >>title('fft of x'); >>g=x11-y11; >>subplot(2,2,3);stem(n,g); 你运行一下,就可以看到结果,刚好把此信号滤掉给你一个设计思路,你改变截止频率和阻带衰减就可以了>> %假设截止频率为w,我随便定义一下>> %比如wp=0.3*pi;ws=0.4*pi>> wp=0.3*pi;ws=0.4*pi;>> %阻带衰减为50分贝>> %通带波纹为0.2分贝>> as=50;rp=0.2;>> %那么可以用两个函数得到系数a,b>> [n,wn]=buttord(wp/pi,ws/pi,rp,as);>> [b,a]=butter(n,wn);>> %该滤波器就是从截止频率到无穷远都不响应 20210311