数字信号处理实验五(实验箱)报告.docx
《数字信号处理实验五(实验箱)报告.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验五(实验箱)报告.docx(8页珍藏版)》请在冰点文库上搜索。
数字信号处理实验报告
实验名称:
实验五基于E300TECHV6713的快速傅里叶变换实验
实验时间:
2014 年 11 月 18 日
学号:
201211106134 姓名:
孙舸
成绩:
评语:
一、实验目的:
1、加深对DFT算法原理和基本性质的理解;
2、熟悉FFT算法原理和FFT子程序的应用;
3、学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二、实验原理与步骤:
(一)实验原理:
1、离散傅立叶变换DFT的定义:
将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。
2、FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极大的提高了运算的速度。
3、旋转因子的变化规律。
4、蝶形运算规律。
5、基-2FFT算法。
(二)实验步骤:
1、复习DFT的定义、性质和用DFT作谱分析的有关内容;
2、复习FFT算法原理与编程思想,并对照DIT-FFT运算流程图和程序框图,分析本实验提供的FFT样例子程序;
3、运行CCS软件,对样例程序进行跟踪,分析结果;记录必要的参数。
4、填写实验报告。
5、样例程序实验操作说明
A、实验前准备:
1)正确完成计算机、E300的连接;
2)用音频线连接音源和E300板的MIC_IN,系统上电;
B、实验
启动CCS,Project/Open打开“..\Algorithm\02FFT\example.pjt”工程文件;双击“example.pjt”及“Source”可查看各源程序;加载“example.out”;在主程序中,k++处设置断点;单击“Run”运行程序,程序将运行至断点处停止;
用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为x和mo,长度为1024,数值类型为32位有符号浮点变量,如图所示;数组x和mo分别存放的是经A/D转换后的语音信号和对该信号进行FFT变换的结果;
单击“Animate”或按F10运行程序;调整观察窗口并同步观察输入语音信号波形及其FFT变换结果;
单击“Halt”暂停程序运行,关闭窗口,本实验结束。
三、实验内容及结果:
(一)内容:
启动CCS,Project/Open打开“..\Algorithm\02FFT\example.pjt”工程文件;双击“example.pjt”及“Source”可查看各源程序;加载“example.out”;在主程序中,k++处设置断点;单击“Run”运行程序,程序将运行至断点处停止;
用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为x和mo,长度为1024,数值类型为32位有符号浮点变量,如图所示;数组x和mo分别存放的是经A/D转换后的语音信号和对该信号进行FFT变换的结果;
单击“Animate” 或按F10运行程序;调整观察窗口并同步观察输入语音信号波形及其FFT变换结果。
(二)实验结果:
a.源程序:
#include"Config1cfg.h" //定义包含的库#include
#include#include"c6211dsk.h"#include#include
#include
#include"math.h"
#defineLength1024 //宏定义#defineLen10
//==================================================
intin;
floatx[Length],mo[Length];
floatpr[Length],pi[Length],fr[Length],fi[Length]; //定义数组intxm,i,n,k; //定义变量
//LeftandrightsignalsamplesunsignedintxL,xR;
//==================================================
voidmain() //主函数
{
unsignedintdat;
init_sys();initial_aic23();delay_SYS
(1);
initial_mcbsp1(); //子函数声明
i=0; //初始化变量
k=0;
n=Length;
for(;;) //死循环
{
for(i=0;i<=n-1;i++)
{
mcbsp1Rx_ready();
dat=(*(unsignedint*)0x1900000);//DRR1;in=(intshort)dat;
//xm=
x[i]=(float)in;//32768.0;pr[i]=x[i];
pi[i]=0;
}
kfft(pr,pi,Length,Len,fr,fi,0,1);
for(i=0;i<=n-1;i++)
{
mo[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]); //快速傅里叶变换
}
k++;
}
}
b.图:
下图是输入两个不同的音频信号得到的波形:
改变length的值:
当length=512时:
当length=128时:
五、思考题:
1、对于不同的N,幅频特性会相同吗?
为什么?
答:
对于不同的N,幅频特性不相同,因为他们函数表达式不相同,模不相同。
2、FFT进行谱分析,可以应用在什么方面?
答:
FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT 的基本性质。
可以应用在对周期信号频谱分析和对模拟信号频谱分析。
3、结合实验中所给定典型序列幅频特性曲线,与理论结果比较,并分析说明误差产生的原因以及用FFT作谱分析时有关参数的选择方法。
答:
误差主要来自于用FFT作频谱分析时,得到的是离散谱,而信号(周期信号除外)是连续谱,只有当N较大时离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。
对信号进行谱分析的重要问题是频谱分辨率D和分析误差。
频谱分辨率直接和FFT
的变换区间N有关,因为FFT能够实现的频率分辨率是2π/N≤D。
可以根据此时选择
FFT的变换区间N。
4、总结实验所得主要结论。
给的输入信号不同,得到的结果也不同。
FFT只是DFT的一种快速算法,所以FFT的运算结果必然满足DFT 的基本性质。
只有当N较大时离散谱的包络才能逼近于连续谱,因此N要适当选择大一些。
对信号进行频谱分析时,数据样本应有足够的长度,一般FFT程序中所用数据点数与原含有信号数据点数相同,这样的频谱图具有较高的质量,可减小因补零或截断而产生的影响。
周期信号的频谱是离散谱,只有用整数倍周期的长度作FFT,得到的离散谱才能代表周期信号的频谱。
如果不知道信号周期,可以尽量选择信号的观察时间长一些。
对模拟信号的频谱时,首先要按照采样定理将其变成时域离散信号。
如果是模拟周期信号,也应该选取整数倍周期的长度,经过采样后形成周期序列,按照周期序列的谱分析进行。