数字信号处理 实验一 FFT变换及其应用
FFT的算法原理应用

FFT的算法原理应用FFT(快速傅里叶变换)是一种用于计算傅里叶变换的算法,它通过分治法和迭代的方式,将O(n^2)时间复杂度的离散傅里叶变换(DFT)算法优化到O(nlogn)的时间复杂度。
FFT算法在信号处理、图像处理、通信系统等领域应用广泛。
1.算法原理:FFT算法的核心思想是将一个长度为n的序列分解为两个长度为n/2的子序列,然后通过递归的方式对子序列进行FFT计算。
在将子序列的FFT结果合并时,利用了傅里叶变换的对称性质,即可以通过递归的方式高效地计算出整个序列的FFT结果。
具体来说,FFT算法可以分为升序计算和降序计算两个过程。
升序计算是将原始序列转换为频域序列的过程,而降序计算则是将频域序列转换回原始序列的过程。
在升序计算中,序列的奇数项和偶数项被分开计算,而在降序计算中,FFT结果被奇数项和偶数项的和和差重新组合成原始序列。
2.算法应用:2.1信号处理:FFT算法在数字信号处理中广泛应用,可以将信号从时域转换为频域,从而实现滤波、降噪、频谱分析等操作。
例如,在音频处理中,可以利用FFT算法对音频信号进行频谱分析,从而实现声音的等化处理或实时频谱显示。
2.2图像处理:FFT算法在图像处理中也有重要的应用。
图像的二维傅里叶变换可以将图像从空间域转换为频域,从而实现图像的频域滤波、频域增强等操作。
例如,可以通过对图像进行傅里叶变换,找到图像中的频域特征,进而实现图像的降噪、边缘检测等功能。
2.3通信系统:FFT算法在通信系统中也有广泛应用,特别是在OFDM (正交频分复用)系统中。
OFDM系统可以将高速数据流分成多个低速子流,然后利用FFT对每一个子流进行频域调制,再通过并行传输的方式将它们叠加在一起。
这样可以提高信号的传输效率和容量,降低频率的干扰。
2.4数据压缩:FFT算法在数据压缩领域也得到了广泛应用。
例如,在JPEG图像压缩算法中,就使用了离散余弦变换(DCT),它可看做是FFT的一种变种。
数字信号处理实验 快速傅里叶变换及其应用汇总

数字信号处理实验报告第一次实验:快速傅立叶变换(FFT)及其应用王宇阳04011345 一.实验目的:(1)在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉MATLAB中的有关函数。
(2)应用FFT对典型信号进行频谱分析。
(3)了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT。
(4)应用FFT实现序列的线性卷积和相关。
二.实验原理:(1)混叠:采样序列的频谱是被采样信号频谱的周期延拓,当采样频率不满足奈奎斯特采样定理的时候,就会发生混叠,使得刺痒后的序列信号的频谱不能真实的反映原采样信号的频谱。
(2)泄露:根据理论分析,一个时间的信号其频带宽度为无限,一个时间无限的信号其频带宽度则为有限。
因此对一个时间有限的信号,应用DFT进行分析,频谱混叠难以避免。
对一个时间无限的信号虽然频带有限,但在实际运算中,时间总是取有限值,在将信号截断的过程中,出现了分散的扩展谱线的现象,称之为频谱泄露或功率泄露。
(3)栅栏效应:DFT是对单位圆上Z变换的均匀采样,所以它不可能将频谱视为一个连续函数,就在一定意义上看,用DFT来观察频谱就好象通过一个栅栏来观看一个景象一样,只能在离散点上看到真实的频谱,这样就有可能发生一些频谱的峰点和谷点被“尖桩的栅栏”所挡住,不能被我们观察到。
(4)圆周卷积:把序列X(N)分布在N等份的圆周上,而序列Y(N)经反摺后也分布在另一个具有N等份的同心圆的圆周上。
两圆上对应的数两量两相乘求和,就得到全部卷积序列。
这个卷积过程称做圆周卷积。
(5)互相关函数反映了两个序列X(N)和Y(N)的相似程度,用FFT可以很快的计算互相关函数。
三.实验内容:实验中用到的函数序列:(a)Gaussian序列Xa(n)=exp(-(n-p).^2)/q),0=<n=<15=0,其他(b)衰减正弦序列X(b)=exp(-an)*sin(2pi*fn),0=<n=<15=0,其他(c)三角波序列Xb(n)=n,0=<n=<3=8-n,4=<n=<7=0,其他(d)反三角波序列Xc(n)=4-n,0=<n=<3=n-4,4=<n=<7=0,其他上机实验内容:1.观察高斯序列的时域和幅频特性,固定信号xa(n)中参数p=8,改变q的值,使q分别等于2,4,8,观察他们的时域和幅频特性,了解当q取不同值时,对信号序列的时域和幅频特性影响;改变p,使p分别等于8,13,14,观察参数p变化对信号序列的时域和幅频特性影响,注意p等于多少时,会发生明显的泄漏现象,混叠是否也随之出现?记录实验中观察到的现象,绘出相应的时域序列和幅频特性曲线。
数字信号处理FFT

数字信号处理FFT数字信号处理中的FFT算法数字信号处理(Digital Signal Processing, DSP)是一门研究如何以数字方式对信号进行处理和分析的学科。
其中,FFT(Fast Fourier Transform)算法是数字信号处理中最为重要和常用的算法之一。
本文将介绍FFT算法的原理、应用以及一些常见的优化方法。
一、FFT算法原理FFT算法是一种高效地计算离散傅里叶变换(Discrete Fourier Transform, DFT)的方法。
DFT是将一个离散信号从时域(time domain)变换到频域(frequency domain)的过程。
在频域中,我们可以分析信号的频率成分和振幅,从而得到信号的频谱图。
FFT算法的原理是利用对称性和重复计算的方式,将一个需要O(N^2)次乘法运算的DFT计算降低到O(N*logN)的时间复杂度。
通过将N个点的DFT分解成多个规模较小的DFT计算,最终得到原始信号的频域表示。
二、FFT算法应用FFT算法在信号处理领域有着广泛的应用,其中包括但不限于以下几个方面:1. 信号的频谱分析:通过FFT算法,可以将时域信号转化为频域信号,进而分析信号的频率成分和振幅,为后续的信号处理提供依据。
例如,在音频处理中,我们可以通过FFT算法分析音频信号的频谱,用于音乐合成、音频降噪等应用。
2. 图像处理:图像信号也可以看作是一种二维信号,通过对图像的行、列分别进行FFT变换,可以得到图像的频域表示。
在图像处理中,FFT算法被广泛应用于图像增强、滤波、压缩等方面。
3. 通信系统:FFT算法在OFDM(正交频分复用)等通信系统中被广泛应用。
在OFDM系统中,多个子载波信号通过FFT变换合并在一起,实现信号的同时传输和接收。
4. 音频、视频压缩:在音频、视频等信号的压缩算法中,FFT算法也扮演着重要的角色。
通过对音频、视频信号进行频域分析,可以找到信号中能量较小的部分,并将其抛弃从而达到压缩的效果。
数字信号处理实验:基于FFT谱分析中的误差分析及处理

学生实验报告2020 —— 2021 学年第 1学期实验课程数字信号处理实验地点主教414学院电子信息工程学院专业通信工程学号姓名实验项目基于FFT谱分析中的误差分析及处理实验时间10.20 实验台号预习成绩报告成绩一、实验目的1.在理论学习的基础上,通过本次实验,加深对快速傅里叶变换的理解,熟悉FFT算法及其程序的编写2.熟悉应用FFT对典型信号进行频谱分析的方法。
3.了解应用FFT对非周期信号进行频谱分析所面临的问题并掌握其解决方法。
二、实验原理对非周期序列进行频谱分析应注意的问题1、混叠三、预习内容1.混叠,泄漏,栅栏效应的概念2.应用FFT对典型信号进行频谱分析的方法3.应用FFT对非周期信号进行频谱分析所面临的问题并掌握其解决方法4.傅里叶变换的相关性质四、实验内容(一)完成如下实验内容的学习和调试1. 对有限长序列进行谱分析(2)将上述有限长序列x(n)[1,2,3,2,1]末尾补零到N=1000点,使用FFT计算其频谱。
2. 对无限长序列进行谱分析用FFT进行无限长序列的频谱分析,首先要将无限长序列截断成一个有限长序列。
序列长度的取值对频谱有较大的影响,带来的问题是引起频谱的泄漏和波动。
已知一个无限长序列为, x(n)=0(n<0),采样频率Fs=20Hz,要求用FFT求其频谱。
3. 对模拟信号进行谱分析(一)用FFT计算下列连续时间信号的频谱,并观察选择不同的Ts和N值对频谱特性的影响。
(二)记录实验图形结果并结合基本原理,理解每一条语句的含义;(三)讨论有限长序列谱分析时增加分辨率的措施和方法;(四)谈论连续信号谱分析时不同时域采样频率及点数N不同时对频谱分析的影响;(五)对模拟信号进行谱分析,选择采样频率Fs=64Hz,变换区间长度N分别取8、32和64,用FFT分析其频谱。
记录结果并对比、分析和讨论。
五、实验步骤Fs=10;xn=[1,2,3,2,1];N=length(xn);D=2*pi*Fs/N;k=floor(-(N-1)/2:(N-1)/2);X=fftshift(fft(xn,N));subplot(1,2,1);plot(k*D,abs(X),'o:');title('幅度频谱');xlabel('rad/s');subplot(1,2,2);plot(k*D,angle(X),'o:');title('相位频谱');xlabel('rad/s');Fs=10;N=1000;xn=[1,2,3,2,1];Nx=length(xn);xn=[1,2,3,2,1,zeros(1,N-Nx-1)];D=2*pi*Fs/N;k=floor(-(N-1)/2:(N-1)/2);X=fftshift(fft(xn,N));subplot(1,2,1);plot(k*D,abs(X)); title('幅度频谱');xlabel('rad/s'); subplot(1,2,2);plot(k*D,angle(X)); title('相位频谱');xlabel('rad/s');Fs=20;C=[8,16,128];for r=0:2;N=C(r+1);n=0:N-1;xn=exp(-0.5*n);D=2*pi*Fs/N;k=floor(-(N-1)/2:(N-1)/2);X=fftshift(fft(xn,N));subplot(3,2,2*r+1); plot(k*D,abs(X));axis([-80,80,0,3]);subplot(3,2,2*r+2);stairs(k*D,angle(X));axis([-80,80,-1,1]);endT0=[0.5,0.25,0.125,0.125];N0=[256,256,2048,2048];for r=1:4;Ts=T0(r);N=N0(r);n=0:N-1;xn=exp(-0.5*n);D=2*pi/(N*Ts);xa=exp(-0.01*n*Ts).*(sin(2*n*Ts)+sin(2.1*n*Ts)+sin(2.2*n*Ts)); k=floor(-(N-1)/2:(N-1)/2);Xa=Ts*fftshift(fft(xa,N));[r,Xa(1)]subplot(2,2,r);plot(k*D,abs(Xa));axis([1,3,1.1*min(abs(Xa)),1.1*max(abs(Xa))]);end六、总结分析1.离散时间信号的FFT变换,其频谱是以抽样点数N为周期的周期延拓2.当N2为N1的整数倍时,以为抽样点数的抽样的图形就是在以为抽样点数的抽样图形的每两个点之间插入N2/N1个点的谱图形。
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 算法本身的近似处理。
快速 Fourier 变换(FFT)及其应用

0.0395 0.0538 0.0098 0.0245 -0.0054 -0.0737 -0.0881 -0.1385 -0.1163
Columns 46 through 54
-0.0813 -0.0359 -0.0453 -0.0418 -0.0116 -0.0676 -0.0672 -0.0403 -0.0966
x=ifft(X,64);
n=k;
stem(n,abs(x))
grid
运行结果:
3、对实验现象、数据及观察结果的分析与讨论:
图一的理论分析:
图二的理论分析:
比较用IFFT函数时,得其结果是复数求其模值与理论值进行比较得:
程序代码:
x1=1/(1-0.8^N)*0.8.^n;
delta=x1-abs(x)
Columns 19 through 27
-0.0035 0 0.0035 -0.0208 -0.0694 -0.0685 -0.0572 -0.0048 0.0529
Columns 28 through 36
0.0659 0.0969 0.1177 0.1598 0.1266 0.1231 0.0762 0.1276 0.0911
5、实验总结
⑴本次实验成败之处及其原因分析:
⑵本实验的关键环节及改进措施:
①做好本实验需要把握的关键环节:
对matlab语言要极其的熟悉,其次对于课程理论学习的知识要很好的掌握。
②若重做本实验,为实现预期效果,仪器操作和实验步骤应如何改善:
实践前做好充足的准备,熟练掌握matlaB软件,多加练习相关类似的习题一增加理解。
运行结果:
delta =
数字信号处理实验报告_完整版

实验1 利用DFT 分析信号频谱一、实验目的1.加深对DFT 原理的理解。
2.应用DFT 分析信号的频谱。
3.深刻理解利用DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。
二、实验设备与环境 计算机、MATLAB 软件环境 三、实验基础理论1.DFT 与DTFT 的关系有限长序列 的离散时间傅里叶变换 在频率区间 的N 个等间隔分布的点 上的N 个取样值可以由下式表示:212/0()|()()01N jkn j Nk N k X e x n eX k k N πωωπ--====≤≤-∑由上式可知,序列 的N 点DFT ,实际上就是 序列的DTFT 在N 个等间隔频率点 上样本 。
2.利用DFT 求DTFT方法1:由恢复出的方法如下:由图2.1所示流程可知:101()()()N j j nkn j nN n n k X e x n eX k W e N ωωω∞∞----=-∞=-∞=⎡⎤==⎢⎥⎣⎦∑∑∑ 由上式可以得到:IDFTDTFT( )12()()()Nj k kX e X k Nωπφω==-∑ 其中为内插函数12sin(/2)()sin(/2)N j N x eN ωωφω--= 方法2:实际在MATLAB 计算中,上述插值运算不见得是最好的办法。
由于DFT 是DTFT 的取样值,其相邻两个频率样本点的间距为2π/N ,所以如果我们增加数据的长度N ,使得到的DFT 谱线就更加精细,其包络就越接近DTFT 的结果,这样就可以利用DFT 计算DTFT 。
如果没有更多的数据,可以通过补零来增加数据长度。
3.利用DFT 分析连续信号的频谱采用计算机分析连续时间信号的频谱,第一步就是把连续信号离散化,这里需要进行两个操作:一是采样,二是截断。
对于连续时间非周期信号,按采样间隔T 进行采样,阶段长度M ,那么:1()()()M j tj nT a a a n X j x t edt T x nT e ∞--Ω-Ω=-∞Ω==∑⎰对进行N 点频域采样,得到2120()|()()M jkn Na a M kn NTX j T x nT eTX k ππ--Ω==Ω==∑因此,可以将利用DFT 分析连续非周期信号频谱的步骤归纳如下: (1)确定时域采样间隔T ,得到离散序列(2)确定截取长度M ,得到M 点离散序列,这里为窗函数。
数字信号处理实验指导吴镇扬

实验一快速Fourier变换(FFT)及其应用一、实验目的1.在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉FFT子程序。
2.熟悉应用FFT对典型信号进行频谱分析的方法。
3. 了解应用FFT进行信号频谱分析过程中可能出现的问题以便在实际中正确应用FFT。
4.熟悉应用FFT实现两个序列的线性卷积的方法。
5.初步了解用周期图法作随机信号谱分析的方法。
返回页首二、实验原理与方法在各种信号序列中,有限长序列信号处理占有很重要地位,对有限长序列,我们可以使用离散Fouier变换(DFT)。
这一变换不但可以很好的反映序列的频谱特性,而且易于用快速算法在计算机上实现,当序列x(n)的长度为N时,它的DFT定义为:反变换为:有限长序列的DFT是其Z变换在单位圆上的等距采样,或者说是序列Fourier 变换的等距采样,因此可以用于序列的谱分析。
FFT并不是与DFT不同的另一种变换,而是为了减少DFT运算次数的一种快速算法。
它是对变换式进行一次次分解,使其成为若干小点数的组合,从而减少运算量。
常用的FFT是以2为基数的,其长度。
它的效率高,程序简单,使用非常方便,当要变换的序列长度不等于2的整数次方时,为了使用以2为基数的FFT,可以用末位补零的方法,使其长度延长至2的整数次方。
(一)、在运用DFT进行频谱分析的过程中可能产生三种误差:(1)混叠序列的频谱时被采样信号的周期延拓,当采样速率不满足Nyquist定理时,就会发生频谱混叠,使得采样后的信号序列频谱不能真实的反映原信号的频谱。
避免混叠现象的唯一方法是保证采样速率足够高,使频谱混叠现象不致出现,即在确定采样频率之前,必须对频谱的性质有所了解,在一般情况下,为了保证高于折叠频率的分量不会出现,在采样前,先用低通模拟滤波器对信号进行滤波。
(2)泄漏实际中我们往往用截短的序列来近似很长的甚至是无限长的序列,这样可以使用较短的DFT来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一 FFT变换及其应用一、实验目的和要求1.在理论课学习的基础上,通过本次实验,加深对DFT原理的理解,懂得频域DFT与时域卷积的关系,进一步加深对DFT基本性质的理解;2.研究FFT算法的主要途径和编程思路,掌握FFT算法及其程序的编写过程,掌握最基本的时域基-2FFT算法原理及程序框图;3.熟悉应用FFT实现两个序列的线性卷积的方法,利用FFT进行卷积,通过实验比较出快速卷积优越性,掌握循环卷积和线性卷积两者之间的关系;4.熟悉应用FFT对典型信号进行频谱分析的方法,初步了解用周期图法作随机信号谱分析的方法,了解应用FFT进行信号频谱分析过程中可能出现的问题,以便在实际中正确应用FFT;5.掌握使用MATLAB等基本开发工具实现对FFT编程。
二、实验设备和分组1.每人一台PC机;2.Windows 2000/XP以上版本的操作环境;3.MatLab 6.5及以上版本的开发软件。
三、实验内容(一)实验准备1.用FFT进行谱分析涉及的基础知识如下:信号的谱分析就是计算信号的傅里叶变换。
若信号是模拟信号,用FFT进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后用FFT来对连续信号进行谱分析。
若信号本身是有限长的序列,计算序列的频谱就是直接对序列进行FFT运算求得X(k),X(k)就代表了序列在[0,2]之间的频谱值。
幅度谱:相位谱:为避免产生混叠现象,采样频率fs 应大于2倍信号的最高频率fc ,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器。
用FFT 对模拟信号进行谱分析的方框图如下所示。
图1.1 FFT 对模拟信号进行谱分析的方框图2. 应用FFT 实现快速卷积涉及的基础知识如下: 一个信号序列x(n)与系统的卷积可表示为下式:Y(n)=x(n)*h(n)=∑+∞-∞=-m m n h m x )()(当是一个有限长序列,且0≤n ≤N-1时,有:Y(n)=∑-=-1)()(N n m n x m h此时就可以应用FFT 来快速计算有限长度序列的线性卷积。
也就是先将输入信号x (n )通过FFT 变换为它的频谱采样值X(k),然后再和滤波器的频响采样值H(k)相乘,最后再将乘积通过快速傅里叶变换(简称IFFT )还原为时域序列,即得到输出。
如下图所示。
图1.2 FFT 实现卷积的过程示意图2.1.当序列x(n)和h(n)的长度差不多时设x(n)的长度为N1,h(n)的长度为N2,则用FFT 完成卷积的具体步骤如下: ①为使两有限长序列的线性卷积可用其循环卷积代替而不发生混叠,必须选择循环卷积长度N ≥N1+N2-1②用补零方法使x(n)和h(n)变成列长为N 的序列。
③用FFT 计算x(n)和h(n)的N 点离散傅里叶变换 ④完成X(k)和H(k)的乘积Y(k)。
⑤用FFT计算的离散傅里叶反变换得 y(n)2.2 当x(n)长度很长时可采用分段卷积的方法即重叠相加法和重叠保留法。
(二)实验项目(1)用FFT进行频谱分析1)对高斯序列进行频谱分析代码如下:n=0:15;p=8;q=2;x =exp(-1*(n-p).^2/q);close all;subplot(3,1,1);stem(fft(x)) ; %利用fft 函数实现傅里叶变换subplot(3,1,2);stem(abs(fft(x))); %绘制幅度谱subplot(3,1,3);stem(angle(fft(x))) %绘制相位谱代码是为了得出此高斯序列的快速傅里叶变换,得到DFT的频谱特征图、幅频特征图和相频特征图。
a)固定信号参数P=8,改变q的值依次为2、4、8,结果如下图:P=8,q=2图2-1P=8,q=4图2-2P=8,q=8图2-3结果分析:从图中可以看出,当固定p的值,改变q,可观察到:随着q的增加,幅频图中趋近与0和等于0的个数增多。
可见q的增大使DFT幅频图中幅度平均值减小,且p是序列的对称轴,时域轴都关于n=8对称。
当q=2、4、8时,频域变化越来越快,中间水平部分越来越大,混叠减弱。
b)固定信号参数q=8,改变p的值依次为8、13、14,结果如下图:q=8,P=8图2-4 q=8,p=13图2-5 p=14,q=8图2-6结果分析:当固定q的值,改变p,可观察到:随着p的增大,图形越来越偏离真实值,当p=14时泄漏现象较明显,频域波形随p的增大频率分量会增多,易产生混叠。
2)对正弦序列进行频谱分析代码如下:n=0:15; %定义序列长度a=0.1;f=0.0625;x=exp(-a*n).*sin(2*pi*f*n);close all;subplot(2,1,1);stem(x);title('衰减正弦序列');subplot(2,1,2);stem(abs(fft(x))); %绘制幅度谱title('x 信号的频谱')a)固定参数a=0.1,改变f,分别为0.5625、0.4375、0.0625,结果如下图:f=0.5625图2-7f=0.4375图2-8f=0.0625图2-9结果分析:观察可知,当f=0.4375,0.5625时,时域图像关于Y轴对称,频域完全相同。
随着f值增大,时域序列周期变小。
频域序列的高频分量逐渐增多,低频分量逐渐减少,因为所取的频率不符合采样定理,以致发生严重的频谱混叠和泄漏。
3)对三角序列进行频谱分析代码如下:for i=1:4x(i)=i;endfor i=5:8x(i)=9-i;endfor i=9:16x(i)=0;endclose allsubplot(2,1,1);stem(x);subplot(2,1,2);stem(abs(fft(x))) %绘制幅度谱其频谱图如下所示:图2-10结果分析:此编程实现三角序列,中间两个值是相等的,然后我们根据fft函数快速求出x在各个n值上所对应的傅里叶变换值,得到结果如下:Y=[18.4640 3.1605 -16.3681i -5.3021 - 2.2394i -0.3336 + 0.3570i0.1333 + 0.0145i 0.7981 - 0.5599i -0.0955 - 0.4109i 0.3750 –0.0802i 0.0646 0.3750 + 0.0802i -0.0955 + 0.4109i 0.7981 +0.5599i 0.1333 - 0.0145i -0.3336 - 0.3570i -5.3021 + 2.2394i3.1605 +16.3681i ]然后分别求出各点处的大小(实部的平方加虚部的平方开根号),得出来的大小和图像近似相等。
此三角序列的时域表达式为:当1≤n≤4时x(n)=n;当5≤n≤8时x(n)=9-n。
a)反三角序列:代码如下:For i=1:4x(i)=5-i;endFor i=5:8x(i)=i-4;endclose allsubplot(2,1,1);stem(x);subplot(2,1,2);stem(abs(fft(x,16)))图2-11b)半三角序列(直角三角形序列):代码1如下:for i=1 :8x(i)=i-1;endclose allsubplot(2,1,1);stem(x);subplot(2,1,2);stem(abs(fft(x)))图2-2代码2如下:for i=1 :8x(i)=8-i;endclose allsubplot(2,1,1);stem(x);subplot(2,1,2);stem(abs(fft(x)))图2-13 c)只有一个峰值:代码如下:for i=1:4x(i)=i;endfor i=5:8x(i)=8-i;endclose allsubplot(2,1,1);stem(x);subplot(2,1,2);stem(abs(fft(x,16)))图2-14(2)使用FFT实现卷积运算已知:x1(n)=RN(n), 1≤N≤10; x2(n)=8sin(0.5*pi*n+4) 1≤N≤10; x3(n)=0.8*exp(3*n)1≤N≤10;使用FFT实现以上3种卷积。
代码如下:n=[1:1:10];N1=length(n);xn1=ones(1,N1);xn2=8*sin(0.5*pi*n+4);xn3=0.8*exp(3*n);N=N1+N1-1;X1k=fft(xn1,N);X2k=fft(xn2,N);X3k=fft(xn3,N);Yk1=X1k.*X2k;Yk2=X1k.*X3k;Yk3=X2k.*X3k;yn1=ifft(Yk1,N);yn2=ifft(Yk2,N);yn3=ifft(Yk3,N);x=0:N-1;subplot(3,1,1);stem(x,yn1,'.')subplot(3,1,2);stem(x,yn2,'.')subplot(3,1,3);stem(x,yn3,'.')用FFT计算卷积,实验结果如下图:图2-15结果分析:X1n=[1 1 1 1 1 1 1 1 1 ]; x2n=[8 0 -8 0 8 0 -8 0 8 0];X1n*x2n=[08 8 0 0 8 8 0 0 8 0 0 8 8 0 0 8 8 0],其IFFT变换为8*(exp(j*2*w)+exp(j*3*w)+exp(j*6*w)+exp(j*7*w)+exp(j*10*w)+exp(j*13*w)+exp(j*14*w)+exp(j*17*w)+exp(j*18*w))=8*(1+exp(j*w))*(exp(j*2*w)+exp(j*6*w)+exp(j*13*w)+exp(j*17*w))+8*exp(j*10*w),Matlab运行的结果与手工计算的结果完全一致,由此可知此代码是正确的。
(3)一个综合性实例1)创建简易界面使用MATLAB中的图形用户接口功能,设计简单的操作界面,如图1.6所示。
界面中包含列表框,滑动块,按钮和静态文本。
其中列表中,包含正弦波、方波和锯齿波;移动滑动块可以改变图形的周期,且周期数在静态文本中显示;点击“退出”按钮则退出程序。
界面如下图:图2-16a)当列表框中选择‘正弦波’,周期数为4时,产生的时域波形和频谱图如下:图2-17c)当列表框中选择‘三角波’,周期数为4时,产生的时域波形和频谱图如下:图2-19图2-20四、实验小结本次实验按照实验指导书,基本是按照原有的代码和步骤基础上来做的,实验中也遇到了一系列的问题:一,前后参数不一致,即在改变参数的时候,由于粗心使得前后参数形式不一致,而导致运行出错;二,在matlab中新建文件,若以中文命名,然后保存后运行,则系统会因为识别不了所命名的中文而导致运行会出错;三,只会用data cursor来将坐标点贴标签,仍然不会用编写代码的方式将各坐标点的数值贴标签。