《《数字信号处理》课程实验--实验一 快速傅立叶变换.docx》由会员分享,可在线阅读,更多相关《《数字信号处理》课程实验--实验一 快速傅立叶变换.docx(8页珍藏版)》请在第一文库网上搜索。
1、数字信号处理实验报告实验一快速傅立叶变换一实验目的1在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解;2熟悉并掌握按时间抽取FFT算法的程序;3了解应用FFT进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、栅栏效应等,以便在实际中正确应用FFT。二实验内容1仔细分析教材第六章时间抽取法FFT的算法结构,编制出相应的用FFT进行信号分析的C语言(或MAT1AB语言)程序;2用FFT程序计算有限长度正弦信号y(t)=sin(2乃ft),0tNT分别对在给定情况下所得的DFT结果并进行分析和讨论。三结果与分析a)信号频率f=50Hz,采样点数N=32,采样间隔T=0.000625s1r
2、0.9、0.80.70.6-0.50.4-0.3-0.20.10GQoe-OQQec-OOOOOQQOeQOOQ1O5101520253035生成的输入序列在频域的一个周期内,仅在f1及其共规fs-f1上有值。因为SinC主瓣宽度为1NT=f1,而SinC函数除主瓣外相邻两个与实轴交点之间的距离也为1/NT,采样频率fs对应的相角是2*pi即第N个点,一个周期内共有32个采样点,则f1对应的频率为2*piN,采样点之间的间隔为2*piN,故频域的采样点上只有第1个点和与其共软的第31个点处值为1,其他处均采到sine函数与实轴的交点处所以其值为Oob) 信号频率f=50Hz,采样点数N=32,
3、采样间隔T=O.OO5s10.90.8-0.70.6-0.50.30.20.1-O5101520253035生成的输入序列在频域的一个周期内仅在门及其共规fs-f1上有值。加窗后(频域上与SinC函数卷积)sine主瓣宽度为1NT=f18,而SinC函数除主瓣外相邻两个与实轴交点之间的距离也为1/NT。采样频率fs对应的相角是2*pi即第N个点,一个周期内共有32个采样点,则f1对应的频率为8*2*piN,采样点之间的间隔为2*piN,故频域的采样点上只有第8个点和与其共规的第24个点处值为1,其他处均采到SinC函数与实轴的交点处所以其值为0。c) 信号频率f=50Hz,采样点数N=32,采
4、样间隔T=0.0046875sN=32,T=0.0046875s,f1=5OHz,贝JNT=150ms=7.5f1,即f1对应的是第7.5个点。采样频率fs=213.33Hz,不是整数。在数字域采样频率对应的是2*pi,所以可以知道Sin函数在数字域里对应的是0.234*2*pi,和-0.234*2*pi,不是pi/16的整数倍,所以其卷积SinC函数后,由于SinC函数的主瓣宽度仍然保持为pi16,所以频率在k*pi16上不为0而是两个SinC函数的叠加,由于SinC函数从主瓣向两边延伸时,幅度渐渐衰减,所以最终频谱为在7*pi16,8*pi16和24*pi16,25*pi16这4个距离si
5、ne函数主瓣最近的频率处会有比较大的幅值,其他点依次衰减。故其DFT如图所示。d) 信号频率f=5OHz,采样点数N=32,采样间隔T=0.004s因为N=32,T=0.0046875s,f1=5OHz,所以NT=128ms=6.4f1为非整数,由于sine函数在数字域中对应0.4*pi和-0.4*pi,不是2*piN即pi/16的整数倍,且其主瓣宽度仍为pi/16,故其DFT是两个sine函数叠加的包络形状。e) 信号频率f=5OHz,采样点数N=64,采样间隔T=O.OOO625s0.90.80.70.60.50.2喟700.4因为f1=50Hz、N=64、T=0.000625s,所以NT
6、=40ms=2f1相比于N=32,本题对应的SinC函数主瓣宽度缩小一倍。故其频域上多看了一倍的频率数。因为采样频率不变,多了一倍的采样点,故其峰值(即1)出现在第2个点及与其共辆的第62个点上,其余处值均为0(都采到了SinC函数与实轴的交点上)。因此可以说本题与a)题的频谱相同,只是多看了一倍频率的采样值。f) 信号频率f=250Hz,采样点数N=32,采样间隔T=O.OO5s1r0.9-0.80.7-0.60.50.40.30.20.1。0!)O(05101520253035由于F1=250Hz,fs=1T=200Hz,并不满足采样定理,但因为在时域上采样就相当于在频域上进行周期性严拓,
7、严拓周期为采样频率,经周期性严拓,恰好在50HZ和-50HZ处有频率值,且在0200Hz范围内仅有50HZ-个频率,虽然结论巧合地和正确结果一致,但并没有实质道理。相比于(c),根据对偶原理,可分析出本结果是合理的。四算法代码c1c;c1ear;fprintf(请输入信号频率f=1);f=input();fprintfC请输入采样点数N=);N=input();fprintff请输入采样间隔T二);T=input();n=O:N-1;t=n*T;%生成正弦信号采样序列x=sin(2*pi*f*t);%进行FFT变换并做频谱图y=fft_diy(x);%调用FFT算法函数,进行FFT变换temp
8、=abs(y);%求幅值mag=temp/max(temp);%幅值归一化IabIe_仁0:Iength(y)-1;%进行对应的频率转换Stem(Iab1ef,mag);%做频谱图%FFT算法实现函数functiony=fft_diy(x);M=1ength(x);NodNum=1og2(M);fprintff是否补零?补零输入1,不补输入Or)temp=input();iftempM=2(f1oor(NodNum)+1);x=x,zeros(1,M2)J;endK=M2;even_no=zeros(1,K);odd_no=zeros(1,K);f_va1ve=zeros(1,M);fori=0:K-1forx1=0:K-1even-no(i+1)=even-no(i+1)+(x(2*x1+1)*exp(-j*2*pi*x1*iK)K;odd-no(i+1)=odd_no(i+1)+(x(2*x1+11)*exp(-j*2*pi*x1*iK)K;endendfori=0:K-1Cva1ve(i+1)=(even_no(i+1)+odd_no(i+1)*exp(-j*2*pi*iM)2;endfori=0:K-1Cva1ve(i+K+1)=(even_no(i+1)-odd-no(i+1)*exp(-j*2*pi*iM)2;endy=f_va1ve.*M;