傅里叶变换matlab实验总结
(完整)快速傅里叶变换fft的Matlab实现 实验报告
尊敬的读者朋友们:
一、实验目的
1在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解;
2熟悉并掌握按时间抽取FFT算法的程序;
3了解应用FFT进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、栅栏效应等,以便在实际中正确应用FFT。
二、实验内容
1仔细分析教材第六章‘时间抽取法FFT'的算法结构,编制出相应的用FFT进行信号分析的C语言(或MATLAB语言)程序;
用MATLAB语言编写的FFT源程序如下:
%%
输入数据f、N、T及是否补零
clc;
clear;
f=input('输入信号频率f:');
N=input('输入采样点数N:');
T=input(’输入采样间隔T:');
C=input('信号是否补零(补零输入1,不补零输入0):’);
  %补零则输入1,不补则输入0
if(C==0)
t=0:T:(N—1)*T;
=in(2*pift);
b=0;
ele
b=input(’输入补零的个数:');
while(log2(N+b),=fi(log2(N+b)))
b=input(’输入错误,请重新输入补零的个数:’);
end
t=0:T:(N+b—1)*T;
=in(2*pi*f*t)。(t<=(N—1)*T);
end
%%
fft算法的实现
A=bitrevorder();
% 将序列按二进制倒序
N=N+b;
M=log2(N);
% M为蝶形算法的层数
W=ep(—j2pi、N);
for L=1:1:M
% 第L层蝶形算法
B=2^L、2;
%B为每层蝶形算法进行加减运算的两个数的间隔matlab求傅里叶变换
K=N、(2^L);
%K为每层蝶形算法中独立模块的个数
for k=0:1:K-1
for J=0:1:B-1
p=J2^(M—L);
%p是W的指数
q=A(k2^L+J+1);
%用q来代替运算前面那个数
A(k2^L+J+1)=q+W^p*A(k2^L+J+B+1);
A(k*2^L+J+B+1)=q—W^p*A(k*2^L+J+B+1);
end
end
end
%%
画模特性的频谱图
z=ab(A);
% 取模
z=z。ma(z);
%归一化
hold on
ubplot(2,1,1);
tem(0:1:N-1,,’DiplayName',’z’);
title(’时域信号');
ubplot(2,1,2);
tem(0:1:N-1,z,'DiplayName’,'z’);
title('频谱图’);
figure(gcf)
%画图
2用FFT程序计算有限长度正弦信号
分别在以下情况下所得的DFT结果并进行分析和讨论:
a)信号频率f=50Hz,采样点数N=32,采样间隔T=0。000625
b)信号频率f=50Hz,采样点数N=32,采样间隔T=0。005
c)信号频率f=50Hz,采样点数N=32,采样间隔T=0。0046875
d)信号频率f=50Hz,采样点数N=32,采样间隔T=0。004
e)信号频率f=50Hz,采样点数N=64,采样间隔T=0。000625
f)信号频率f=250Hz,采样点数N=32,采样间隔T=0。005
g)将c)信号后补32个0,做64点FFT
三、实验分析
DFT是对有限序列做傅里叶变换后在频域上进行采样,而相对应的时域以频谱上的采样频率的倒数进行周期拓展。而在此题中,题中给出时域上的连续信号,对该连续信号进行加窗采样后得到有限序列,要求对该有限序列求DFT。
所以整个步骤为:对时域加窗,则相对应的频域与窗函数的傅里叶变换即inc函数相卷积;再对时域采样,则对应的频域以时域采样频率的倒数进行周期性拓展;再将时域以窗长为周期进行周期性拓展,对应的频域以该周期的倒数进行采样,即得所求DFT。
a)信号频率f=50Hz,采样点数N=32,采样间隔T=0。000625。
Sin函数信号对应的频谱图为在窗长,对应的inc函数主瓣宽,其余波节与波节间距,两信号在频域上相卷,即将inc函数平移;在时域以进行采样,即频域以进行周期性拓展。在频域上采32个点,则对应每个点之间的间距为,(对应时域以0。02进行周期性拓展,不予考虑)。此时我们可以发现除了在f=50Hz(对应为第1个点)上采到的点幅值为inc函数的最大值外,其他频率上采到的点刚好对应inc函数的波节处,即此时采到的值为0。又因为DFT满足共轭对称,所以可得图如上。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。