henryqian 发表于 2007-2-8 20:39

(已解决)请教一个滤波器使用的问题,多谢各位了~

Fs=1000Hz%采样频率
load('x11.txt');%一组采集来的数据
x11_fft=fft(x11);
N=length(x11);
t=(1:N)/Fs;
df=Fs/N;
n2=1:N/2;
ff=(n2-1)*df;
subplot(2,1,1);
plot(t,x11);
subplot(2,1,2);
plot(ff,abs(x11_fft(n2)));%画图
Ws=30;%截止为30Hz
Wp=25;%通过为25Hz
Rp=0.1;
Rs=60;
=cheb1ord(2*Wp/Fs,2*Ws/Fs,Rp,Rs);%设计切氏低通滤波器
=cheby1(N,0.5,Wn);
y11=filter(b,a,x11);
figure(2);
plot(t,y11);
这样使用滤波器函数正确么,为什么我得出的y11的幅度异乎寻常的大,达到10的304的数量级
还有这里使用的是模拟滤波器,是不是需要转化为数字滤波器,才能y11=filter(b,a,x11)啊?
谢谢指教!

[ 本帖最后由 henryqian 于 2007-2-14 17:06 编辑 ]

happy 发表于 2007-2-9 06:29

滤波频率选择有问题

henryqian 发表于 2007-2-9 19:31

那究竟什么问题啊?能指明么,谢谢

songzy41 发表于 2007-2-10 15:28

看了楼主的程序,建议在谱分析之前先消除直流分量(这和滤波器的设计无关的)。从楼主获得的谱图中看,主要在0频率处有一条很大的谱线,这便是直流分量造成的,把其它的频率成分都掩盖了。而消除直流分量后,便能显现出其它的频率成分。
楼主在滤波器设计中,主要对滤波器的要求太高,致使滤波器的阶数N=16。在用MATLAB设计滤波器中,如果滤波器的阶数太高,按我的经验,对滤波器系数的精度要求很高。但在MATLAB中是32位运算,这时便不能满足它精度的要求,使滤波器的运算误差加大,最终把滤波器变成一个振荡器,或滤波器不稳定。楼主的情况可能就是这样的原因造成的。要解决的方法,是降低滤波器的要求,也降低了滤波器的阶数,这样便能得到合理的滤波器输出了。把程序稍作修改如下:
Fs=1000;%采样频率
load('x11.txt');%一组采集来的数据
N=length(x11);
xmean=sum(x11)/N;
x11=x11-xmean;
x11_fft=fft(x11);
t=(1:N)/Fs;
df=Fs/N;
n2=1:N/2;
ff=(n2-1)*df;
subplot(2,1,1);
plot(t,x11); grid;
subplot(2,1,2);
plot(ff,abs(x11_fft(n2)));%画图
grid;
Ws=30;%截止为30Hz
Wp=25;%通过为25Hz
Rp=1;
Rs=30;
=cheb1ord(2*Wp/Fs,2*Ws/Fs,Rp,Rs); %设计切氏低通滤波器
=cheby1(N,Rp,Wn);
y11=filter(b,a,x11);
figure(2);
plot(t,y11); grid;

henryqian 发表于 2007-2-14 17:06

多谢指导,问题已解决,谢谢
页: [1]
查看完整版本: (已解决)请教一个滤波器使用的问题,多谢各位了~