实验二 离散傅里叶变换(DFT)实验
- 格式:docx
- 大小:543.19 KB
- 文档页数:10
傅里叶变换实验的算法原理引言傅里叶变换是一种数学工具,用于将一个函数从时间域转换到频率域。
它在信号处理、图像处理、通信等领域中得到广泛应用。
傅里叶变换实验是通过计算机程序模拟傅里叶变换的过程,以便更好地理解其基本原理。
基本概念在介绍傅里叶变换的具体算法之前,我们先了解一些基本概念。
时域和频域时域是指信号在时间上的变化情况,例如音频信号的波形图就是时域表示。
频域是指信号在频率上的分布情况,可以通过傅里叶变换将时域信号转换为频域信号。
周期信号和非周期信号周期信号是指具有重复性质的信号,例如正弦波、方波等。
非周期信号则没有明显的重复性质。
频谱频谱表示了一个信号在不同频率上的能量分布情况。
对于周期信号,它的频谱是离散的;对于非周期信号,它的频谱是连续的。
傅里叶变换的基本原理傅里叶变换的基本原理是将一个函数表示为一系列正弦和余弦函数的叠加。
具体而言,傅里叶变换将一个函数f(t)分解为不同频率的正弦和余弦函数的叠加,得到该函数在频域上的表示。
傅里叶级数展开对于周期信号f(t),可以使用傅里叶级数展开来表示。
傅里叶级数展开将周期信号表示为一系列正弦和余弦函数的线性组合。
傅里叶级数展开公式如下:f(t) = a0 + Σ(an*cos(nωt) + bn*sin(nωt))其中,a0是直流分量,an和bn是信号在频率为nω处的幅度,ω是基频(最低频率)。
连续傅里叶变换对于非周期信号f(t),可以使用连续傅里叶变换来表示。
连续傅里叶变换将非周期信号表示为一个连续的频谱。
连续傅里叶变换公式如下:F(ω) = ∫[f(t)*e^(-jωt)]dt其中,F(ω)是信号在频率为ω处的幅度。
离散傅里叶变换实际应用中,我们通常处理的是离散的信号序列。
离散傅里叶变换可以将离散信号表示为一个离散的频谱。
离散傅里叶变换公式如下:X[k] = Σ[x[n]*e^(-j2πnk/N)]其中,X[k]是信号在频率为k/N处的幅度,x[n]是输入信号的离散采样值,N是采样点数。
姓名:高铭遥 班级: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 可以实现快速卷积,提高运算速度。
一,实验名称: DFT 的频谱分析 二,实验目的:1. 加深对 DFT 原理的理解,熟悉DFT 的性质。
2. 掌握离散傅里叶变换的有关性质,利用Matlab 实现DFT 变换3. 深刻理解利用 DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法三,实验原理:所谓信号的频谱分析就是计算信号的傅里叶变换。
连续信号与系统的傅里叶分析显然不便于直接用计算机进行计算,使其应用受到限制,而DFT 是一种时域和频域均离散化的变换,适合数值运算,成为分析离散信号和系统的有力工具。
工程实际中,经常遇到的连续信号Xa(t),其频谱函数Xa(jW)也是连续函数。
数字计算机难于处理,因而我们采用DFT 来对连续时间信号的傅里叶变换进行逼近,进而分析连续时间信号的频谱。
离散傅里叶变换是有限长序列的傅里叶变换,它相当于把信号的傅里叶变换进行等频率间隔采样,并且有限长序列的离散傅里叶变换和周期序列的离散傅里叶级数本质是一样的。
快速傅里叶变换(FFT )并不是一种新的变换,它是离散傅里叶变换的一种快速算法,并且主要是基于这样的思路而发展起来的:(1)把长度为N 的序列的DFT 逐次分解成长度较短的序列的DFT 来计算。
(2)利用WN(nk)的周期性和对称性,在DFT 运算中适当的分类,以提高运算速度。
(对称性nkNnk NW W N-=+2,12-=NN W ;周期性nk N nk N nrN N k rN n N W W W W ---==)(,r 为任意整数,1=nrNNW ) 离散傅里叶变换的推导:离散傅里叶级数定义为 nk j N k p p ek x Nn x N21)(1)(π∑-== (1-1) 将上式两端乘以nm j Ne π2-并对n 在0~N-1求和可得 ⎥⎦⎤⎢⎣⎡==∑∑∑∑∑-=---=-=-=---=-10)(110101)(10N2N2N2)()(1)(N n m k n j N N k p N n N k m k n j pN n nm j p e k X ek XNen x πππ 因为{m k 1mk 0)(N )(1)(N 2N2N2-1-1N 11=≠---=-==∑m k j m k j N n m k n je eeNπππ所以∑∑-=-=--=11)()()(N2N k p N n nm j p m k k X en x δπ 这样∑-=-=10N2)()(N n nm j p p en x m X π用k代替m 得 ∑-=-=10N2)()(N n nk j p P e n x k X π (1-2)令N2πj N eW -=,则(1-2)成为DFS []∑-===10)()()(N n nk N p p p W n x k X n x (1-3)(1-1)成为 IDFS []∑-=-==1)(1)()(N n nkNpp p W k XNn x k X (1-4) 式(1-3)、(1-4)式构成周期序列傅里叶级数变换关系。
实验四离散傅立叶变换DFT实验四离散傅里叶变换(DFT )一实验目的(1)理解信号变换的基本概念(2)理解离散傅立叶变换的基本概念二实验原理及实例分析 1、离散傅里叶变换傅里叶变换是信号分析和处理的重要工具。
有限长序列作为离散信号的一种,在数字信号处理中占有着极其重要的位置。
对于有限长序列,离散傅立叶变换不仅在理论上有着重要的意义,而且有快速计算的方法-快速傅立叶变换FFT 。
所以在各种数字信号处理的运算方法中,越来越起到核心的作用。
1.1 傅里叶变换的几种形式1、非周期连续时间信号的傅里叶变换非周期连续时间信号)(t x 的傅立叶变换)(ωj X 可以表示为)(ωj X =dt e t x tj ?∞∞--ω)(逆变换为ωωπωd j x t x tj ?∞∞-=)(21)(在这里,ω是模拟角频率。
可以看到,时域的连续函数造成频域的非周期谱,时域的非周期性造成频域的连续谱。
结论:非周期连续时间函数对应于一非周期连续频域变换函数。
2、周期连续时间信号的傅里叶变换周期为T 的周期性连续时间信号)(t x 傅立叶变换是离散频域函数,可表示为-=22)(1)(T T tjm d e t x Tjm X ωωω 逆变换为ωωωd ejm X t x tjm m ∑∞-∞==)()(这就是经常称之为傅里叶级数的变换形式。
在这里,ω也是模拟角频率。
可以看到,时域的连续函数造成频率域的非周期谱,频域函数的离散造成时域函数的周期性。
结论:周期连续时间函数对应于一离散非周期频域变换函数。
3、非周期离散时间信号)(n x 的傅立叶变换)(ωj e X 可以表示为∑∞-∞=-=nnj j e n x e X ωω)()(逆变换为ωπωππωd e e X n x n j j ?-=)(21)( 在这里,ω是数字频率,它和模拟角频率的关系为T Ω=ω。
可以看到,时域的取样对应于频域的周期延拓,而时域函数的非周期性造成频域的连续谱。
实验二FFT 频谱分析及应用一、实验目的:1、通过实验加深对FFT 的理解;2、熟悉应用FFT 对典型信号进行频谱分析的方法。
二、实验内容使用MATLAB 程序实现信号频域特性的分析。
涉及到离散傅立叶变换(DFT)、快速傅立叶变换(FFT)及信号频率分辨率等知识点。
三、实验原理与方法和手段在各种信号序列中,有限长序列占重要地位。
对有限长序列可以利用离散傅立叶变换(DFT)进行分析。
DFT不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。
有限长序列的DFT是其z变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。
FFT 是DFT 的一种快速算法,它是对变换式进行一次次分解,使其成为假设干小数据点的组合,从而减少运算量。
在MATLAB 信号处理工具箱中的函数fft(x,N),可以用来实现序列的N点快速傅立叶变换。
经函数fft 求得的序列一般是复序列,通常要求出其幅值和相位。
MATLAB中提供了求复数的幅值和相位的函数:abs angle,这些函数一般和fft 同时使用。
四、实验组织运行要求1、学生在进行实验前必须进行充分的预习,熟悉实验内容;2、学生根据实验要求,读懂并理解相应的程序;3、学生严格遵守实验室的各项规章制度,注意人身和设备平安,配合和服从实验室人员管理;4、教师在学生实验过程中予以必要的辅导,独立完成实验;5、采用集中授课形式。
五、实验条件1、具有WINDOWS 98/2000/NT/XP操作系统的计算机一台;2. 、MATLAB编程软件。
六、实验步骤在“开始--程序〞菜单中,找到MATLAB程序,运行启动;进入MATLAB后,在Comma nd Win dow中输入实验程序,并执行;记录运行结果图形,作分析。
具体步骤如下:1、用FFT进行典型信号的频谱分析:①咼斯序列:x〔M〕= *已,0乞科冬150. else参数:p=3 , q=6 ;p=2 , q=9 ;p=5 , q=7。
实验1 离散系统的差分方程、冲激响应和卷积分析实验目的:加深对离散系统的差分方程、冲激响应和卷积分析方法的理解。
实验原理:离散系统如下图所示。
其输入、输出关系可用以下差分方程描述:[][]∑∑==-=-Nk Mk kkk n x p k n y d 0输入信号分解为冲激信号,[][][]∑+∞-∞=-=m m n m x n x δ记系统单位冲激响应:[][]n h n →δ则系统响应为如下的卷积计算式:[][][][][]∑+∞-∞=-==m m n h m x n h n x n y *当N k d k ,,2,1,0 ==时,[]n h 是有限长度的()]),0[:M n ,称系统为FIR 系统;反之,称系统为IIR 系统。
在Matlab 中,可以用函数),,(x d p Filter y =求解差分方程,也可以用函数),(h x conv y =计算卷积。
(1) 卷积计算n=1:50; %定义序列的长度是50hb=zeros(1,50); %注意:Matlab 中数组下标从1开始 hb(1)=1; hb(2)=2.5; hb(3)=2.5; hb(4)=1; subplot(3,1,1); stem(hb); title('系统hb[n]'); m=1:50; %定义序列的长度是50 A=444.128; %设置信号有关的参数 a=50*sqrt(2.0)*pi; T=0.001; %采样率 w0=50*sqrt(2.0)*pi;x=A*exp(-a*m*T).*sin(w0*m*T);subplot(3,1,2); stem(x); title('输入信号x[n]');y=conv(x,hb); subplot(3,1,3); stem(y); title('输出信号y[n]');(2) 卷积定律验证 figure(2); k=-25:25;X=x*(exp(-j*pi/12.5)).^(n'*k);magX=abs(X); %绘制x(n)的幅度谱subplot(3,2,1); stem(magX); title('输入信号的幅度谱');angX=angle(X); %绘制x(n)的相位谱subplot(3,2,2); stem(angX); title('输入信号的相位谱');Hb=hb*(exp(-j*pi/12.5)).^(n'*k);magHb=abs(Hb); %绘制hb(n)的幅度谱subplot(3,2,3); stem(magHb); title('系统响应的幅度谱');angHb=angle(Hb); %绘制hb(n)的相位谱subplot(3,2,4); stem(angHb); title('系统响应的相位谱');n=1:99; k=1:99; Y=y*(exp(-j*pi/12.5)).^(n'*k);magY=abs(Y); %绘制y(n)的幅度谱subplot(3,2,5); stem(magY); title('输出信号的幅度谱');angY=angle(Y); %绘制y(n)的相位谱subplot(3,2,6); stem(angY); title('输出信号的相位谱');%以下将验证的结果显示figure(3);XHb=X.*Hb;subplot(2,1,1); stem(abs(XHb)); title('x(n)的幅度谱与hb(n)幅度谱相乘');subplot(2,1,2); stem(abs(Y)); title('y(n)的幅度谱'); axis([0,60,0,8000]);实验内容:编制程序求解下列两个系统的单位冲激响应和阶跃响应,并绘出其图形。
哈尔滨理工大学实验报告课程名称:数字信号处理学院:专业班级:学生姓名:学号:指导教师:实验二一.实验目的(1)加深理解离散时间信号的DTFT变换。
(2)掌握离散时间信号的DFT变换。
(3)区别离散信号的DTFT和DFT,讨论其相互关系。
二.实验内容与操作(1)计算16点序列5()cos,01516x n n nπ=≤≤的16点DFT,绘出幅度谱图形,并绘出该序列的DTFT图形。
(2)计算 16点序列5()cos,01516x n n nπ=≤≤的32点DFT,绘出幅度谱图形,并绘出该序列的DTFT图形。
(3)设()3,015nx n e n=≤≤,求()1515()((3))f n x n R n=+的离散傅里叶变换DFT。
在Matlab中利用f(n)=x(mod((n+m),N)+1)帮助求解。
三.实验程序(1)n=[0:1:15];xn=cos(5*pi.*n/16);subplot(2,2,1);stem(n,xn,'.');xlabel('t/T');ylabel('x(n)');xk=fft(xn);xk=abs(xk);subplot(2,2,2);stem(n,xk);xlabel('k');ylabel('x(k)');R=1000;k=0:1000;w=(2*pi/R)*k;freqz(xn,1,w);实验结果图:(2)n=[0:1:31];xn=cos(5*pi.*n/6);zeros(1,16:n-1);subplot(2,2,1);stem(n,xn,'.'); title('DTFT');xlabel('t/T');ylabel('x(n)'); xk=fft(xn);xk=abs(xk);subplot(2,2,2);stem(n,xk);title('幅度');xlabel('k');ylabel('x(k)');实验结果图:(3)n=0:1:25;x=3*exp(n);x1=x(mod((n+3),26)+1);r=ones(1,26);x1=x1.*r;y=fft(x);Y=abs(y);y1=fft(x1);Y1=abs(y1);subplot(2,2,1);stem(x)xlabel('x 时域'); subplot(2,2,2); stem(x1)xlabel('x1时域'); subplot(2,2,3); stem(Y)xlabel('Y 频域'); subplot(2,2,4); stem(Y1)xlabel('Y1频域');实验结果图:0123x 1011x 时域123x 1011x1平移时域102030123411Y1平移频域102030123411Y 频域四.实验结果分析1、三角函数图像为单周期图像的周期延拓;2、当点数增多时,即使对应值不同,但函数的总体趋势和形状不变;3、时域和频域的增减关系一致。
第1篇一、实验背景随着信息技术的飞速发展,数字信号处理(DSP)技术已成为通信、图像处理、语音识别等领域的重要工具。
本实验旨在通过一系列实验,加深对数字信号处理基本原理和方法的理解,提高实际应用能力。
二、实验目的1. 理解数字信号处理的基本概念和原理。
2. 掌握常用信号处理算法的MATLAB实现。
3. 培养分析和解决实际问题的能力。
三、实验内容本实验共分为五个部分,具体如下:1. 离散时间信号的基本操作(1)实验目的:熟悉离散时间信号的基本操作,如加法、减法、乘法、除法、延时、翻转等。
(2)实验步骤:- 使用MATLAB生成两个离散时间信号。
- 对信号进行基本操作,如加法、减法、乘法、除法、延时、翻转等。
- 观察并分析操作结果。
2. 离散时间系统的时域分析(1)实验目的:掌握离散时间系统的时域分析方法,如单位脉冲响应、零状态响应、零输入响应等。
(2)实验步骤:- 使用MATLAB设计一个离散时间系统。
- 计算系统的单位脉冲响应、零状态响应和零输入响应。
- 分析系统特性。
(1)实验目的:掌握离散时间信号的频域分析方法,如快速傅里叶变换(FFT)、离散傅里叶变换(DFT)等。
(2)实验步骤:- 使用MATLAB生成一个离散时间信号。
- 对信号进行FFT和DFT变换。
- 分析信号频谱。
4. 数字滤波器的设计与实现(1)实验目的:掌握数字滤波器的设计与实现方法,如巴特沃斯滤波器、切比雪夫滤波器、椭圆滤波器等。
(2)实验步骤:- 使用MATLAB设计一个低通滤波器。
- 使用窗函数法实现滤波器。
- 对滤波器进行性能分析。
5. 信号处理在实际应用中的案例分析(1)实验目的:了解信号处理在实际应用中的案例分析,如语音信号处理、图像处理等。
(2)实验步骤:- 选择一个信号处理应用案例。
- 分析案例中使用的信号处理方法。
- 总结案例中的经验和教训。
四、实验结果与分析1. 离散时间信号的基本操作实验结果表明,离散时间信号的基本操作简单易懂,通过MATLAB可以实现各种操作,方便快捷。
实验二 离散傅里叶变换(DFT)实验
【实验目的】
1.进一步熟悉CCS集成开发环境的软硬件调试方法
2.学习DFT的基本原理
3.掌握如何在DSP中实现DFT算法
【实验内容】
1. 了解DFT的基本原理。
2.了解命令文件中伪指令MEMORY和SECTIONS的作用。
2. CCS中的软硬件开发环境的熟悉。
3. 常用信号(包括正弦波,方波,三角波,锯齿波)的DFT。
【实验器材】
1.DSP开发板
2.DSP仿真器
3 .PC机(软件:CCS,全称:Code composer studio)
三 实验原理
。傅里叶变换是一种将信号从时域变换到频域的变换形式,是信号处理的
重要分析工具。离散傅里叶变换(DFT)是傅里叶变换在离散系统中的表示形
式。
本实验是在学生首先产生一信号后,对该信号进行DFT,并在CCS中利
用其自带的观察窗口或Memory菜单来查看变换前后的波形或频谱值,从而完
成了一个简易频谱分析仪。让学生更加直观形象地体会DFT的整个过程
假设信号为x(0),x(1),……,x(N),那么其离散傅立叶变换后的实部和虚
部以及频谱幅度分别为:
2
()0()()()()NjknNrinXkxneXkjXk
0(0)()(0)0NriiXxiX
002 ()()cos(())2()()sin(())(0)NrnNiiXkxnknNXkxnknkN
22
()()()riAkXkXk
具体的实现过程的时候需要根据硬件的特性来实现。比如cos和sin的值
都可事先通过软件计算出结果,保存在两个数组中,直接对其进行查表操作。
若缓存数量为128,即N=128。对于cos和sin的系数,根据需要可以首
先计算出128点的sin值,而cos的值则可以通过sin表整体后移N/4点,也就
是整体后移32点后得到。换句话说,加入sin的表为sin(0)、sin(1)、
sin(2)、……、sin(127),则cos的表就为sin(32)、sin(33)、sin(34)、……、
sin(127)、sin(0)、sin(1)、……、sin(31),这样就相当于在DSP中节省了128B
的存储空间供其它程序使用。
四 实验步骤
1.打开CCS软件直接打开lab2里的工程
2.修改hello工程下的源文件代码(产生一信号,并做DFT)。
3.对代码修改完毕后,编译代码。
4.编译通过后,下载代码到DSP。
5.首先点击CCS软件中的菜单View\Graph\Time/Frequency…,会弹出一
个设置
图 选择CCS图形观察窗口
对话框,对下图所相应的设置后,点击【OK】即可。
图 设置图形观察窗口的属性
6.打开工程下面的源文件,在程序尾部位置设置断点。
7.全部设置好后,点击CCS软件左侧全速运行按钮,即
。
8.待程序运行后,观察CCS的图形观察窗口显示的波形。
图4.9.4 断点设置位置
在此处设
置断点
图4.9.5 三角波及其频谱
图4.9.6 正弦波及其频谱
图4.9.6 方波及其频谱
图4.9.6 锯齿波及其频谱
【实验要求】
1.学会使用CCS仿真调试出正弦或余弦波的波形及其对应的频谱图
原始程序如下:
/*
* Copyright 2002 by Texas Instruments Incorporated.
* All rights reserved. Property of Texas Instruments Incorporated.
* Restricted rights to use, duplicate or disclose this code are
* granted through contract.
*
*/
/* "@(#) DSP/BIOS 4.80.208 12-06-02 (barracuda-l19)" */
/********************************************************************
*******/
/* */
/* H E L L O . C */
/* */
/* Basic LOG event operation from main. */
/* */
/********************************************************************
*******/
#include
#include
#include
#include
#include
#include
#include "hello.h"
float in_data[Length],out_data[Length];
//==== main =====
Void main()
{
int i,k;
puts("hello world!");
for(i=0;i
in_data[i]=cos(pi*i/16); //生成一个N个样点的余弦函数
}
// Triangle_wave();
// Square_wave();
// Sawtooth_wave();
for( k=0;k
float real=0;
float image=0;
for(i=0;i
real+=in_data[i]*cos(2*pi*k*i/Length);
image+=in_data[i]*sin(2*pi*k*i/Length);
}
out_data[k]=sqrt(real*real+image*image);
}
return;
}
利用这个程序进行编译,仿真可以得到如下波形图和频谱图:
2.
编程实现三角波,方波或锯齿波三者中的任意一种波形,并进行DFT变换,
观察其波形和频谱图:
【思考题】
1. 相位如何计算。
2. 工程是否一定需要命令文件?