DFT和FFT实验(上传)

合集下载

实验二 DFT(FFT)的应用—利用FFT实现快速卷积

实验二 DFT(FFT)的应用—利用FFT实现快速卷积

姓名:高铭遥 班级:16131701 学号:1120171450 成绩:实验二 DFT/FFT 的应用-利用FFT 实现快速卷积[实验目的]1.深刻理解DFT/FFT 的概念和性质,进一步掌握圆周卷积和线性卷积两者之间的关系。

2.掌握DFT/FFT 的应用。

理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好地利用FFT 进行数字信号处理。

[实验内容及要求]1.给定两个序列()[]2,1,1,2x n =,()[]1,1,1,1h n =--。

首先直接在时域计算两者的线性卷积;然后用FFT 快速计算二者的线性卷积,验证结果。

(1)线性卷积 程序代码:figure(1);N1=4; N2=4; xn=[2,1,1,2]; hn=[1,-1,-1,1];N=N1+N2-1;%卷积后的序列长度 yn=conv(xn,hn);%线性卷积 x=0:N-1;stem(x,yn);title('线性卷积'); 运行结果:(2)FFT 卷积快速卷积 程序代码: figure(1); n=0:1:3; m=0:1:3;N1=length(n);%xn 的序列长度 N2=length(m);%hn 的序列长度 xn=[2,1,1,2]; hn=[1,-1,-1,1];姓名:高铭遥 班级:16131701 学号:1120171450 成绩:N=N1+N2-1;%卷积后的序列长度XK=fft(xn,N);%xn 的离散傅里叶变换 HK=fft(hn,N);%hn 的离散傅里叶变换 YK=XK.*HK;yn=ifft(YK,N);%逆变换if all(imag(xn)==0)&&(all(imag(hn)==0))%实序列的循环卷积仍为实序列 yn=real(yn); endx=0:N-1;stem(x,yn);title('FFT 卷积'); 运行结果:结果分析:对比(1)和(2)直接线性卷积和FFT 快速卷积的结果可以验证,用FFT 线性卷积的结果是与直接卷积的结果相同的,FFT 可以实现快速卷积,提高运算速度。

快速傅立叶变换FFT实验报告

快速傅立叶变换FFT实验报告

快速傅立叶变换〔FFT〕算法试验一.试验目的1.加深对DFT 算法原理和根本性质的理解;2.生疏FFT 算法原理和FFT 子程序的应用;3.学习用FFT 对连续信号和时域信号进展谱分析的方法,了解可能消灭的分析误差及其缘由,以便在实际中正确应用FFT。

二.试验设备计算机,CCS 3.1 版软件,E300 试验箱,DSP 仿真器,导线三.根本原理1.离散傅立叶变换DFT 的定义:将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。

2.FFT 是DFT 的一种快速算法,将DFT 的N2 步运算削减为〔N/2〕logN 步,极大2的提高了运算的速度。

3.旋转因子的变化规律。

4.蝶形运算规律。

5.基2FFT 算法。

四.试验步骤1.E300 底板的开关SW4 的第1 位置ON,其余置OFF。

其余开关不用具体设置。

2.E300 板子上的SW7 开关的第1 位置OFF,其余位置ON3.阅读本试验所供给的样例子程序;4.运行CCS 软件,对样例程序进展跟踪,分析结果;记录必要的参数。

5.填写试验报告。

6.供给样例程序试验操作说明A.试验前预备用导线连接“Signal expansion Unit”中2 号孔接口“SIN”和“A/D 单元”的2 号孔接口“AD_IN0”。

〔试验承受的是外部的AD模块〕B.试验1.正确完成计算机、DSP 仿真器和试验箱的连接后,系统上电。

2.启动CCS3.1,Project/Open 翻开“algorithm\01_fft”子名目下“fft.pjt”工程文件;双击“fft.pjt”及“Source”可查看各源程序;加载“Debug\fft.out”;3.单击“Debug\Go main”进入到主程序,在主程序“flag=0;”处设置断点;4.单击“Debug \ Run”运行程序,或按F5 运行程序;程序将运行至断点处停顿;5.用View / Graph / Time/Frequency 翻开一个图形观看窗口;设置该观看图形窗口变量及参数;承受双踪观看在启始地址分别为px 和pz,长度为128,数值类型为16 位整型,p x:存放经A/D 转换后的输入信号;p z:对该信号进展FFT 变换的结果。

实验二用DFT及FFT进行谱分析

实验二用DFT及FFT进行谱分析

实验二用DFT及FFT进行谱分析实验二将使用DFT(离散傅里叶变换)和FFT(快速傅里叶变换)进行谱分析。

在谱分析中,我们将探索如何将时域信号转换为频域信号,并观察信号的频谱特征。

首先,我们需要了解DFT和FFT的基本概念。

DFT是一种将时域信号分解为频域信号的数学方法。

它将一个离散时间序列的N个样本转换为具有N个频率点的频率谱。

DFT在信号处理和谱分析中被广泛应用,但它的计算复杂度为O(N^2)。

为了解决DFT的计算复杂度问题,Cooley和Tukey提出了FFT算法,它是一种使用分治策略的快速计算DFT的方法。

FFT算法的计算复杂度为O(NlogN),使得谱分析在实际应用中更加可行。

在实验中,我们将使用Python编程语言和NumPy库来实现DFT和FFT,并进行信号的谱分析。

首先,我们需要生成一个具有不同频率成分的合成信号。

我们可以使用NumPy的arange函数生成一组时间点,然后使用sin函数生成不同频率的正弦波信号。

接下来,我们将实现DFT函数。

DFT将时域信号作为输入,并返回频域信号。

DFT的公式可以表示为:X(k) = Σ(x(n) * exp(-i*2πkn/N))其中,X(k)是频域信号的第k个频率点,x(n)是时域信号的第n个样本,N是信号的长度。

我们将使用循环计算DFT,但这种方法的计算复杂度为O(N^2)。

因此,我们将在实验过程中进行一些优化。

接下来,我们将实现FFT函数。

FFT函数将时域信号作为输入,并返回频域信号。

可以使用Cooley-Tukey的分治算法来快速计算FFT。

FFT的基本思想是将一个长度为N的信号分解为两个长度为N/2的子信号,然后逐步地将子信号分解为更小的子信号。

最后,将所有子信号重新组合以得到频域信号。

实验中,我们将使用递归的方式实现FFT算法。

首先,我们将信号分解为两个子信号,然后对每个子信号进行FFT计算。

最后,将两个子信号的FFT结果重新组合以得到频域信号。

离散信号的FT和DFT以及FFT

离散信号的FT和DFT以及FFT

实验2 离散信号的FT 和DFT 以及FFT实验目的:1、加深对离散信号的FT 和DFT 的及其相互关系的理解。

2、加深对离散信号的DFT 的理解及其FFT 算法的运用。

实验原理:序列x[n] 的DTFT 定义:∑=∞-∞=-n jn ωj ωx[n]e )X(eN 点序列x[n] 的DFT 定义:∑∑-=-=-===10122][][)(][N n knNN n kn Njk Nj W n x en x eX k X ππ101[][]N knN k x n X k W N --==∑利用旋转因子2jnk kn NNWeπ-=具有周期性,可以得到快速算法(FFT )。

在MATLAB 中,对形式为ωωωωωωωjN N j jM M j j j j e d e d d e p e p p e D e p e X ----++++++==......)()()(1010的DFT 可以用函数H=Freqz (num ,den ,w )计算;可以用函数U=fft (u ,N )和u=ifft (U ,N )计算N 点序列的DFT 正、反变换。

实验内容: 1、分别计算16点序列 150,165cos )(≤≤=n n n x π的16点和32点DFT ,绘出幅度谱图形,并绘出该序列的DTFT 图形。

2、 (1)2N 点实数序列⎪⎭⎪⎬⎫⎪⎩⎪⎨⎧-=+=n N n n Nn N n x 其它,012,...,2,1,0),192cos(21)72cos()(ππ N=64。

用一个64点的复数FFT 程序,一次算出N n x DFT k X 2)]([)(=,并绘出)(k X 。

(2)已知某序列)(n x 在单位圆上的N=64等分样点的Z 变换为63,...,2,1,0,8.011)()(/2=-==-k e k X z X Nk j k π。

用N 点IFFT 程序计算)]([)(_k X IDFT n x =,绘出和)(_n x 。

数字信号处理实验四

数字信号处理实验四

实验一:DFS 、DFT 与FFT一、实验内容2、已知某周期序列的主值序列为x(n)=[0,1,2,3,2,1,0],编程显示2个周期的序列波形。

要求:① 用傅里叶级数求信号的幅度谱和相位谱,并画出图形 ② 求傅里叶级数逆变换的图形,并与原序列进行比较。

N=7;xn=[0,1,2,3,2,1,0]; xn=[xn,xn]; n=0:2*N-1; k=0:2*N-1;Xk=xn*exp(-j*2*pi/N).^(n'*k); x=(Xk*exp(j*2*pi/N).^(n'*k))/N; subplot(2,2,1);stem(n,xn);title('x(n)');axis([-1,2*N,1.1*min(xn),1.1*max(xn)]); subplot(2,2,2);stem(n,abs(x));title('IDFS|X(k)|');axis([-1,2*N,1.1*min(x),1.1*max(x)]); subplot(2,2,3),stem(k,abs(Xk));title('|X(k)|');axis([-1,2*N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]); subplot(2,2,4),stem(k,angle(Xk));title('arg|X(k)|');axis([-1,2*N,1.1*min(angle(Xk)),1.1*max(angle(Xk))]);课程名称 数字信号 实验成绩 指导教师 王丽霞实 验 报 告院系 信息工程学院 班级 11专升本通信工程 学号 1103100068 姓名 周海霞日期 2011年10月17日12351051015|X (k)|510-2-1012arg|X (k)|3、已知有限长序列x(n)=[1,0.5,0,0.5,1,1,0.5,0],要求: ① 求该序列的DFT 、IDFT 的图形;xn=[1,0.5,0,0.5,1,1,0.5,0]; N=length(xn); n=0:N-1; k=0:N-1;Xk=xn*exp(-1i*2*pi/N).^(n'*k); x=(Xk*exp(1i*2*pi/N).^(n'*k))/N; subplot(2,2,1);stem(n,xn);title('x(n)');axis([-1,N,1.1*min(xn),1.1*max(xn)]); subplot(2,2,2);stem(n,abs(x));title('IDFT|X(k)|');axis([-1,N,1.1*min(x),1.1*max(x)]); subplot(2,2,3),stem(k,abs(Xk));title('|X(k)|');axis([-1,N,1.1*min(abs(Xk)),1.1*max(abs(Xk))]); subplot(2,2,4),stem(k,angle(Xk));title('arg|X(k)|');axis([-1,N,1.1*min(angle(Xk)),1.1*max(angle(Xk))]);0.510.5124681234|X (k)|2468-2-1012arg|X (k)|② 用FFT 算法求该序列的DFT 、IDFT 的图形;xn=[1,0.5,0,0.5,1,1,0.5,0]; N=length(xn);subplot(2,2,1);stem(n,xn); title('x(n)'); k=0:N-1; Xk=fft(xn,N);subplot(2,1,2);stem(k,abs(Xk)); title('Xk=DFT(xn)'); xn1=ifft(Xk,N);subplot(2,2,2);stem(n,xn1);title('x(n)=IDFT(Xk)');x(n)1234567X k=DFT(xn)x(n)=IDFT(X k)③ 假定采用频率Fs=20Hz ,序列长度N 分别取8、32和64,用FFT 计算其幅度谱和相位谱。

FFT算法分析实验实验报告

FFT算法分析实验实验报告

FFT算法分析实验实验报告一、实验目的快速傅里叶变换(Fast Fourier Transform,FFT)是数字信号处理中一种非常重要的算法。

本次实验的目的在于深入理解 FFT 算法的基本原理、性能特点,并通过实际编程实现和实验数据分析,掌握 FFT 算法在频谱分析中的应用。

二、实验原理FFT 算法是离散傅里叶变换(Discrete Fourier Transform,DFT)的快速计算方法。

DFT 的定义为:对于长度为 N 的序列 x(n),其 DFT 为X(k) =∑n=0 到 N-1 x(n) e^(j 2π k n / N) ,其中 j 为虚数单位。

FFT 算法基于分治法的思想,将 N 点 DFT 分解为多个较小规模的DFT,从而大大减少了计算量。

常见的 FFT 算法有基 2 算法、基 4 算法等。

三、实验环境本次实验使用的编程语言为 Python,主要依赖 numpy 库来实现 FFT 计算和相关的数据处理。

四、实验步骤1、生成测试信号首先,生成一个包含不同频率成分的正弦波叠加信号,例如100Hz、200Hz 和 300Hz 的正弦波。

设定采样频率为 1000Hz,采样时间为 1 秒,以获取足够的采样点进行分析。

2、进行 FFT 计算使用 numpy 库中的 fft 函数对生成的测试信号进行 FFT 变换。

3、频谱分析计算 FFT 结果的幅度谱和相位谱。

通过幅度谱确定信号中各个频率成分的强度。

4、误差分析与理论上的频率成分进行对比,计算误差。

五、实验结果与分析1、幅度谱分析观察到在 100Hz、200Hz 和 300Hz 附近出现明显的峰值,对应于生成信号中的频率成分。

峰值的大小反映了相应频率成分的强度。

2、相位谱分析相位谱显示了各个频率成分的相位信息。

3、误差分析计算得到的频率与理论值相比,存在一定的误差,但在可接受范围内。

误差主要来源于采样过程中的量化误差以及 FFT 算法本身的近似处理。

fft上机实验报告

fft上机实验报告

fft上机实验报告FFT上机实验报告引言:傅里叶变换(Fourier Transform)是一种重要的数学工具,可以将一个函数在时域中的表示转换为频域中的表示。

在信号处理、图像处理、通信等领域中,傅里叶变换被广泛应用。

本文将介绍在上机实验中所学习到的快速傅里叶变换(Fast Fourier Transform,FFT)算法及其应用。

一、实验目的本次上机实验的主要目的是通过实际操作,深入了解FFT算法的原理和应用。

具体目标包括:掌握FFT算法的基本思想和计算步骤;理解FFT算法的时间复杂度和空间复杂度;学会使用MATLAB等工具进行FFT算法的实现和应用。

二、实验过程1. 理论知识准备在进行FFT算法的实验之前,我们首先需要了解傅里叶变换的基本原理和FFT 算法的推导过程。

傅里叶变换可以将一个连续函数表示为一系列正弦和余弦函数的叠加,从而揭示了信号的频域特性。

而FFT算法则是一种高效计算离散傅里叶变换(Discrete Fourier Transform,DFT)的方法,可以大大减少计算复杂度。

2. 实验准备在实验开始之前,我们需要准备一些实验所需的工具和数据。

首先,我们需要安装MATLAB软件,并确保其正常运行。

其次,我们需要准备一些信号数据,可以是声音、图像等。

本次实验中,我们选择了一段音频作为实验数据。

3. 实验步骤(1)导入数据首先,我们需要将实验数据导入到MATLAB中。

通过使用MATLAB提供的读取音频文件的函数,我们可以将音频数据读取为一个向量。

(2)进行FFT计算接下来,我们可以使用MATLAB提供的fft函数对导入的音频数据进行FFT计算。

FFT函数将返回一个复数数组,表示输入信号在频域中的表示。

(3)频域分析得到频域表示后,我们可以对信号进行频域分析。

通过计算频谱、功率谱等参数,我们可以了解信号的频率分布、能量分布等特性。

此外,还可以进行滤波、降噪等操作,以实现对信号的处理和改变。

数字信号处理实验二DFT 和FFT

数字信号处理实验二DFT 和FFT

实验二DFT 和FFT一.实验内容1.认真复习周期序列DFS、有限长序列DFT 的概念、旋转因子的定义、以及DFS 和DFT的性质等有关内容;复习基2-FFT 的基本算法,混合基-FFT 的基本算法、Chirp-Z 变换的算法等快速傅立叶变换的方法。

2.掌握有限长序列的循环移位、循环卷积的方法,对序列共轭对称性的含义和相关内容加深理解和掌握,掌握利用DFT 分析序列的频谱特性的基本方法。

3.掌握FFT 算法的基本原理和方法、Chirp-Z 变换的基本原理和方法,掌握利用FFT 分析序列的频谱特性的方法。

4.熟悉利用MATLAB 进行序列的DFT、FFT 的分析方法。

二.实验内容a. 设周期序列x~(n)={ …,0,1,2,3,0,1,2,3,0,1,2,3,….},求该序列的离散傅立叶级数X(k) = DFS[x~(n)],并画出DFS 的幅度特性。

在matlab中新建函数dfs:function [Xk]=dfs(xn,N)n=0:1:N-1;k=0:1:N-1;Wn=exp(-j*2*pi/N);nk=n'*k;Wnk=Wn.^nk;Xk=xn*Wnk;在matlab中输入以下代码:xn=[0,1,2,3];k=0:1:3;N=4;Xk=dfs(xn,N);y=abs(Xk);stem(k,y);title('周期序列的离散傅立叶级数');生成图像如下:由定义可知,对于周期序列,根据离散傅里叶级数公式即可求出,实验中显示了一个周期的傅里叶级数。

b. 设周期方波序列为x(n)=⎩⎨⎧+≤≤++≤≤)1-1)N (m n (01)-L mN n 1(mN L mN (m=0,,....2,1±±)其中N 为基波周期,L/N 是占空比。

(1) 用L 和N 求| X (k) |的表达式;(2) 当L 和N 分别为:L=5,N=20;L=5,N=40;L=5,N=60 以及L=7,N=60 时画出DFS 的幅度谱;(3) 对以上结果进行讨论,总结其特点和规律。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DFT和FFT实验一、实验目的和要求1、掌握DFT变换2、掌握DFT性质3、掌握快速傅立叶变换(FFT)二、实验内容和原理1、实验内容1)••2)3)其中,randn(n)为高斯白噪声。

m=2,3,44)研究高密度频谱和高分辨率频谱。

•••采集数据长度N=16点,补零到256点,做N=256点的FFT,并画出幅频特性。

•采集数据长度N=256点,做N=256点的FFT,并画出幅频特性。

观察三种不同频率特性图,分析和比较它们的特点以及形成的原因。

2、实验原理1)DFT序列x(n)的离散时间傅里叶变换(DTFT如果x(n)为因果有限长序列,n=0,1,...,N-1,则x(n)的DTFTx(n)的离散傅里叶变换(DFT序列的N点DFT是序列DTFT在频率区间[0,2π]上的N点灯间隔采样,采样间隔为2π/N。

通过DFT,可以完成由一组有限个信号采样值x(n)直接计算得到一组有限个频谱采样值X(k)。

X(k)的幅度谱为R和I分别表示取实部、虚部的运算。

X(k)的相位谱为离散傅里叶反变换(IDFT2)FFT快速傅里叶变换(FFT )是DFT 的快速算法,并不是一个新的映射。

FFT 和对称性以及一些特殊值来减少DFT 的运算量,可使DFT 的运算量下降几个数量级,从而使数字信号处理的速度大大提高。

若信号是连续信号,用FFT 进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后就可以用FFT 来对连续信号进行谱分析。

为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器,且抗混叠滤波器的截止频率不得高于与采样频率的一半。

比较DFT和IDFT 的定义,两者的区别仅在于指数因子的指数部分的符号差异和幅度尺度变换,因此可用FFT 算法来计算IDFT 。

三、主要仪器设备 Matlab四、操作方法和实验步骤 1、认真分析原函数,取点2、用matlab 编写程序,运行程序得出结果五、实验数据记录、处理和分析1•• 【解答】思路:这是一道DFT 的题,按照题目要求只需要取11个点即可。

第(1)小题 M 文件源代码N=11; %取点个数为11个 j=sqrt(-1); %定义j 为复数单位f=inline('(0.9*exp(j*pi/3))^n','n'); %定义一个函数f(n)W=0:2*pi/1000:2*pi; %定义离散域的基本频率W 为数组,间距为2*pi/1000 Xw=zeros(size(W)); %定义一个与W 位数相等的数组 for n=0:N-1Xw=Xw+f(n)*exp(-j*W*n);end %对f(n)函数做DFT 变换 xn=[];for n=0:N-1xn(n+1)=f(n);end %将f(n)的值放进数组xn 里面,便于最后画出xn 的图像 magXw=abs(Xw); %定义一个数组magXw,将abw(Xw)的值赋给它 angleXw= angle(Xw); %定义数组angleXw,将angle(Xw)的值赋给它 figure(1); plot(xn,'.-');xlabel('n'); ylabel('x(n)'); %画出xn 的图 figure(2); k=0:1:N-1;plot(W,magXw,'-')xlabel('W'); ylabel('|X(W)|'); %画出magXw 的图像 figure(3);plot(W,angleXw,'-');xlabel('W'); ylabel('angle(X(W))'); %画出angleXw 的图像 运行结果 xn 图像:X(W)的幅度图nx (n )X(W)的相位图【分析】X (Ω)=∑(0.9ejπ3)n·e−jΩn10n=0=1−(0.9e j(π3−Ω))111−0.9e j(π3−Ω),|X (Ω)|=|1−(0.9e j(π3−Ω))11||1−0.9e j(π3−Ω)|可见X (Ω)的幅度频谱有11-1=10个极大,11-1=10个极小。

而X (Ω)的相位则有11-1=10个极大,11-1=10个极小,并且相位在-π2和π2之间摆动。

第(2)小题 M 文件源代码01234567W|X (W )|Wa n g l e (X (W ))N=10; %取点个数为11个 j=sqrt(-1); %定义j 为复数单位 f=inline('2^n','n'); %定义一个函数f(n)W=0:2*pi/1000:2*pi; %定义离散域的基本频率,将其设置为间距为2*pi/1000的数组 Xw=zeros(size(W)); %定义一个数组Xw ,位数与W 相等 for n=-N:NXw=Xw+f(n)*exp(-j*W*n);end %对f(n)函数做DTFT 变换 xn=[]; %定义一个数组xn for n=-N:Nxn(n+1+N)=f(n);end %将f(n)的值放进数组xn 里面,便于最后画出xn 的图像 magXw=abs(Xw); %将X(W)的模值放进数组magXw angleXw=angle(Xw); %将X(W)的相位放进数组magXw figure(1); plot(xn,'.-');xlabel('n'); ylabel('x(n)'); %画出xn 的图 figure(2);plot(W,magXw,'-')xlabel('W'); ylabel('|X(w)|'); %画出magXw 的图像 figure(3);plot(W,angleXw,'-');xlabel('W'); ylabel('angle(X(w))'); %画出angleXw 的图像 xn 图像X(W)的幅度图nx (n )X(W)的相位图【分析】X (Ω)=∑2n ·e −jΩn 10n=−10=(2e −jΩ)−10(1−(2e −jΩ)21)1−2e −jΩ,|X (Ω)|=2−10|1−(2e −jΩ)21||1−2e −jΩ|可见X (Ω)的幅度有一个极大值,一个极小值。

X (Ω)的相位在−π到π之间来回振动,并且中间出现突变的情况。

2)【解答】01234567W|X (w )|Wa n g l e (X (w ))思路:这是一道DFT的题,按照题目要求只需要取51个点即可。

M文件源代码N=51; %取点个数为50个j=sqrt(-1); %定义j为复数单位f=inline('cos(0.82*pi*n)+2*sin(pi*n)','n'); %定义一个函数f(n)Xk=[]; %定义一个数组XkW=2*pi/N; %定义离散域的基本频率for k=1:NXk(k)=0;for n=0:N-1Xk(k)=Xk(k)+f(n)*exp(-j*(k-1)*W*n);endend %对f(n)函数做DFT变换xn=[]; %定义一个数组xnfor n=0:N-1xn(n+1)=f(n);end %将f(n)的值放进数组xn里面,便于最后画出xn的图像magXk=[]; %定义一个数组magXkfor k=1:NmagXk(k)=abs(Xk(k));end %将X(kW)的模值放进数组magXkangleXk=[]; %定义数组angleXkfor k=1:NangleXk(k)=angle(Xk(k));end %将X(kW)的相位放进数组magXkfigure(1);plot(xn,'.-');xlabel('n'); ylabel('x(n)'); %画出xn的图figure(2);k=0:1:N-1;plot(k,magXk,'+-')xlabel('k'); ylabel('|X(k)|'); %画出magXk的图像figure(3);plot(k,angleXk,'x-');xlabel('k'); ylabel('angle(X(k))'); %画出angleXk的图像命令窗口中的运行及其结果:xn图像Xk 的幅度图Xk 的相位图102030405060-1-0.8-0.6-0.4-0.200.20.40.60.81nx (n )k|X (k )|【分析】X (k )=∑(cos0.82πn +2sinπn )e −jk 2π51n=∑e j0.82πn +e −j0.82πn 250n=050n=0e −jk 2π51n=1∑(e j(0.82π−k 2π51)n +e −j(0.82π+k 2π51)n)50n=0=1(1−(ej(0.82π−k 2π51))511−e j(0.82π−k 2π51)+1−(e−j(0.82π+k 2π51))511−e −j(0.82π+k 2π51)) 可见X (k )的幅度频谱拥有两个峰值,X (k )的相位频谱在−π到π之间来回振动,且中间存在3个台阶式的向下跳变,一个台阶式的向上跳变。

3.其中,randn(n)为高斯白噪声。

m=2,3,4【解答】思路:计算DFT 算法和FFT 算法的运行时间可以使用的etime 函数 M 文件源代码m=input('m=:'); %输入m 值N=4^m; %求出所取得x(n)的点数 j=sqrt(-1); %定义j 为复数单位 arr=[]; %定义一个数组arrW=2*pi/N; %定义离散域的基本频率 dft_time=0; %定义dft_time 为0t1=clock; %此处为dft 计算的时间起点 for k=1:N arr(k)=0; for n=0:N-1ka n g l e (X (k ))arr(k)=arr(k)+(sin(0.2*pi*n)+rand(1))*exp(-j*(k-1)*W*n);endend %对x(n)做dft变换dft_time=etime(clock,t1) %得出dft变换所花的时间Wn=exp(-j*2*pi/N); %求出旋转因子xn=zeros(1,N); %定义一个N位数组fft_time=0; %定义fft_time为0t2=clock; %此处为fft计算的时间起点for n=0:N-1xn(n+1)=sin(0.2*pi*n)+randn(1); %将x(n)的值放入数组xn中endn1=fliplr(dec2bin([0:N-1])); %码位倒置步骤1:将码位转换为二进制,再进行倒序n2=[bin2dec(n1)]; %码位倒置步骤2:将码位转换为十进制后翻转x=zeros(2*m+1,N); %定义一个(2m+1)×N的矩阵for i=1:Nx(1,i)=xn(n2(i)+1);end %将码位倒序后的值重新赋值进入矩阵第一列for i=1:2*m %进行第v级计算Number=2^(2*m-i);Interval_of_Unit=2^(i-1); %每组中每个计算单元的间距Interval_of_Group=2^i; %每组之间的间距Wnr=[]; %定义一个新数组Wnrfor r=1:2^(i-1)Wnr(r)=Wn^((r-1)*N/2^i);end %将每一级运算的指数因子赋值给Wnrfor k=0:Number-1for l=1:2^(i-1)x(i+1,l+k*2^i)=x(i,l+k*2^i)+Wnr(l)*x(i,l+k*2^i+2^(i-1));x(i+1,l+k*2^i+2^(i-1))=x(i,l+k*2^i)-Wnr(l)*x(i,l+k*2^i+2^(i-1));endendend %对x(n)做fft变换fft_time=etime(clock,t2) %得出dft变换所需要的时间命令窗口中的运行及其结果m=:2dft_time =fft_time =m=:3dft_time =0.02200000000000fft_time =0.00400000000000m=:4dft_time =0.31900000000000fft_time =0.01800000000000【分析】从实验结果可以看出,对于同样的x(n),FFT变换的计算时间小于DFT变换的计算时间,并且随着取样点数的增多,这种差距越来越明显。

相关文档
最新文档