一、实验目的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,不补则输入0if(C==0) t=0:T:(N-1)*T; x=sin(2*pi*f*t); b=0;else b=input('输入补零的个数:'); while(log2(N+b)~=fix(log2(N+b))) b=input('输入错误,请重新输入补零的个数:'); end t=0:T:(N+b-1)*T; x=sin(2*pi*f*t).*(t<=(N-1)*T);end%% fft算法的实现A=bitrevorder(x); % 将序列按二进制倒序N=N+b;M=log2(N); % M为蝶形算法的层数W=exp(-j*2*pi/N); for L=1:1:M % 第L层蝶形算法 B=2^L/2; % B为每层蝶形算法进行加减运算的两个数的间隔 K=N/(2^L); % K为每层蝶形算法中独立模块的个数 for k=0:1:K-1 for J=0:1:B-1 p=J*2^(M-L); % p是W的指数 q=A(k*2^L+J+1); % 用q来代替运算前面那个数 A(k*2^L+J+1)=q+W^p*A(k*2^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=abs(A); % 取模z=z./max(z); %归一化hold onsubplot(2,1,1);stem(0:1:N-1,x,'DisplayName','z');title('时域信号');subplot(2,1,2);stem(0:1:N-1,z,'DisplayName','z');title('频谱图');figure(gcf) %画图2用 FFT 程序计算有限长度正弦信号分别在以下情况下所得的 DFT 结果并进行分析和讨论:a)信 号 频 率 f = 50Hz , 采 样 点 数 N=32, 采 样 间 隔 T=0.000625sb)信号频率 f=50Hz,采样点数 N=32,采样间隔 T=0.005s05101520253035-1-0.500.510510152025303500.20.40.60.81c)信号频率 f=50Hz,采样点数 N=32,采样间隔 T=0.0046875s05101520253035-1-0.500.510510152025303500.20.40.60.81d)信号频率 f=50Hz,采样点数 N=32,采样间隔 T=0.004s05101520253035-1-0.500.510510152025303500.20.40.60.81e)信号频率 f=50Hz,采...