求助fft变换和滤波器阶数的问题
本帖最后由 wdhd 于 2016-9-13 13:39 编辑思路:对于硬件采集到的输出信号,有用信号可能被干扰信号卷积,即x(n)=s(n)*e(n);
x(n)为输出信号,s(n)为有用信号,e(n)为干扰信号;
这样线性滤波就不能将有用信号滤出;
为此,可以将x(n)做fft,时域卷积等于频域乘,这样
X(w)=S(w)E(w);
对上式去对数,则
X1(w)=log(X(w))=log(S(w))+log(E(w))=S1(w)+E1(w);
这样就转换成线性相加的形式,对上式做逆傅立叶变换,
x1(n)=s1(n)+e1(n);
在滤波,得到的信号记为y(n)=s1(n);
在做fft后,
Y(w)=S1(w);
做指数变换,
S(w)=exp(S1(w));
在做傅立叶逆变换,
S(n)=ifft(S(w))
就可以把有用信号分离出来。
我现在的问题是:
(1)做对数变换的逆傅立叶变换后波形图在0左右,还有负值,这是为什么呢?
(2)对于滤波后的信号,幅值特别大,和能和滤波器的阶数有关系,那么,滤波器的阶数和幅值什么关系呢?
(3)以下是我所编写的程序,请各位大侠指教
N=5120;%傅立叶变换的点数
Fs=200;%采样频率
%lm_seg为输入信号;;
lm_seg_mean=mean(lm_seg);
lm_seg=lm_seg-lm_seg_mean;%去直流分量
lm_fft=fft(lm_seg,N);
F=(1:N/8)*fs/N;
subplot(221);
plot(F,abs(lm_fft(1:N/8)));
title('傅立叶变换');
grid on;
ln_fft=log(abs(lm_fft));
subplot(222);
plot(ln_fft);
title('傅立叶变换的对数');
grid on;
ln_ifft=real(ifft(ln_fft));
subplot(235);
plot(ln_ifft);
title('对数的逆变换');
grid on;
f=[0 0.0025
0.015 1];
a=;
b=firls(300,f,a);%设计了一个300阶的fir带通滤波器,通带为0.5HZ到3HZ
filt_lm=filtfilt(b,1,ln_ifft);%对对数的逆变换做滤波
filt_lm_fft=fft(filt_lm);%求滤波信号的fft
original_sig=exp(filt_lm_fft);对fft做指数变换
filt_lm_ifft=real(ifft(original_sig));%在做ifft
subplot(223);
plot(filt_lm_ifft);
title('滤波后的有用信号');
grid on;
怎么没人理呢?是不是我的问题没说清晰?
我总结一下,在以下几点有迷惑
(1)倒谱的横坐标,纵坐标的意思,为什么我的纵坐标幅度那么小呢?而且在开始有个大的震荡
(2)倒谱是怎么看出来信号含有周期成分的呢?
(3)滤波器的阶数和滤波后信号的幅度有什么关系呢?
希望大侠们能帮我解答一下 1,倒谱的横坐标称为率频(quefrency),是时间的量纲。
在开始有个大的震荡,这是因为在频谱上取了abs,都是正值,相当于有较大的“直流分量”。
2,用倒谱进行分离的前提是,x(n)=s(n)*e(n)中对应的S1(w)和E1(w)在率频中占有不同的区域,就如同两个信号要滤波区分时,该两信号是占用不同的频率范围一样。
如果方便的话提供一下数据。 恩,感谢指点,我的程序基本就是上面的了,我所做的输入是lm_seg,由硬件系统直接输出的,具体过程是这样的:外界对对系统有一个振动,频率是0.1——2hz,但是在输出时,我们滤波时加上了振动系统的固有频率10——11hz,这样我们的滤波范围是0.7——14hz
着就是我所得到的lm_seg
我现在所做的是把lm_seg中的我需要的频率0.1——2hz分离出来,不知道用倒谱能不能分呢? 可参看以下帖子,或许能有帮助。
http://forum.vibunion.com/forum/thread-58574-1-1.html
页:
[1]