数字信号处理快速傅里叶变换FFT实验报告Word文件下载.docx
《数字信号处理快速傅里叶变换FFT实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《数字信号处理快速傅里叶变换FFT实验报告Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
实验一快速傅里叶变换与信号频谱分析
一、实验目的
1.在理论学习的基础上,通过本实验加深对离散傅里叶变换的理解;
2.熟悉并掌握按时间抽取编写快速傅里叶变换(FFT)算法的程序;
3.了解应用FFT进行信号频谱分析过程中可能出现的问题,例如频谱混淆、泄漏、栅栏效应等,以便在实际中正确使用FFT算法进行信号处理。
二、实验内容
1.仔细分析教材第六章“时间抽取法FFT的FORTRAN程序”,编写出相应的使用FFT进行信号频谱分析的Matlab程序。
2.用FFT程序分析正弦信号,分别在以下情况进行分析,并讨论所得的结果:
a)信号频率F=50Hz,采样点数N=32,采样间隔T=0.000625s;
b)信号频率F=50Hz,采样点数N=32,采样间隔T=0.005s;
c)信号频率F=50Hz,采样点数N=32,采样间隔T=0.0046875s;
d)信号频率F=50Hz,采样点数N=32,采样间隔T=0.004s;
e)信号频率F=50Hz,采样点数N=64,采样间隔T=0.000625s;
f)信号频率F=250Hz,采样点数N=32,采样间隔T=0.005s;
g)将c)中信号后补32个0,做64点FFT,并与直接采样64个点做FFT的结果进行对比。
3.思考题:
1)在实验a)、b)、c)和d)中,正弦信号的初始相位对频谱图中的幅度特性是否有影响?
为什么?
2)信号补零后做FFT是否可以提高信号频谱的分辨率?
三、实验要求
1.记录实验内容中各种情况下的X(k)值,做出频谱图并深入讨论结果,说明参数的变化对信号频谱产生哪些影响。
频谱只做幅度特性,并按照幅度最大值进行归一化。
2.打印出编写的FFT源程序,并且在每一小段处加上详细的注释说明。
3.用Matlab编写FFT程序时,要求采用人机界面形式:
N,T,F以及初始相位等变量均由键盘输入,补零或不补零要求设置一开关来选择。
4.回答思考题,撰写实验报告。
四、设计思路
4.1码位倒置
按实验要求,需要对正弦信号进行采样,采样后信号按顺序储存,但此刻DFT运算结果是乱序的,因此需要根据结果所需要的顺序进行码位倒置的变址操作。
变址的实现方法是:
将原址用二进制表示后左右翻转,再转回十进制。
需要注意的是MATLAB中数组首元素序号为1,所以在十进制转二进制之前地址需要减1,二进制转十进制之后需要加1。
4.2蝶形运算
蝶形运算使用三层循环结构,外层循环控制级数m的递推(1~log2N),中层循环体进行不同组(运算系数相同的蝶形运算对视作一组),内层循环对每组内各运算对进行蝶形运算。
同级运算的相邻两组运算系数满足以下表达式:
五、实验结果与分析
由结果分析出:
采样率、时域采样点数、频率采样点数对信号频谱的影响较大。
采样率越低,截止频率越高更易产生混叠,发生混叠时,采样后的频谱无法反映出原频谱,也无法利用内插恢复成原来的信号;
时域采样点数决定影响频率泄露的情况;
频域采样点数决定了频域分辨率,决定是否影响栅栏效应的出现。
六、思考题
如下图,a)中初始相位分别为0、0.25π、0.5π、0.75π时,幅度特性并无变化。
题b)初始相位分别为0、0.25π时,幅度特性无变化。
c)的初始相位为0、0.25π、0.5π、0.75π时,幅度特性没有变化。
d)初始相位分别为0、0.25π时,幅度特性没有变化。
综上,改变初始相位不会改变信号频率、采样间隔等参数,因此也就不会对幅度特性产生影响。
c)、d)中有部分频率下归一化后的值有所改变是因为复数运算精度问题,FFT运算后的幅度特性没有改变
频谱分辨率Fs/N发生了变化,以c)、g)为例,因为采样点数N由32提升到64,分辨率也有所改变。
七、MATLAB程序代码
clc;
clear;
clf;
%数据初始设定
pi=3.149;
f=input('
信号频率:
'
);
N=input('
采样点数:
T=input('
采样时间间隔:
xdefault=input('
初始相位(pi):
flag_zero=input('
是否补零(1/0):
%生成离散信号过程
x=sin(2*pi*f*(0:
N-1)*T+xdefault*pi);
ifflag_zero==1
nz=input('
补零个数:
x=[x,zeros(1,nz)];
%补零
N=N+nz;
else
end
%变址过程
k=0:
N-1;
addr=bi2de(fliplr(de2bi(k,length(de2bi(N-1)))))+1;
%末尾+1是因为matlab数组以1为首元次序
forl=1:
N
X(l)=x(addr(l));
%在X内存放按变址后顺序的x
%FFT运算
d1=1;
form=1:
log2(N)%m是FFT的级数,满足2^m=N
d2=d1;
%d2是两个蝶形运算元的距离
d1=d1*2;
%d1是两个同级蝶形运算对的距离
W=1;
%蝶形运算系数的初始值
dw=exp(-1i*pi/d2);
%蝶形运算系数变化量
fort=1:
d2
forp=t:
d1:
N
q=p+d2;
ifq>
Nbreak;
else
tmp=X(q)*W;
X(q)=X(p)-tmp;
X(p)=X(p)+tmp;
%蝶形运算过程
end
W=W*dw;
%蝶形运算系数变化
X=X/max(abs(X));
X
subplot(2,2,1);
t=0:
0.0000001:
N*T;
plot(t,sin(2*pi*f*t+xdefault));
%输入信号
subplot(2,2,2);
stem(k,x);
%采样后的离散信号
subplot(2,2,3);
stem(k,abs(X)/max(abs(X)));
%程序运算出的FFT