滤波后信号相位和幅值的调整?
最近用滤波器处理了信号之后发现相位和幅值
改变很大
如果用FILTFILT零相位滤波的话
相位的问题可以解决
但是幅值问题
无法解决
有高手帮个忙
谢谢
[ 本帖最后由 zhangnan3509 于 2007-7-4 14:59 编辑 ] 这应该和滤波器的设计有关。希望楼主能提供更详细的信息,例如用的是什么滤波器,最好能给出滤波器的参数,以及楼主使用的信号数据。 %extract the periodic signal
clear
clc
%load the arbitrary signal data11 and the periodic signal data11sin.
wsize1=256;
wsize2=512;
load signal1.txt
%signal=awgn(signal1,10).';
signal=zeros(75000,2);
signal=signal1(5000:80000,1:2);
%load signalsin.txt
%xx=signalsin(:,2);
H1=zeros(wsize2,1);
H2=zeros(wsize2,1);
HH=zeros(wsize2,1);
size=1249;
for ii=1:size
xx1=signal(ii*20:ii*20+wsize1-1,2);
xx2=signal(10000+ii*20:ii*20+10000+wsize1-1,2);
h1=parzenwin(wsize1);
x1=xx1.*h1;
x2=xx2.*h1;
xkd=fft(x1,wsize2);
xk=fft(x2,wsize2);
for jj=1:wsize2
H1(jj)=xkd(jj)*conj(xk(jj))+H1(jj);
H2(jj)=xkd(jj)*conj(xkd(jj))+H2(jj);
end
end
for ii=1:wsize2
HH(ii)=H1(ii)/H2(ii);
end
%figure(1);
ifftHH=ifft(HH);
bn=ifftHH;
%subplot(211);
%plot(abs(HH));
%subplot(212);
%plot(abs(bn));
h2=boxcar(wsize2-1);
bm=bn(1:wsize2-1).*h2;
b=real(bm.');
%figure(2);
%subplot(211);
%plot(abs(b));
a=1;
X=signal(:,2);
y=filtfilt(b,a,X);
figure(3);
subplot(211),
plot(X(24000:28000)),xlabel('sampling'),ylabel('displacement'),
title('original signal');
%axis([ 0 80000 -0.001 0.001]),
subplot(212),
plot(real(y(24000:28000))),xlabel('sampling'),ylabel('displacement'),
title('extracted signal');
呵呵 这是俺的程序
俺的信号是一正弦加冲击振动响应信号
对信号不是很懂
请高手指点
谢谢 谢谢 相当的谢谢 从以上程序中可以看到,楼主是经如下的计算求出滤波器的系数,H1和H2也是从信号中计算出的:
for ii=1:Mp2
HH(ii)=H1(ii)/H2(ii);
end
ifftHH=ifft(HH);
bn=ifftHH;
h2=boxcar(wsize2-1);
bm=bn(1:wsize2-1).*h2;
b=real(bm.');
所以滤波器的设计和一般书中介绍的IIR和FIR滤波器不一样,在一般书中介绍的IIR和FIR滤波器通带内的幅值永远是1,这样用filtfilt函数时便不会产生如楼主所讲的幅值问题。但楼主设计的是一种任意响应的FIR滤波器,滤波器的幅值和相位响应完全由输入的数据所决定。但filtfilt函数和filter函数是不同的,filter是把数据通过滤波器一次,而filtfilt函数是把数据通过滤波器二次,一次是正序通过,一次是倒序通过。这样通过滤波器的总效应相当于通过该滤波器二次,或通过一个原滤波器响应平方的滤波器。例如下图中笫1张是一个任意响应的滤波器响应曲线(dB值),笫2张图便是用filtfilt函数通过时的滤波器响应曲线。可以看到,笫2张是笫1张数值乘以2(不论是正值还是负值)。要解决用filtfilt函数产生的这个问题,我建议可以在HH(ii)=H1(ii)/H2(ii)式中,写成HH(ii)=sqrt(H1(ii)/H2(ii))试试。 楼上大哥
俺得振幅是降低了
我把你的开方改成平方
还是不行
方次加大
信号就变形了
我得这个是任意响应FIR滤波器
大哥再给看看
:handshake:handshake:handshake 你把signal1.txt数据也贴上来,我试试看. 楼上大哥
我看了您给我的程序
是不是振幅只能调整到这个程度了?
我发现调整了滤波器的响应
滤波效果也发生了变化
而用FILTER函数设计滤波器时
会发生相位的飘移
所以想用FILTFILT设计
目前振幅还只是 原来的1/5
我想问一下
这个在信号处理中时正常的吗
还有其他调整振幅的方法吗 另外借此贴问一下
有人研究盲分离吗
谱峭度方法
有人熟悉不
谢谢 原帖由 alwaysfly 于 2006-11-27 11:11 发表
楼上大哥
我看了您给我的程序
是不是振幅只能调整到这个程度了?
我发现调整了滤波器的响应
滤波效果也发生了变化
而用FILTER函数设计滤波器时
会发生相位的飘移
所以想用FILTFILT设计
目前振幅还只是 原 ...
我在4楼中提供的方法,只能保证filtfilt函数的输出和filter函数的输出一样。而楼主的滤波器设计,也正如我在4楼中指出的滤波器的系数是由信号计算出来的。因此为什么楼主设计出的滤波器输出,只有原幅值的1/5,这取决于楼主使用的方法或选用的数据,而与滤波过程无关,所以请楼主从这两方面去考虑。 哦 多谢楼上大哥
我再看看
页:
[1]