mulan 发表于 2006-12-15 10:21

滤波的结果不好

我的信号是现场信号,用matlab设计一个带通滤波器进行滤波,通带的范围是可选的,我不太清楚滤波器的性能指标,只要效果好,可以牺牲计算量等,现在的问题是滤波得到的结果总是信号开头的一段效果不好,如图所示。我试过用不同的函数如fir1,butter,cheby1等,也试过调整参数,但这个问题只是好一点,都不能彻底解决,求助高手!
程序如下:
Tdata = load('D:\work\matlab gui\s.txt');               
fs = 3082;
N = 1024;
f = fs*(1:N/2)/N;
t = 1000*(0:1/fs:(N-1)/fs);
= ellip(2,0.1,50,*2/fs);
SFdata = filter(b,a,Tdata);

subplot(221)
plot(t,Tdata)
grid on;
title('滤波前信号时域');
subplot(2,2,2);
plot(t,SFdata);
grid on;
title('滤波后信号时域');
subplot(2,2,3);
y = abs(fft(Tdata));
plot(f,y(1:N/2));
grid on;
title('滤波前信号频谱');
subplot(2,2,4);
sy = abs(fft(SFdata));
plot(f,sy(1:N/2));
grid on;
title('滤波后信号频谱');

stephenhope 发表于 2006-12-15 14:31

试试用fdatool看看吧

mulan 发表于 2006-12-15 20:06

我要在gui里实现滤波啊
有没有其他的指点?

stephenhope 发表于 2006-12-15 20:56

你在GUI里面把滤波的效果表现出来不是就是要提高滤波的效果嘛?

那就调整系数啊,让你用FDATOOL重新设计一个阶数高一些的滤波器啊。

songzy41 发表于 2006-12-16 06:49

不知什么原因打不开楼主提供的图,也可能版本不同。
从楼主设计的滤波器来看,信号采样频率是3082,而通带的频率是90-100,带宽只有10Hz,相对采样频率是一个窄带。因此在滤波输出的开头部分效果不好是正常现象,因为任何一个滤波过程都有一个从暂态趋于稳态的过程,这个过程的时间长短和滤波器的带宽有关,与滤波器的阶数有关。

vib 发表于 2006-12-16 20:21

你用模拟滤波器就直接开始滤波了?要先把模拟滤波器转化为数字滤波器:
= ellip(2,0.1,50,*2/fs);

= IMPINVAR(B,A,fs);

SFdata = filter(BZ,AZ,Tdata);
页: [1]
查看完整版本: 滤波的结果不好