|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
本帖最后由 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=[0 1 1 0];
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;
|
|