西安交通大学数字信号处理实验报告_快速傅里叶变换
- 格式:docx
- 大小:1.27 MB
- 文档页数:18
数字信号处理
实验报告
姓名:______***______ 学号:____**********____ 班级:_____电信硕23_____ 实验日期:2014年10月15日提交日期:2014年10月23日
实验一快速傅里叶变换与信号频谱分析
一、实验目的
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),中层循环体进行不同组(运算系数相同的蝶形运算对视作一组),内层循环对每组内各运算对进行蝶形运算。同级运算的相邻两组运算系数满足以下表达式:
W1=1,W i=W i−1∗e−j
π2m−1
五、实验结果与分析
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的结果进行
对比。
由结果分析出:采样率、时域采样点数、频率采样点数对信号频谱的影响较大。采样率越低,截止频率越高更易产生混叠,发生混叠时,采样后的频谱无法反映出原频谱,也无法利用内插恢复成原来的信号;时域采样点数决定影响频率泄露的情况;频域采样点数决定了频域分辨率,决定是否影响栅栏效应的出现。
六、思考题
1)在实验a)、b)、c)和d)中,正弦信号的初始相位对频谱图中的幅度特性是否有影
响?为什么?
如下图,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 运算后的幅度特性没有改变
2)信号补零后做FFT是否可以提高信号频谱的分辨率?为什么?
频谱分辨率Fs/N发生了变化,以c)、g)为例,因为采样点数N由32提升到64,分辨率也有所改变。
七、MATLAB程序代码
clc;clear;clf;
%数据初始设定
clear;
pi=3.14159265358979;
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);
if flag_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为首元次序
for l=1:N
X(l)=x(addr(l)); %在X内存放按变址后顺序的x
end
%FFT运算
d1=1;
for m=1:log2(N) %m是FFT的级数,满足2^m=N
d2=d1; %d2是两个蝶形运算元的距离
d1=d1*2; %d1是两个同级蝶形运算对的距离
W=1; %蝶形运算系数的初始值
dw=exp(-1i*pi/d2); %蝶形运算系数变化量
for t=1:d2
for p=t:d1:N
q=p+d2;