视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
fft算法程序集分析
2025-09-29 22:31:21 责编:小OO
文档
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[-](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);                                                  %computes inverse fft of the filtered fft

hold on

plot(t,y,'r*')                                                               %generates the graph of the original signal

plot(t,filtery)                                                          %generates the plot of the compressed signal

title('filtered signal with FFT          * unfilered 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算法和低通滤波器都可以实现对信号的去噪。但在设计低通滤波器时要考虑奈奎斯特采样频率的问题。为了能不断的进行分解,FFT算法要求DFT的运算点数为N=,M为正整数,这就有一定的局限性,而低通滤波器的方法却没有这种.

                                           下载本文

显示全文
专题