算法和低通滤波器去除噪声作用的比较
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FFT算法和低通滤波器去除噪声作用的比较
我们可以把FFT简单地看作一个变换器,输入N+1个数,输出N+1个数,但他们对应的意义不同,如果把输入当作时域,则输出为频域,表征了其对应域的变化快慢。
假设输入信号本身的频率为fc(或者说频带宽为fc),被频率为fs的冲击串采样(由采样定理,fs >= 2*fc),则变换前的N+1个数字对应的x轴为
{t0,t1,…tN}={0,Ts,2*Ts,....,N*Ts} (其中Ts为1/fs,为采样周期)则变换后的N+1个数对应的x轴变为频率,范围为0~fs,以fs/N为间隔,既为频率点{0,fs/N,2*fs/N,……,fs},在matlab中如果用fftshift(fft(data)),则变换后对应x轴为-fs/2~fs/2,如果满足采样定理的话,信号频带-fc~fc就包含在转换后的频谱里面了,就不会有失真。
考虑信号:y(t)=exp[-)
(cos2t](sin2t+2cos4t+0.4sintsin50t)在[0,2pi]的情况,首先利用FFT算法对其进行去噪声处理,即使高频部分信号为零,利用MATLAB进行仿真,其程序及仿真结果如下:
t=linspace(0,2*pi,2^8); %discretizes [0,2pi] into 256 nodes
y=exp(-(cos(t).^2)).*(sin(2*t)+2*cos(4*t)+0.4*sin(t).*sin(50*t));
fy=fft(y); %compute fft of y filterfy=[fy(1:6) zeros(1,2^8-12) fy(2^8-5:2^8)]; %sets fft
filtery=ifft(filterfy); %comput es inverse fft of the filtered fft
hold on
plot(t,y,'r*') %ge nerates the graph of the original signal
plot(t,filtery) %genera tes the plot of the compressed signal
title('filtered signal with FFT * un signal')
hold off
原信号波形:
FFT仿真结果与原信号的比较:
下面设计一个底通滤波器实现消噪的功能:
t=linspace(0,2*pi,2^8); %时间向量
ts=2*pi/(2^8); %抽样间隔
fs=1/ts;
df=1/2*pi; %频率分辨率
y=exp(-(cos(t).^2)).*(sin(2*t)+2*cos(4*t)+0.4*sin(t).*sin(50*t));
[Y,y,df1]=fftseq(y,ts,df); %对信号进行傅立叶变换
Y=Y/fs;
%设计一个低通滤波器
f_cutoff=4/2*pi; %低通滤波器截止频率
n_cutoff=floor(f_cutoff/df1);
f=[0:df1:df1*(length(y)-1)]-fs/2;
H=zeros(size(f));
H(1:n_cutoff)=ones(1,n_cutoff);
H(length(f)-n_cutoff+1:length(f))=ones(1,n_cutoff);
DEM=H.*Y; %经过低通滤波器后的信号频谱
signal=real(ifft(DEM))*fs; %经过傅立叶反变换后的信号
hold on
plot(t,y,'g*')
plot(t,signal(1:length(t)))
title('filtered signal with LPF unfiltered signal')
hold off
调用的fftseq子函数:
function [M,m,df]=fftseq(m,ts,df)
% [M,m,df]=fftseq(m,ts,df)
% [M,m,df]=fftseq(m,ts)
%FFTSEQ Generates M, the FFT of the sequence m.
% The sequence is zero padded to meet the required frequency resolution df. % ts is the sampling interval. The output df is the final frequency resolution. % Output m is the zero padded version of input m. M is the FFT.
fs=1/ts;
if nargin == 2
n1=0;
else
n1=fs/df;
end
n2=length(m);
n=2^(max(nextpow2(n1),nextpow2(n2)));
M=fft(m,n);
m=[m,zeros(1,n-n2)];
df=fs/n;
经过低通滤波器后的信号波形:
LPF仿真结果与原信号的比较:
由于有用信号的频率往往比较低,而噪声信号往往是高频信号,所以我们可以使高频部分为零,来达到去除噪声的目的。通过以上的比较,我们可以发现,利用FFT算法和低通滤波器都可以实现对信号的去噪。但在设计低通滤波器时要考虑奈奎斯特采样频率的问题。为
2,M为正整数,这就有一定的局限了能不断的进行分解,FFT算法要求DFT的运算点数为N=M
性,而低通滤波器的方法却没有这种限制.