快速傅里叶变换实验
快速傅立叶变换(FFT)算法实验
实验二快速傅立叶变换(FFT)算法实验一.实验目的1.加深对DFT算法原理和基本性质的理解;2.熟悉FFT算法原理和FFT子程序的应用;3.学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。
二.For personal use only in study and research; not for commercial use三.四.实验设备计算机,CCS 2.0 版软件,实验箱,DSP仿真器,短接块,导线。
五.基本原理1.For personal use only in study and research; not for commercial use2.3.离散傅立叶变换DFT的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。
4.FFT是DFT的一种快速算法,将DFT的N2步运算减少为(N/2)log2N步,极大的提高了运算的速度。
5.旋转因子的变化规律。
6.蝶形运算规律。
7.基2FFT算法。
六.实验步骤1.复习DFT的定义、性质和用DFT作谱分析的有关内容;2.复习FFT算法原理与编程思想,并对照DIT-FFT运算流程图和程序框图,了解本实验提供的FFT子程序;3.阅读本实验所提供的样例子程序;4.运行CCS软件,对样例程序进行跟踪,分析结果;记录必要的参数。
5.填写实验报告。
6.提供样例程序实验操作说明1)实验前的准备“语音处理单元”的拨码开关设置:在信号源单元中,设置左路信号源产生低频正弦波信号,右路产生高频正弦波信号。
实验箱上电,用示波器分别观测OUT1和OUT2输出的模拟信号,并调节电位器直至低频正弦波信号为100Hz/1V左右;高频正弦波信号为6KHz/1V左右;将S3中的拨码开关2打到ON,用示波器观测OUT1输出的混叠信号波形。
用导线连接“信号源单元”中2号孔接口OUT1和语音处理单元中的2号孔接口“IN”;正确完成计算机、DSP仿真器和实验箱的连接后,系统上电.2)实验过程启动CCS 2.0,用Project/Open打开“ExpFFT01.pjt”工程文件;双击“ExpFFT01.pjt”及“Source”可查看各源程序;加载“ExpFFT01.out”;至断点处停止;用View / Graph / Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;采用双踪观察在启始地址分别为0x3000h和0x3080h,长度为128的单元中数值的变化,数值类型为16位有符号整型变量,这两段存储单元中分别存放的是经A/D转换后的输入信号和对该信号进行FFT变换后的结果;单击“Animate”运行程序,或按F10运行;调整观察窗口并观察变换结果;单击“Halt”暂停程序运行,关闭窗口,本实验结束;实验结果:在CCS2.0环境,同步观察输入信号波形及其FFT变换结果;七.思考题1.对于不同的N,幅频特性会相同吗?为什么?2.FFT进行谱分析,可以应用的什么方面?八.实验报告要求1.简述实验原理及目的;2.结合实验中所给定典型序列幅频特性曲线,与理论结果比较,并分析说明误差产生的原因以及用FFT作谱分析时有关参数的选择方法。
快速傅里叶变换(含详细实验过程分析)
快速傅⾥叶变换(含详细实验过程分析)[实验2] 快速傅⾥叶变换 (FFT) 实现⼀、实验⽬的1、掌握FFT 算法和卷积运算的基本原理;2、掌握⽤C 语⾔编写DSP 程序的⽅法;3、了解利⽤FFT 算法在数字信号处理中的应⽤。
⼆、实验设备 1. ⼀台装有CCS 软件的计算机; 2. DSP 实验箱的TMS320C5410主控板; 3. DSP 硬件仿真器。
三、实验原理(⼀)快速傅⾥叶变换傅⾥叶变换是⼀种将信号从时域变换到频域的变换形式,是信号处理的重要分析⼯具。
离散傅⾥叶变换(DFT )是傅⾥叶变换在离散系统中的表⽰形式。
但是DFT 的计算量⾮常⼤, FFT 就是DFT 的⼀种快速算法, FFT 将DFT 的N 2步运算减少⾄ ( N/2 )log 2N 步。
离散信号x(n)的傅⾥叶变换可以表⽰为∑=-=10][)(N N nk N W n x k X , Nj N e W /2π-=式中的W N 称为蝶形因⼦,利⽤它的对称性和周期性可以减少运算量。
⼀般⽽⾔,FFT 算法分为时间抽取(DIT )和频率抽取(DIF )两⼤类。
两者的区别是蝶形因⼦出现的位置不同,前者中蝶形因⼦出现在输⼊端,后者中出现在输出端。
本实验以时间抽取⽅法为例。
时间抽取FFT 是将N 点输⼊序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。
偶序列为:x(0), x(2), x(4),…, x(N-2);奇序列为:x(1), x(3), x(5),…, x(N-1)。
这样x(n) 的N 点DFT 可写成:()()∑++∑=-=+-=12/0)12(12/02122)(N n kn NN n nkNW n x Wn x k X考虑到W N 的性质,即2/)2//(22/)2(2][N N j N j N W e e W ===--ππ因此有:()()∑++∑=-=-=12/02/12/02/122)(N n nkN k NN n nkN W n x WWn x k X或者写成:()()12()kN X k X k W X k =+由于X 1(k) 与X 2(k) 的周期为N/2,并且利⽤W N 的对称性和周期性,即:kNNkNWW-=+2/可得:()()12(/2)kNX k N X k W X k+=-对X1(k) 与X2(k)继续以同样的⽅式分解下去,就可以使⼀个N点的DFT最终⽤⼀组2点的DFT来计算。
快速傅里叶变换(FFT)实验说明概要
算法验证原理:为了验证该 FFT 的频谱分析能力,故对一段合成信号进行 FFT 。
方波的傅里叶级数展开公式如下:根据以上公式各次谐波与基波之间的谐波频率与谐波幅度的关系, 我们可以使用 sin 函数合成任意次的方波。
这里,我们选取三次谐波合成方波。
以下是例程中的合成三次谐波信号:Input[i]=sin(2*pi*5*i/(NL-1+sin(2*pi*i*5*3/(NL-1/3+sin(2*pi*i*5*5/(NL-1/5;基波角频率 =2*pi*5, NL 为将连续信号离散化的点数,在2π的周期上均匀分割为 NL 个离散点。
这一步代替了 AD 采样的功能。
离散点存放在数组 Input[i]里面,长度为 NL 。
例程里面 NL=256。
加载程序并运行,点击 view->Graph->Time/Frequency,设置如下:点击 OK ,出现如下图所示的波形:这是合成信号的时域波形, 根据吉布斯效应,如果谐次增加, 高电平两个尖峰之间的震荡幅度将会减小变密,但是两边的尖峰不会削减。
接着我们设置如下:点击 OK ,我们将看到如下波形:上图为对该合成信号的 256点 FFT 频谱图,在三个频率分量处有幅度分布。
由于 FFT 是在2π上的分析, 而且将复数进行了取模运算, 所以频谱图是关于π(采样值为点 127的对称图形。
将鼠标点击到尖峰处,分别得到点数与幅度的值为:第一尖峰:(5, 0.99 第二尖峰:(15, 0.32 , 第三尖峰:(25, 0.19 。
采样点数关系为 5,15,25,满足 1:3:5的频率关系;量化的幅度关系为 0.99:0.32:0.19,满足 1:1/3:1/5的谐波幅度关系。
因此,该 FFT 算法能够准确的对信号进行频谱计算。
快速傅里叶变换(含详细实验过程分析)
一、实验目的1、掌握FFT 算法和卷积运算的基本原理;2、掌握用C 语言编写DSP 程序的方法;3、了解利用FFT 算法在数字信号处理中的应用。
二、实验设备 1. 一台装有CCS 软件的计算机; 2. DSP 实验箱的TMS320C5410主控板; 3. DSP 硬件仿真器。
三、实验原理 (一)快速傅里叶变换傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。
离散傅里叶变换(DFT )是傅里叶变换在离散系统中的表示形式。
但是DFT 的计算量非常大, FFT 就是DFT 的一种快速算法, FFT 将DFT 的N 2步运算减少至 ( N/2 )log 2N 步。
离散信号x(n)的傅里叶变换可以表示为∑=-=10][)(N N nk N W n x k X , Nj N e W /2π-=式中的W N 称为蝶形因子,利用它的对称性和周期性可以减少运算量。
一般而言,FFT 算法分为时间抽取(DIT )和频率抽取(DIF )两大类。
两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。
本实验以时间抽取方法为例。
时间抽取FFT 是将N 点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。
偶序列为:x(0), x(2), x(4),…, x(N-2);奇序列为:x(1), x(3), x(5),…, x(N-1)。
这样x(n) 的N 点DFT 可写成:()()∑++∑=-=+-=12/0)12(12/02122)(N n kn NN n nkNW n x Wn x k X考虑到W N 的性质,即2/)2//(22/)2(2][N N j N j N W e e W ===--ππ因此有:()()∑++∑=-=-=12/02/12/02/122)(N n nkN k NN n nkN W n x WWn x k X或者写成:()()12()kN X k X k W X k =+由于X 1(k) 与X 2(k) 的周期为N/2,并且利用W N 的对称性和周期性,即:k N N k N W W -=+2/可得:()()12(/2)kN X k N X k W X k +=-对X 1(k) 与X 2(k)继续以同样的方式分解下去,就可以使一个N 点的DFT 最终用一组2点的DFT 来计算。
数字信号处理实验 快速傅里叶变换(东大)
快速傅里叶变换及其应用1. 实验目的及原理1.1实验目的:(1)在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉MATLAB中的有关函数。
(2)应用FFT对典型的信号进行频谱分析。
(3)了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。
(4)应用FFT实现序列的线性卷积和相关。
1.2实验原理:快速傅氏变换(FFT),是离散傅里叶变换的快速算法,它是根据离散傅氏变换的奇,偶,虚,实等特性,对离散傅里叶变换的算法进行改进获得的,根据不同的情况又分为按时间抽取的FFT和频率抽取的FFT,同时还包括N为任意复合数的算法以及Chirp-z变化算法。
2. 实验步骤和内容2.1 高斯序列其他(n)中参数p=8,改变q的值,使q分别等于2、观察高斯序列的时域和幅频特性,固定信号xa4、8,观察它们的时域和幅频特性,了解当q取不同值时,对信号序列的时域和幅频特性的影响;固定q=8,改变p,使p分别等于8,13,14,观察参数p变化对信号序列的时域及幅频特性的影响,注意p等于多少时,会发生明显的泄露现象,混叠是否也随之出现?记录实验中观察到的现象,绘出相应的时域序列和幅频特性曲线。
p=8 , q=4p=8 , q=8p=13 , q=8p=14 , q=8 结果分析:2.2衰减的正弦序列()其他(n)的时域和幅频特性,a=0.1,f=0.0625,检查谱峰出现位置是否正确,观察衰减正弦序列xb注意频谱的形状,绘出幅频特性曲线,改变f,使f分别等于0.4375和0.5625,观察这两种情况下,频谱的形状和谱峰出现位置,有无混叠和泄漏现象?说明产生现象的原因。
f=0.0625f=0.4375f=0.5625结果分析:2.3 三角波和反三角波序列三角波序列其他反三角波序列其他观察三角波和反三角波序列的时域和幅频特性,用N=8点FFT分析信号序列xc (n)和xd(n)的幅频特性,观察两者的序列形状和频谱曲线有什么异同?绘出两序列及其幅频特性曲线。
实验六 快速傅立叶变换(FFT)的实现
实验五 快速傅立叶变换(FFT )的实现一、 实验目的在数字信号处理系统中,FFT 作为一个非常重要的工具经常使用,甚至成为DSP 运算能力的一个考核因素。
FFT 是一种高效实现离散付氏变换的算法。
离散付氏变换的目的是把信号由时域变换到频域,从而可以在频域分析处理信息,得到的结果再由付氏逆变换到时域。
本实验的目的在于学习FFT 算法,及其在TMS320C54X 上的实现,并通过编程掌握C54X 的存储器管理、辅助寄存器的使用、位倒序寻址方式等技巧,同时练习使用CCS 的探针和图形工具。
另外在BIOS 子目录下是一个使用DSP/BIOS 工具实现FFT 的程序。
通过该程序,你可以使用DSP/BIOS 提供的分析工具评估FFT 代码执行情况。
二、 实验原理㈠ 基—2按时间抽取FFT 算法对于有限长离散数字信号{x[n]},0 ≤ n ≤ N-1,其离散谱{x[k]}可以由离散付氏变换(DFT )求得。
DFT 的定义为可以方便的把它改写为如下形式:不难看出,W N 是周期性的,且周期为N ,即W N 的周期性是DFT 的关键性质之一。
为了强调起见,常用表达式W N 取代W 以便明确其周期是N 。
由DFT 的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N 点DFT 需()1,...,1,0][)2(1-==--=∑N k en x k X nk Nj N n π()1,...,1,0][10-==∑-=N k W n x k X nk NN n ...2,1,0,))((±±==++l m W W nkNlN k mN n N要(N-1)2次复数乘法和N (N-1)次加法。
因此,对于一些相当大的N 值(如1024)来说,直接计算它的DFT 所作的计算量是很大的。
FFT 的基本思想在于,将原有的N 点序列序列分成两个较短的序列,这些序列的DFT 可以很简单的组合起来得到原序列的DFT 。
实验五--快速傅里叶变换
实验五--快速傅里叶变换CENTRAL SOUTH UNIVERSITY数字信号处理实验报告题目快速傅里叶变换学生姓名学院物理与电子学院专业班级电子信息科学与技术1105班学号140411072实验五快速傅里叶变换一、实验仪器PC机一台、JQ-SOPC开发系统实验箱及辅助软件(DSP Builder、Matlab/Simulink、Quartus II、Modelsim)。
二、实验目的1、了解快速傅里叶变换的基本结构组成。
2、学习使用DSP Builder设计FFT。
三、实验原理1、FFT的原理:快速傅里叶变换(FFT)是离散傅里叶变换(DFT)的一种高效运算方法,它大大简化了DFT 的运算过程,使运算时间缩短几个数量级。
FFT 算法可以分为按时间抽取(DIT)和按频率抽取(DIF)两类,输入也可分为实数和复数两种情况。
八点时间抽取基-2FFT算法信号流图如图1示:图1 8点基-2 DIT-FFT信号流图四、实验步骤1、将桌面的my_fft_8.mdl拷贝到“D:\Program Files\MATLAB71\work”(MATLAB安装目录下的work文件夹)处,并双击打开。
图5-1 快速傅里叶变换系统图图5-2 快速傅里叶变换子系统1图图5-3 快速傅里叶变换子系统2图图5-3 快速傅里叶变换子系统3图2、点击工具栏即可开始系统级simulink仿真,以验证该模型的正确性。
在仿真进行过程中分别将三个输入控制开关打到000、001、010、011、100以选择五组输入数据进行FFT运算。
(1)当开关打到000时选择第一组数据{2.0,2.0,4.0,7.0,3.0,5.0,5.0,8.0},其运算结果应为36、-2.41+3.84i、-4+8i、0.4219+1.844i、-8、0.4102-1.84i、-4-8i、-2.422-3.844i。
(2)当开关打到001时选择第二组数据{1.1,5.0,10.5,15.3,20.2,25.7,30.6,40.1},其运算结果应该为148.5、-16.1+52.35i、-19.8+24.7i、-22.02+12.25i、-23.7、-22.1-12.15i、-19.8-24.7i、-16.9-52.45i。
快速傅里叶变换FFT实验
1.快速傅里叶变换FFT实验.1)快速傅里叶变换FFT源程序:#include"iostream.h"#include"math.h"//using namespace std#define pi 3.1415926536 //定义pai void swap(double &a,double &b) //定义交换函数swap{double t=a;a=b;b=t;}void fft(double A[],double B[],int M) //定义fft快速傅里叶函数{ long int J,I,L,LE,LE1,P,Q,R;double N,K,Wr,Wi,W1r,W1i,WTr,WTi,theta,Tr,Ti;J=0;N=pow(2,M);//雷达算法码位倒置程序for(I=0;I<N-1;I++){if(J>I){swap(A[I],A[J]);swap(B[I],B[J]);}K=N/2;//向低位进位while(K>=2&&J>=K){J-=K;K=K/2;}J+=K;}//蝶形运算程序//最外层循环由蝶形图的级数确定for(L=1;L<=M;L++){LE=pow(2,L); //各级群间隔LE1=LE/2; //输入间隔Wr=1.0; //Wn的实部Wi=0.0; //Wn的虚部theta=(-1)*pi/LE1;W1r=cos(theta);W1i=sin(theta);//中层循环由Wn的个数确定for(R=0;R<LE1;R++){//内层循环由每一级群的个数确定for(P=R;P<N-1;P+=LE){Q=P+LE1;Tr=Wr*A[Q]-Wi*B[Q];Ti=Wr*B[Q]+Wi*A[Q];A[Q]=A[P]-Tr;B[Q]=B[P]-Ti;A[P]+=Tr;B[P]+=Ti;}//计算每一级的Wn的值WTr=Wr;WTi=Wi;Wr=WTr*W1r-WTi*W1i;Wi=WTr*W1i+WTi*W1r;}}}void main(){int M;double N;cout<<"实验人的信息:姓名:张超华学号:200801000728 专业班级:电力电子0801"<<endl;cout<<"输入序列的个数N(N必须为2^M),N=";cin>>N;//判断输入N的个数是否符合2^M个while(1){double b=log10(N)/log10(2);int a=b/1;if(a-b==0){M=a;break;}else{cout<<"输入序列的个数须为2^M个,重新输入N=";cin>>N;}}double *A=new double[N]; //为序列的实部分配动态空间double *B=new double[N]; //为序列的虚部分配动态空间for(int i=0;i<N;i++){A[i]=0.0;B[i]=0.0;}// 输入序列cout<<"请在下方输入序列的实部:"<<endl;for(int j=0;j<N;j++){cin>>A[j];}cout<<"请在下方输入序列的虚部:"<<endl;for(j=0;j<N;j++){cin>>B[j];}fft(A,B,M); //调用fft函数 cout<<"经快速傅里叶变换后得到的结果为:"<<endl; //输出变换结果 for(int m=0;m<N;m++){cout<<" "<<A[m]<<"+j("<<B[m]<<")"<<endl;}//释放内存空间delete [] A;delete [] B;}2)FFT程序运行结果:(参考课本160页的‘例6-3’运行程序。
实验三 快速傅立叶变换(FFT)及其应用
址”。
FFT的应用
凡是利用付里叶变换来进行分析、综合、变换的
地方,都可以利用FFT算法来减少其计算量。
FFT主要应用在
1、快速卷积
2、快速相关
3、频谱分析
快速傅立叶变换的MATLAБайду номын сангаас实现
提供fft函数计算DFT 格式
X=fft(x)
X=fft(x,N)
如果x的长度小于N,则在其后填零使其成为N点序列,
f1=40Hz f2=15Hz
Fs=100Hz
fs=100;
N=128;
n=0:N-1;
t=n/fs;
x=sin(2*pi*40*t)+sin(2*pi*15*t);
subplot(2,2,1) plot(t,x) title('original signal') y=fft(x,N); mag=abs(y); f=(0:length(y)-1)'*fs/length(y); subplot(2,2,2)
plot(f,mag)
title('FFT to original signal')
xifft=ifft(y); magx=real(xifft); ti=[0:length(xifft)-1]/fs; subplot(2,2,3) plot(ti,magx); title('signal from IFFT')
若省略变量N,则DFT的长度即为x的长度。
如果N为2的幂,则得到高速的基-2FFT算法;若N不是2
的乘方,则为较慢的混合算法。
如果x是矩阵,则X是对矩阵的每一列向量作FFT。
数字信号处理_快速傅里叶变换FFT实验报告
数字信号处理_快速傅里叶变换FFT实验报告快速傅里叶变换(FFT)实验报告1. 引言数字信号处理是一门研究如何对数字信号进行处理、分析和提取信息的学科。
傅里叶变换是数字信号处理中常用的一种方法,可以将信号从时域转换到频域。
而快速傅里叶变换(FFT)是一种高效的计算傅里叶变换的算法,广泛应用于信号处理、图象处理、通信等领域。
2. 实验目的本实验旨在通过编写程序实现快速傅里叶变换算法,并对不同信号进行频谱分析。
3. 实验原理快速傅里叶变换是一种基于分治策略的算法,通过将一个N点离散傅里叶变换(DFT)分解为多个较小规模的DFT,从而实现高效的计算。
具体步骤如下: - 如果N=1,直接计算DFT;- 如果N>1,将输入序列分为偶数和奇数两部份,分别计算两部份的DFT;- 将两部份的DFT合并为整体的DFT。
4. 实验步骤此处以C语言为例,给出实验的具体步骤:(1) 定义输入信号数组和输出频谱数组;(2) 实现快速傅里叶变换算法的函数,输入参数为输入信号数组和输出频谱数组;(3) 在主函数中调用快速傅里叶变换函数,得到输出频谱数组;(4) 对输出频谱数组进行可视化处理,如绘制频谱图。
5. 实验结果与分析为了验证快速傅里叶变换算法的正确性和有效性,我们设计了以下实验:(1) 生成一个正弦信号,频率为100Hz,采样频率为1000Hz,时长为1秒;(2) 对生成的正弦信号进行快速傅里叶变换,并绘制频谱图;(3) 生成一个方波信号,频率为200Hz,采样频率为1000Hz,时长为1秒;(4) 对生成的方波信号进行快速傅里叶变换,并绘制频谱图。
实验结果显示,对于正弦信号,频谱图中存在一个峰值,位于100Hz处,且幅度较大;对于方波信号,频谱图中存在多个峰值,分别位于200Hz的奇数倍处,且幅度较小。
这与我们的预期相符,说明快速傅里叶变换算法能够正确地提取信号的频谱信息。
6. 实验总结通过本次实验,我们成功实现了快速傅里叶变换算法,并对不同信号进行了频谱分析。
(完整版)快速傅里叶变换实验
(完整版)快速傅⾥叶变换实验实验七快速傅⾥叶变换实验2011010541 机14 林志杭⼀、实验⽬的1.加深对⼏个特殊概念的理解:“采样” ??“混叠”;“窗函数”(截断)??“泄漏”;“⾮整周期截取”??“栅栏” 。
2.加深理解如何才能避免“混叠” ,减少“泄漏” ,防⽌“栅栏”的⽅法和措施以及估计这些因素对频谱的影响。
3.对利⽤通⽤微型计算机及相应的FFT软件,实现频谱分析有⼀个初步的了解。
⼆、实验原理为了实现信号的数字化处理,利⽤计算机进⾏频谱分析――计算信号的频谱。
由于计算机只能进⾏有限的离散计算(即DFT),因此就要对连续的模拟信号进⾏采样和截断。
⽽这两个处理过程可能引起信号频谱的畸变,从⽽使DFT 的计算结果与信号的实际频谱有误差。
有时由于采样和截断的处理不当,使计算出来的频谱完全失真。
因此在时域处理信号时要格外⼩⼼。
时域采样频率过低,将引起频域的“混叠” 。
为了避免产⽣“混叠” ,要求时域采样时必须满⾜采样定理,即:采样频率fs必须⼤于信号中最⾼频率fc的2倍(fs> 2fc)。
因此在信号数字处理中,为避免混叠,依不同的信号选择合适的采样频率将是⼗分重要的。
频域的“泄漏” 是由时域的截断引起的。
时域的截断使频域中本来集中的能量向它的邻域扩散(如由⼀个δ(f)变成⼀个sinc(f),⽽泄漏的旁瓣将影响其它谱线的数值。
时域截断还会引起“栅栏效应” ,对周期信号⽽⾔,它是由于截断长度不等于周期信号的周期的整数倍⽽引起的。
因此避免“栅栏”效应的办法就是整周期截断。
综上所述,在信号数字化处理中应⼗分注意以下⼏点:1.为了避免“混叠” ,要求在采样时必须满⾜采样定理。
为了减少“泄漏” ,应适当增加截断长度和选择合适的窗对信号进⾏整周期截取,则能消除“栅栏数应” 。
增加截断长度,则可提⾼频率分辨率。
三、预习内容熟悉Matlab 语⾔、函数和使⽤⽅法;利⽤Matlab 所提供的FFT函数编写程序。
实验三 快速傅里叶变换
实验三 快速傅里叶变换一, 实验目的1, 掌握快速傅里叶正变换与反变换的原理及具体实现方法。
2, 编程实现长度为N=8的序列的快速傅里叶正变换与反变换。
3, 加深理解快速傅里叶变换在运算量上的优势。
4, 加深理解离散傅里叶变换的相乘和卷积性质。
二, 实验内容1. 已知连续周期信号()()()t t t x ππ18sin *210cos +=(1) 确定信号的基频Ω和基本周期P T ,以及分析时采用的采样点数N;(2) 当分析长度取0.5P T 和1.5P T 时,对x(t)采样,利用FFT 计算其幅度谱;对所得结果进行比较,总结应如何选取分析长度。
2. 设x(n)=()n R 8,分别计算()ωj e X 在[0,2π]上的32点和64点等间隔采样,并绘制幅频和相频特性图。
3. 设x(n)=[1 2 3 …..10],计算x(n)的DTFT 和FFT 。
三, 实验程序及图像:1.1 基频Ω=1,基波周期P T =1,N=32.1.2(1)长度取P T 时幅度谱n1=0:1:15;xn1=cos(2*pi*n1/9)+2*sin(2*pi*n1/5);subplot(2,1,1);stem(n1,xn1);xlabel('k');ylabel('xn1');xk1=fft(xn1);xk1=abs(xk1);subplot(2,1,2);stem(n1,xk1);xlabel('k');ylabel('X(K1)');051015-4-224k x n 105101505101520k X (K 1)(2)长度取1.5P T 时的幅度谱n2=0:1:47;xn2=cos(2*pi*n2/9)+2*sin(2*pi*n2/5);subplot(211);stem(n2,xn2);xlabel('k');ylabel('xn2');xk2=fft(xn2);xk2=abs(xk2);subplot(212);stem(n2,xk2);xlabel('k');ylabel('X(K2)');05101520253035404550-4-224k x n 205101520253035404550010203040k X (K 2)2.1 32点和等间隔采样的幅频和相频特性图xn=ones(1,8);xk2=fft(xn,32);subplot(2,1,1);stem((0:1:31)*2*pi/32,abs(xk2));xlabel('w');ylabel('X(K)')subplot(2,1,2);stem((0:1:31)*2*pi/32,angle(xk2));xlabel('w');ylabel('angle(X(k))'); 0123456702468w X (K )01234567-4-224w a n g l e (X (k ))2.2 64点等间隔采样的幅频和相频特性图xn=ones(1,8);xk2=fft(xn,64);subplot(2,1,1);stem((0:1:63)*2*pi/64,abs(xk2));xlabel('w');ylabel('X(K)')subplot(2,1,2);stem((0:1:63)*2*pi/64,angle(xk2));xlabel('w');ylabel('angle(X(k))');0123456702468w X (K )01234567-4-224w a n g l e (X (k ))3. x(n)的DTFT 和FFTxn=[0 1 2 3 4 5 6 7 8 9];[H,W]=freqz(xn,400,'whole');Hm=abs(H);Hp=angle(H);subplot(2,1,1);plot(W,Hm);gridxlabel('\omega/(rad/s)');ylabel('magnitude');title('离散时间系统的幅频响应')subplot(2,1,2);plot(W,Hp);gridxlabel('\omega/(rad/s)');ylabel('Phase');title('离散时间系统的相频响应')0123456700.050.10.150.2ω/(rad/s)m a g n i t u d e 离散时间系统的幅频响应01234567-4-224ω/(rad/s)P h a s e 离散时间系统的相频响应四、说明。
快速傅立叶变换FFT及其应用实验报告
实验一 离散时间系统的时域分析一、实验目的1. 运用MA TLAB 仿真一些简单的离散时间系统,并研究它们的时域特性。
2. 运用MA TLAB 中的卷积运算计算系统的输出序列,加深对离散系统的差分方程、冲激响应和卷积分析方法的理解。
二、实验原理离散时间系统其输入、输出关系可用以下差分方程描述:∑=∑=-=-M k k N k k k n x p k n y d 00][][当输入信号为冲激信号时,系统的输出记为系统单位冲激响应 ][][n h n →δ,则系统响应为如下的卷积计算式:∑∞-∞=-=*=m m n h m x n h n x n y ][][][][][ 当h[n]是有限长度的(n :[0,M])时,称系统为FIR 系统;反之,称系统为IIR 系统。
在MA TLAB 中,可以用函数y=Filter(p,d,x) 求解差分方程,也可以用函数 y=Conv(x,h)计算卷积。
例1clf;n=0:40;a=1;b=2;x1= 0.1*n;x2=sin(2*pi*n);x=a*x1+b*x2;num=[1, 0.5,3];den=[2 -3 0.1];ic=[0 0]; %设置零初始条件y1=filter(num,den,x1,ic); %计算输入为x1(n)时的输出y1(n)y2=filter(num,den,x2,ic); %计算输入为x2(n)时的输出y2(n)y=filter(num,den,x,ic); %计算输入为x (n)时的输出y(n)yt= a*y1+b*y2;%画出输出信号subplot(2,1,1)stem(n,y);ylabel(‘振幅’);title(‘加权输入a*x1+b*x2的输出’);subplot(2,1,2)stem(n,yt);ylabel(‘振幅’);title(‘加权输出a*y1+b*y2’);(一)、线性和非线性系统对线性离散时间系统,若)(1n y 和)(2n y 分别是输入序列)(1n x 和)(2n x 的响应,则输入)()()(21n bx n ax n x +=的输出响应为)()()(21n by n ay n y +=,即符合叠加性,其中对任意常量a 和b 以及任意输入)(1n x 和)(2n x 都成立,否则为非线性系统。
快速傅立叶变换FFT实验报告
一.实验内容用C++实现快速傅立叶变换FFT二.实验目的:更好的了解快速傅立叶变换的实质,用代码进行实现增强自己的编程能力。
三.实现思想在实现过程中采用一行一行的处理进行傅立叶变化,在处理的过程中采用W记号,由于计算机没有虚数这个基本的数据类型,所以用2个函数double CWvltDoc::W_image(int a, int b, int c)和double CWvltDoc::W_real(int a, int b ,int c)来返回W的虚部和实部,用2个数组*transient_real和*transient_image 来记录再频域化的过程中一行中的原始数据频域化后的实部和与虚部和。
在计算完一行像素值后,用该像素点的对应能量=transient_real[]2+transient_image[]2来修改原始数据的蓝色灰度值(后面用蓝色灰度值进行灰度化)。
这样处理完一行中所有的像素点之后用可视化算子进行可视化lpData[y*biAlign+3*i]=255*log10(1+fabs(lpData[y*biAlign+3 *i]))/log10(1+max);四.具体代码voidCWvltDoc::OnFft(){LPBITMAPINFOHEADER lpBitmapInfoHeader =(LPBITMAPINFOHEADER)(m_pBitmap+14);LPBITMAPFILEHEADER lpBitmapFileHeader = (LPBITMAPFILEHEADER)m_pBitmap;unsigned char *lpData = m_pBitmap + lpBitmapFileHeader->bfOffBits;unsigned long biHeight = lpBitmapInfoHeader->biHeight;unsigned long biWidth = lpBitmapInfoHeader->biWidth;unsigned long biAlign = ( biWidth*3+3) /4 *4;unsigned long bmSize = biHeight * biAlign;if (m_pTransfered == NULL)m_pTransfered = (unsigned char*)malloc(bmSize);if (m_pTransfered == NULL)return ;// TODO: Add your command handler code hereint x, y, cur;for (y = 0; y < (int)biHeight; y++) //处理第y行{double *transient_real=new double[biWidth];double *transient_image=new double[biWidth];for(x=0;x<(int)biWidth; x++) //第y行第x个数{double real=0;double image=0;for(inti=0;i<(int)biWidth;i++){real+=W_real(x,i,(int)biWidth)*double(lpData[y*biAlign+3*i]);image+=W_image(x,i,(int)biWidth)*double(lpData[y*biAlign+3*i]);}transient_real[x]=real;transient_image[x]=image;}for(inti=0;i<(int)biWidth; i++) //修改第y行的值lpData[y*biAlign+3*i]=sqrt(pow(transient_real[i],2)+pow(transient_i mage[i],2));delete []transient_real; //释放内存delete []transient_image;}for (y = 0; y < (int)biHeight; y++) //可视化算法{int max=0;for (x = 0; x < (int)biWidth; x++) //找到该行最大的像素值{cur = y*biAlign+3*x;if(fabs(lpData[cur])>max) max=fabs(lpData[cur]);}for(inti=0;i<(int)biWidth;i++)lpData[y*biAlign+3*i]=255*log10(1+fabs(lpData[y*biAlign+3*i]))/log 10(1+max);//可视化算子}for (y = 0; y < (int)biHeight; y++) //进行灰度化{for (x = 0; x < (int)biWidth; x++){cur = y*biAlign+3*x; //current pixelm_pTransfered[cur] = lpData[cur];m_pTransfered[cur+1] = lpData[cur];m_pTransfered[cur+2] = lpData[cur];}}UpdateAllViews(NULL);}doubleCWvltDoc::W_real(int a, int b ,int c){return cos((-2*3.1415*a*b)/c);}doubleCWvltDoc::W_image(int a, int b, int c){return sin((-2*3.1415*a*b)/c);}五.实验过程中遇到的问题及解决办法在具体实现时,开始没有想到灰度化,最后出来的结果还是彩色的图像,并且有的像素点的能量值可能大于255单可视化后一直是白色的点,解决办法是用可视化算子进行可视化,在实现的过程中一直修改的都是像素点的第一个灰度值即蓝色的灰度值,在用可视化算子可视化之后,再用蓝色的分量值进行灰度化即让其他的红色绿色灰度值都等于蓝色灰度值。
快速傅里叶变换实验报告
快速傅里叶变换实验报告快速傅里叶变换实验报告机械34班 刘攀 2013010558一、 基本信号(函数)的FFT 变换1. 000()sin()sin 2cos36x t t t t πωωω=+++ 1) 采样频率08s f f =,截断长度N=16;取02ωπ=rad/s ,则0f =1Hz ,s f =8Hz ,频率分辨率f ∆=s f f N ∆==0.5Hz 。
最高频率c f =30f =3Hz ,s f >2c f ,故满足采样定理,不会发生混叠现象。
截断长度02T T =,整周期截取,不会发生栅栏效应。
理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。
频谱图如下:幅值误差0A ∆=,相位误差0ϕ∆=。
2) 采样频率08s f f =,截断长度N=32;取02ωπ=rad/s ,则0f =1Hz ,s f =8Hz ,频率分辨率f ∆=s f f N ∆==0.25Hz 。
最高频率c f =30f =3Hz ,s f >2c f ,故满足采样定理,不会发生混叠现象。
截断长度04T T =,整周期截取,不会发生栅栏效应。
理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。
频谱图如下:幅值误差0A ∆=,相位误差0ϕ∆=。
2. 00()sin()sin116x t t t πωω=++ 1) 采样频率08s f f =,截断长度N=16;取02ωπ=rad/s ,则0f =1Hz ,s f =8Hz ,频率分辨率f ∆=s f f N ∆==0.5Hz 。
最高频率c f =110f =11Hz ,s f <2c f ,故不满足采样定理,会发生混叠现象。
截断长度02T T =,整周期截取,不会发生栅栏效应。
理论上有一定的泄漏,但在整周期 截取的情况下,旁瓣上的采样都约为 0,泄漏现象没有体现出来。
快速傅里叶变换实验报告
快速傅里叶变换实验报告班级:姓名:学号:快速傅里叶变换一.实验目的1.在理论学习的基础上,通过本实验加深对快速傅立叶变换的理解;2.熟悉并掌握按时间抽取FFT 算法的程序;3.了解应用FFT 进行信号频谱分析过程中可能出现的问题,例如混淆、泄漏、栅栏效应等,以便在实际中正确应用FFT 。
二.实验内容1.仔细分析教材第六章‘时间抽取法FFT ’的算法结构,编制出相应的用FFT 进行信号分析的C 语言(或MATLAB 语言)程序;2.用FFT 程序分析正弦信号()sin(2)[()(*)],(0)1y t f t u t u t N T t u π=---∞<<+∞=设分别在以下情况进行分析并讨论所得的结果:a ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.000625sb ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.005sc ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.0046875sd ) 信号频率f =50Hz ,采样点数N=32,采样间隔T=0.004se ) 信号频率f =50Hz ,采样点数N=64,采样间隔T=0.000625sf ) 信号频率f =250Hz ,采样点数N=32,采样间隔T=0.005sg ) 将c ) 信号后补32个0,做64点FFT三.实验要求1.记录下实验内容中各种情况下的X (k)值,做出频谱图并深入讨论结果,说明参数的变化对信号频谱产生哪些影响。
频谱只做模特性,模的最大值=1,全部归一化;2.打印出用C 语言(或MATLAB 语言)编写的FFT 源程序,并且在每一小段处加上详细的注释说明;3.用C 语言(或MATLAB 语言)编写FFT 程序时,要求采用人机界面形式:N , T , f 变量均由键盘输入,补零或不补零要求设置一开关来选择。
四.实验分析对于本实验进行快速傅里叶变换,依次需要对信号进行采样,补零(要求补零时),码位倒置,蝶形运算,归一化处理并作图。
快速傅里叶变换(含详细实验过程分析)
[实验2] 快速傅里叶变换 (FFT) 实现一、实验目的1、掌握FFT 算法和卷积运算的基本原理;2、掌握用C 语言编写DSP 程序的方法;3、了解利用FFT 算法在数字信号处理中的应用。
二、实验设备 1. 一台装有CCS 软件的计算机; 2. DSP 实验箱的TMS320C5410主控板; 3. DSP 硬件仿真器。
三、实验原理 (一)快速傅里叶变换傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的重要分析工具。
离散傅里叶变换(DFT )是傅里叶变换在离散系统中的表示形式。
但是DFT 的计算量非常大, FFT 就是DFT 的一种快速算法, FFT 将DFT 的N 2步运算减少至 ( N/2 )log 2N 步。
离散信号x(n)的傅里叶变换可以表示为∑=-=10][)(N N nk N W n x k X , Nj N e W /2π-=式中的W N 称为蝶形因子,利用它的对称性和周期性可以减少运算量。
一般而言,FFT 算法分为时间抽取(DIT )和频率抽取(DIF )两大类。
两者的区别是蝶形因子出现的位置不同,前者中蝶形因子出现在输入端,后者中出现在输出端。
本实验以时间抽取方法为例。
时间抽取FFT 是将N 点输入序列x(n) 按照偶数项和奇数项分解为偶序列和奇序列。
偶序列为:x(0), x(2), x(4),…, x(N-2);奇序列为:x(1), x(3), x(5),…, x(N-1)。
这样x(n) 的N 点DFT 可写成:()()∑++∑=-=+-=12/0)12(12/02122)(N n kn NN n nkNW n x Wn x k X考虑到W N 的性质,即2/)2//(22/)2(2][N N j N j N W e e W ===--ππ因此有:()()∑++∑=-=-=12/02/12/02/122)(N n nkN k NN n nkN W n x WWn x k X或者写成:()()12()kN X k X k W X k =+由于X 1(k) 与X 2(k) 的周期为N/2,并且利用W N 的对称性和周期性,即:kNNkNWW-=+2/可得:()()12(/2)kNX k N X k W X k+=-对X1(k) 与X2(k)继续以同样的方式分解下去,就可以使一个N点的DFT最终用一组2点的DFT来计算。
快速傅立叶变换(FFT)算法-DSP实验
快速傅立叶变换(FFT)算法实验摘要:FFT(Fast Fourier Transformation),即为快速傅里叶变换,是离散傅里叶变换的快速算法,它是根据离散傅里叶变换的奇、偶、虚、实等特性,对离散傅立叶变换的算法进行改进获得的。
这种算法大大减少了变换中的运算量,使得其在数字信号处理中有了广泛的运用。
本实验主要要求掌握在CCS环境下用窗函数法设计FFT快速傅里叶的原理和方法;并且熟悉FFT快速傅里叶特性;以及通过本次试验了解各种窗函数对快速傅里叶特性的影响等。
引言:快速傅里叶变换FFT是离散傅里叶变换DFT的一种快速算法。
起初DFT的计算在数字信号处理中就非常有用,但由于计算量太大,即使采用计算机也很难对问题进行实时处理,所以并没有得到真正的运用。
1965年J.W.库利和T.W.图基提出快速傅里叶变换,采用这种算法能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。
从此,对快速傅里叶变换(FFT)算法的研究便不断深入,数字信号处理这门新兴学科也随FFT的出现和发展而迅速发展。
根据对序列分解与选取方法的不同而产生了FFT的多种算法,基本算法是基2DIT和基2DIF。
FFT 的出现,使信号分析从时域分析向频域分析成为可能,极大地推动了信号分析在各领域的实际应用。
FFT在离散傅里叶反变换、线性卷积和线性相关等方面也有重要应用。
一、 实验原理:FFT 并不是一种新的变换,它是离散傅立叶变换(DFT )的一种快速算法。
由于我们在计算DFT 时一次复数乘法需用四次实数乘法和二次实数加法;一次复数加法则需二次实数加法。
每运算一个X (k )需要4N 次复数乘法及2N+2(N-1)=2(2N-1)次实数加法。
所以整个DFT 运算总共需要4N^2次实数乘法和N*2(2N-1)=2N(2N-1)次实数加法。
如此一来,计算时乘法次数和加法次数都是和N^2成正比的,当N 很大时,运算量是可观的,因而需要改进对DFT 的算法减少运算速度。
实验四 快速傅里叶变换 FFT
实验四 快速傅里叶变换(FFT )4.1实验目的1)加深对快速傅里叶变换(FFT )基本理论的理解;2)了解使用快速傅里叶变换(FFT )计算有限长序列和无限长序列信号频谱的方法;3)掌握用MATLAB 语言进行快速傅里叶变换时常用的子函数。
4.2实验原理1)用MATLAB 提供的子函数进行快速傅里叶变换从理论学习可知,DFT 是唯一在时域和频域均为离散序列的变换方法,它适用于有限长序列。
尽管这种变换方法是可以用于数值计算的,但如果只是简单的按照定义进行数据处理,当序列长度很大时,则将占用很大的内存空间,运算时间将很长。
快速傅里叶变换是用于DFT 运算的高效运算方法的统称,FFT 只是其中的一种。
FFT 主要有时域抽取算法和频域抽取算法,基本思想是将一个长度为N 的序列分解成多个短序列,如基2算法、基4算法等,大大缩短了运算的时间。
MATLAB 中提供了进行快速傅里叶变换(FFT )的子函数,用fft 计算DFT ,用ifft 计算IDFT 。
2)用FFT 计算有限长序列的频谱基本概念:一个序号从1n 到2n 的时域有限长序列()x n ,它的频谱()j X e ω定义为它的离散时间傅里叶变换,且在奈奎斯特(Nyquist )频率范围内有界并连续。
序列的长度为N ,则211N n n =−+。
计算()x n 的离散傅里叶变换(DFT )得到的是()j X e ω的N 个样本点()k j X e ω。
其中数字频率为k 2πω()d ωk k N== 式中:d ω为数字频率的分辨率;k 取对应-(N -1)/2到(N -1)/2区间的整数。
在实际使用中,往往要求计算出信号以模拟频率为横坐标的频谱,此时对应的模拟频率为s s 2π2πΩω/T ()()T k k k k kD N L==== 式中:D 为模拟频率的分辨率或频率间隔;T s 为采样信号的周期,Ts =1/Fs ;定义信号时域长度L =N T s 。
数字信号处理实验快速傅里叶变换
数字信号处理实验——快速傅里叶变换一、概述数字信号处理是一门涉及数字信号采集、处理和分析的学科。
在数字信号处理中,傅里叶变换是一个非常重要的工具,可以将时域信号转换为频域信号,帮助我们理解信号的频谱特性。
而快速傅里叶变换(FFT)是一种高效的计算傅里叶变换的算法,广泛应用于信号处理领域。
本文将介绍数字信号处理实验中快速傅里叶变换的基本原理、算法实现和实验过程。
二、快速傅里叶变换的原理快速傅里叶变换是一种通过递归分治策略减少计算量的傅里叶变换算法。
对于长度为N的离散信号序列,其快速傅里叶变换可以分解为若干个长度为N/2的子序列的快速傅里叶变换的线性组合。
通过这种分治的方法,可以将原始的傅里叶变换计算复杂度从O(N^2)降低到O(NlogN)。
三、快速傅里叶变换的算法实现快速傅里叶变换的算法实现主要分为递归方法和迭代方法两种。
递归方法是一种自顶向下的计算方法,通过将长度为N的信号序列分解为两个长度为N/2的子序列,并利用子序列的快速傅里叶变换计算原始序列的傅里叶变换。
迭代方法则是一种自底向上的计算方法,通过不断合并较短序列的傅里叶变换结果来计算较长序列的傅里叶变换。
在实际应用中,迭代方法通常比递归方法更加高效,特别是对于长度为2的幂次方的信号序列。
四、数字信号处理实验在数字信号处理实验中,快速傅里叶变换通常作为一种重要的信号处理工具使用。
实验过程中,我们首先需要准备一段离散的时域信号序列,然后利用快速傅里叶变换算法将其转换为频域信号序列。
通过对频域信号序列的分析,我们可以获取信号的频谱特性,包括频率成分、谐波分量等信息。
五、实验流程1. 准备一段离散的时域信号序列,可以是从传感器获取的实际物理信号,也可以是由数学函数生成的合成信号。
2. 对时域信号序列进行快速傅里叶变换,得到频域信号序列。
3. 分析频域信号序列,获取信号的频谱特性,如主要频率成分、谐波分量等。
4. 对频域信号序列进行反变换,将其恢复为时域信号序列进行进一步分析。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
快速傅里叶变换实验————————————————————————————————作者:————————————————————————————————日期:ﻩ实验七快速傅里叶变换实验2011010541ﻩ机14 林志杭一、实验目的1.加深对几个特殊概念的理解:“采样”……“混叠”;“窗函数”(截断)……“泄漏”;“非整周期截取”……“栅栏”。
2.加深理解如何才能避免“混叠”,减少“泄漏”,防止“栅栏”的方法和措施以及估计这些因素对频谱的影响。
3.对利用通用微型计算机及相应的FFT软件,实现频谱分析有一个初步的了解。
二、实验原理为了实现信号的数字化处理,利用计算机进行频谱分析――计算信号的频谱。
由于计算机只能进行有限的离散计算(即DFT),因此就要对连续的模拟信号进行采样和截断。
而这两个处理过程可能引起信号频谱的畸变,从而使DFT的计算结果与信号的实际频谱有误差。
有时由于采样和截断的处理不当,使计算出来的频谱完全失真。
因此在时域处理信号时要格外小心。
时域采样频率过低,将引起频域的“混叠”。
为了避免产生“混叠”,要求时域采样时必须满足采样定理,即:采样频率fs必须大于信号中最高频率fc的2倍(fs>2fc)。
因此在信号数字处理中,为避免混叠,依不同的信号选择合适的采样频率将是十分重要的。
频域的“泄漏”是由时域的截断引起的。
时域的截断使频域中本来集中的能量向它的邻域扩散(如由一个δ(f)变成一个sinc(f),而泄漏的旁瓣将影响其它谱线的数值。
时域截断还会引起“栅栏效应”,对周期信号而言,它是由于截断长度不等于周期信号的周期的整数倍而引起的。
因此避免“栅栏”效应的办法就是整周期截断。
综上所述,在信号数字化处理中应十分注意以下几点:1.为了避免“混叠”,要求在采样时必须满足采样定理。
为了减少“泄漏”,应适当增加截断长度和选择合适的窗对信号进行整周期截取,则能消除“栅栏数应”。
增加截断长度,则可提高频率分辨率。
三、预习内容熟悉Matlab语言、函数和使用方法;利用Matlab所提供的FFT函数编写程序。
四、实验内容及步骤调通所编写的程序,对下列信号〔函数〕进行离散FFT变换,根据题目的要求……FFT变换点数〔截断长度〕及采样频率,计算各点的傅里叶变换值,画出频谱图,对典型的谱线标出其幅值及相角。
(-)内容:1.ttttx3cos2sin)6sin()(ωωπω+++=代码:N=input('N='); n=input('n=');t=1:1:N;w=2*pi;x1=sin(w*(t-1)/n+pi/6)+sin(2*w*(t-1)/n)+cos(3*w*(t-1)/n); y=fft(x1);y=fftshift(y);an=angle(y)/pi*180;y=abs(y)/N;figure(1);bar(t,y,0.3);grid on;以下类似(1)采样频率fs=8f0,截断长度N=16幅频谱相频谱024681012141618 00.10.20.30.40.50.60.7①最高频率为3f 0,采样频率为8f 0,满足采样定理。
采样点数N=16,分辨率:05.0f Nf f s==∆。
关注频率为正负1、2、3倍频(2)fs=8 f0,N=32 幅频谱024681012141618-200-150-100-50050100150200相频谱①最高频率为3f 0 ,采样频率为8f 0,满足采样定理。
采样点数N=32,分辨051015202530350.10.20.30.40.50.60.705101520253035-200-150-100-50050100150200率:D f =f sN =0.25f 0。
关注频率为正负1、2、3倍频②由上述分析可见,两种采样均满足采样定理,不出现混叠。
③以上截取方式相当于添加了矩形窗函数,理论上存在泄漏效应但由于均为整周期截取(2倍及4倍原函数周期),故没有出现现泄露现象。
④由于整周期截取,未产生栅栏效应。
⑤误差分析:]3cos )3cos()22cos()22cos()3cos()3[cos(21)(000000t t t t t t t x ωωπωπωπωπω+-+-++-+-++-=明显关注频率为正负1、2、3倍频,理论上分解的幅值及相角与做FF T得到的值一样,幅值误差及相角误差均为零。
2.tt t x 0011sin )6sin()(ωπω++=(1)fs=8 f0,N=16幅频谱相频谱0246810121416180.10.20.30.40.50.60.7①最高频率为11f 0 ,采样频率为8f 0 ,不满足采样定理。
采样点数N=16,分辨率:D f =f sN =0.5f 0。
关注频率为正负1、11倍频(2)fs=32 f0,N=32幅频谱24681012141618-100-80-60-40-20020406080100相频谱①最高频率为11f 0 ,采样频率为32f 0 ,满足采样定理。
采样点数N=32,分辨率:510152025303500.050.10.150.20.250.30.350.40.450.505101520253035-100-80-60-40-20020406080100D f=fsN=f。
关注频率为正负1、11倍频②(1)中采样不满足采样定理,正负11倍频未取到,在正负3倍频处出现混叠,要消除混叠则可以增加采样频率。
(2)中采样满足采样定理,未出现混叠。
③以上截取方式相当于添加了矩形窗函数,理论上存在泄漏效应但由于均为整周期截取(2倍及1倍原函数周期),故没有出现泄露现象。
④由于整周期截取,未产生栅栏效应。
⑤误差分析:x(t)=12[cos(-wt+p3)+cos(wt-p3)+cos(-11wt+p2)+cos(11wt-p2)]明显关注频率为正负1、11倍频,理论上分解的幅值及相角与做FFT得到的值比较:(1)中采样正负1倍频的幅值相角均无误差,但由于未采到正负11倍频,故误差为100% 。
(2)中采样的幅值及相角误差均为0。
3.t t x10cos)(ω=(1)fs=8 f0,N=16 幅频谱相频谱024681012141618 00.050.10.150.20.250.30.350.40.450.5①最高频率为10f 0,采样频率为8f 0 ,满足采样定理。
采样点数N=16,分辨率:D f =f sN =0.5f 0。
关注频率为10倍频(2) fs=32 f0,N=32 幅频谱024681012141618-150-100-5050100150200相频谱①最高频率为10f 0,采样频率为32f 0 ,满足采样定理。
采样点数N=32,分辨510152025303500.050.10.150.20.250.30.350.40.450.505101520253035-150-100-5050100150率:D f =f sN =f 0关注频率为10倍频②由上述分析可见,2种采样均满足采样定理,未出现混叠。
③以上截取方式相当于添加了矩形窗函数,理论上存在泄漏效应,由于均未整周期截取,故出现了泄露现象。
除两条幅值较大的谱线外,还出现了一些幅值较小的谱线。
且由于(2)中窗宽度更小,泄露更加明显。
④由于非整周期截取,产生了栅栏效应,频谱图中只有整周期频率而无10 f 0。
且(2)中分辨率较低,相对(1)栅栏效应更明显。
要减少泄露效应,可以采用其他类型的窗函数,或将截断长度调整为整周期。
要避免栅栏效应,可以将截断长度调整为整周期。
然而由于该种x(t )中频率为无理数,难以做到整周期截断,因此不能完全避免泄露和栅栏效应。
⑤误差分析:x (t )=cos 10w 0t明显关注频率为10倍频,理论上分解的幅值及相角与做FFT 得到的值比较:实际所求并没有理论的频率,故用3倍频来近似。
理论、实际的幅值和相角分别为: (1)中:1、0.91,0deg 、57de g,(2)中:1、0.982,0deg、27.7deg 故误差: (1)中:deg5709.0=∆-=∆φA(2)中: deg7.27018.0=∆-=∆φA4.t t x 010cos )(ω=对信号加窗(Hanning Wi ndow )⎪⎩⎪⎨⎧〈〈-=00)2cos 1(21)(Tt T t t w π(1) fs=8 f0,N=16 幅频谱相频谱①最高频率为10f 0 ,采样频率为8f 0 ,满足采样定理。
采样点数N =16,分辨0246810121416180.050.10.150.20.25024681012141618-150-100-5050100150200率:D f=fsN=0.5f。
关注频率为10倍频(2) fs=32 f0,N=32幅频谱相频谱05101520253035 00.050.10.150.20.25①最高频率为10f 0 ,采样频率为32f 0 ,满足采样定理。
采样点数N=32,分辨率:D f =f sN =f 0。
关注频率为10倍频②2种采样均满足采样定理,未出现混叠。
③以上方式相当于添加了汉宁窗函数,理论上存在泄漏效应且由于均未整周期截取,故出现了泄露现象。
除两条幅值较大的谱线外,还出现了一些幅值较小的谱线。
且由于(2)中窗宽度更小,泄露更加明显。
要减少泄露效应,可以采用其他类型的窗函数,或将截断长度调整为整周期。
④由于非整周期截取,产生了栅栏效应,频谱图中只有整周期频率而无10 f 0。
且(2)中分辨率较低,相对(1)栅栏效应更明显。
要避免栅栏效应,可以将截断长度调整为整周期。
然而由于该种x(t )中频率为无理数,难以做到整周期截断,因此不能完全避免泄露和栅栏效应。
⑤误差分析:x (t )=cos 10w 0t明显关注频率为10倍频,理论上分解的幅值及相角与做F FT得到的值比较:实际所求并没有理论的频率,故用3倍频来近似。
理论、实际的幅值和相角分别为:(1)中:1、0.422,0deg 、56.6deg , (2)中:1、0.492,0de g、29.2deg 故误差:05101520253035-200-150-100-50050100150200(1)中: deg 6.56578.0=∆-=∆φA(2)中:deg 2.29508.0=∆-=∆φA 可见:在为按整周期截取时,采用汉宁窗函数所得到的结果相对矩形窗并没有得到改善。
5.)699.0sin()(0πω+=t t x (1) fs =8 f0,N =16幅频谱相频谱0246810121416180.10.20.30.40.50.60.7①最高频率为0.99f 0 ,采样频率为8f 0,满足采样定理。