数字信号处理课程设计-用FFT实现快速卷积
FFT快速卷积课程设计报告
洛阳理工学院课程设计报告课程名称_________数字信号处理_____________ 设计题目_ 用FFT实现快速卷积__ _____ 专业_________通信工程_________________ 班级__________x x x x x __________________ 学号__________xx x xx x ________________ 姓名x x xx完成日期______ 2014年6月27日_________课程设计任务书设计题目:_______用FFT实现快速卷积______________设计内容与要求:FFT的出现,使DFT在数字通信、语音信号处理、图像处理、功率谱估计、系统分析与仿真、雷达信号处理、光学、地震及数值分析等各个领域都得到广泛应用。
然而,各种应用一般都以卷积和相关运算为依据。
在实际应用中,为了分析时域离散LTI系统或者序列滤波时,需要计算两个序列的线性卷积。
为了提高运算速度,可以利用FFT来实现。
要求:参考课本上第90页的内容(3.4.1 用DFT计算线性卷积),设计并编写程序来实现重叠相加法计算线性卷积。
课程设计评语成绩:指导教师:_______________年月日目录第1章设计原理 (1)1.1设计思想 (1)1.2计算循环卷积的过程 (1)1.3重叠相加法的图示 (2)第2章设计过程 (3)2.1循环卷积子函数流程图 (3)2.2主函数流程图 (4)2.3循环卷积子函数源程序: (4)2.4主函数源程序: (6)第3章结果与验证 (9)第4章界面设计 (11)第5章分析与总结 (12)参考文献 (13)第1章 设计原理1.1设计思想运用分段处理方法中的重叠相加法计算两个序列的卷积运算。
设一个给定序列是长度为n1的A,另一个导入序列是长度为n2的B,其中B 序列是相对A 序列比较长的,所以可以把B 分为和A 一样长的若干段段,即B 分后每一小段长度为n1。
数字信号处理课程设计--用fft实现快速卷积--大学毕业设计论文
洛阳理工学院课程设计报告课程名称数字信号处理课程设计设计题目用FFT实现快速卷积专业通信工程班级学号姓名完成日期2015.06.15课程设计任务书设计题目:用FFT实现快速卷积设计内容与要求:FFT的出现,使DFT在数字通信、语音信号处理、图像处理、功率谱估计、系统分析与仿真、雷达信号处理、光学、地震及数值分析等各个领域都得到广泛应用。
然而,各种应用一般都以卷积和相关运算为依据。
在实际应用中,为了分析时域离散LTI系统或者序列滤波时,需要计算两个序列的线性卷积。
为了提高运算速度,可以利用FFT来实现。
要求:参考课本上第90页的内容(3.4.1 用DFT计算线性卷积),设计并编写程序来实现重叠相加法计算线性卷积。
课程设计评语成绩:指导教师:_______________年月日目录第1章概述 (1)1.1Matlab简介 (1)1.2设计目的 (2)1.3设计原理 (2)1.3.1算法产生背景 (2)1.3.2算法基本思想 (2)第2章程序设计 (5)第3章分析与测试 (7)3.1循环卷积设计 (7)3.2 线性卷积设计 (9)3.3 设计结果 (11)第4章心得体会 (12)参考文献 (13)第1章概述随着信息时代和数字世界的到来,数字信号处理已成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。
任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信号的频谱就等于研究信号本身。
通常从频域角度对信号进行分析与处理,容易从信号的特性获得更加深入的了解。
因此,信号的频谱分析是数字信号处理技术中一种较为重要的工具。
1.1 Matlab简介Matlab语言是当今国际上科学界最具影响力、也是最有活力的软件。
它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。
它是由美国Math Works 公司于1982年推出的软件产品,取名来源于Matrix Laboratory,简称“Matlab”。
实验三 卷积、FFT
实验三 卷积、FFT 频谱分析方法1、实验目的(1) 进一步加深对线性卷积的理解和分析能力;(2) 通过编程,上机调试程序,进一步增强使用计算机解决问题的能力; (3) 掌握线性卷积与循环卷积软件实现的方法,并验证二者之间的关系。
(4) 学习用FFT 对连续信号和时域离散信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便正确应用FFT 。
2、 实验原理与方法(1) 线性卷积线性时不变系统(Linear Time-Invariant System, or L. T. I 系统)输入、输出间的关系为:当系统输入序列为)(n x ,系统的单位脉冲响应为)(n h ,输出序列为)(n y ,则系统输出为:∑∞-∞==-=m n h n x m n h m x n y )(*)()()()(或∑+∞-∞==-=m n x n h m n x m h n y )(*)()()()(上式称为离散卷积或线性卷积。
图4.1示出线性时不变系统的输入、输出关系。
)(n δ→ L. T. I —→)(n h —→ —→图4.1 线性时不变系统的输入、输出关系 (2) 圆周卷积设两个有限长序列)(1n x 和)(2n x ,均为N 点长)(1n x )(1k X )(2n x )(2k X 如果)()()(213k X k X k X ⋅=则 )()(~)(~)(10213n R m n x m x n x N N m ⎥⎦⎤⎢⎣⎡-=∑-=[]∑---=1021)()(N m N m n x m x)(n x L. T. I h(n)∑+∞-∞=-=m m n h m x n y )()()(D F T D F T3、实验内容及要求1) 卷积计算 已知两个有限长序列)4(5)3(4)2(3)1(2)()(-+-+-+-+=n n n n n n x δδδδδ编制一个计算两个序列线性卷积的通用程序,计算)(*)(n h n x 。
(完整word版)选做二用FFTIFFT计算线性卷积
东莞理工学院实验报告课程名称:数字信号处理实验室名称:实验名称:选做二用FFT/IFFT计算线性卷积指导老师:所在院系: 专业班级:姓名:学号:日期: 成绩:1、实验目的了解DFT计算卷积的基本原理,学习用FFT和IFFT计算线性卷积的方法,能够通过MATLAB编程实现线性卷积.了解长序列线性卷积的方法。
2、实验原理与方法根据DFT的性质,长度分别为M和N的两个有限长序列x(n)和h(n)的L(L≥max[N,M])点循环DFT相乘。
即:若:则:)()()(kHkXkYc⋅=其中X(k)=DFT[x(n)]L, H(k)=DFT[h(n)]L, Y c(k)=DFT[y c(n)]L.由此可见,循环卷积既可以在时域计算,也可以利用DFT和IDFT来计算,由于DFT和IDFT均具有快速算法即FFT和IFFT,因此在频域计算循环卷积的速度快得多,因而常用DFT(FFT)计算循环卷积。
如果上述序列h(n)代表一个时域离散线性时不变系统的单位脉冲响应,x(n)代表对系统的输入,那么为了分析该系统的响应,需要计算两个序列的线性卷积.设:∑∞-∞=-==mlmnhmxnhnxny)()()(*)()()(nyl长度为M+N-1。
根据线性卷积与循环卷积的关系:)()()(nRiLnynyLilc∑∞-∞=+=)())(()()()()(1nRmnhmxnnxnyLNmLc∑-=-==于是,在L ≥M +N -1时,)()(n y n y l c =,从而可以用循环卷积代替线性卷积,此时,))]([DFT )()()(L l l l c n y k Y k Y k Y ==,(,那么也就可以利用DFT (FFT )和IDFT (IFFT )计算线性卷积,称为快速卷积。
为了利用FFT 计算两序列的线性卷积,需要令L=2r (2的整数幂)。
其具体方法如下:① 取适当长度L ,满足L ≥M +N -1及L=2r 。
② 将x (n )和h (n )通过增加零值延长到L 点;③ 利用FFT 计算x (n )和h (n )各自L 点的DFT ,X (k )和H (k )。
实验五利用FFT实现快速卷积
请同学们做好实验后,以格式为“实验四+学号+姓名”的形式命名文档(例如:实验四120602008001蔡和颜.doc)。
实验报告提交方式:实验报告以电子文档的形式提交给学习委员,由学习委员统一交给老师。
【参考资料一】1.快速傅立叶变换(FFT)算法长度为N 的序列)(n x 的离散傅立叶变换)(k X 为:∑-=-==101,....,0,)()(N n nkN N k W n x k XN 点的DFT 可以分解为两个N/2点的DFT ,每个N/2点的DFT 又可以分解为两个N/4点的DFT 。
依此类推,当N 为2的整数次幂时(MN 2=),由于每分解一次降低一阶幂次,所以通过M 次的分解,最后全部成为一系列2点DFT 运算。
以上就是按时间抽取的快速傅立叶变换(FFT)算法。
当需要进行变换的序列的长度不是2的整数次方的时候,为了使用以2为基的FFT ,可以用末尾补零的方法,使其长度延长至2的整数次方。
序列)(k X 的离散傅立叶反变换为x n NX k Wn N Nnk k N ()(),,....,==--=-∑10101离散傅立叶反变换与正变换的区别在于N W 变为1-N W ,并多了一个N 1的运算。
因为N W 和1-N W 对于推导按时间抽取的快速傅立叶变换算法并无实质性区别,因此可将FFT 和快速傅立叶反变换(IFFT )算法合并在同一个程序中。
2.利用FFT 进行频谱分析若信号本身是有限长的序列,计算序列的频谱就是直接对序列进行FFT 运算求得)(k X ,)(k X 就代表了序列在[]π2,0之间的频谱值。
幅度谱 )()()(22k X k X k X I R +=相位谱 )()(arctan)(k X k X k R I =ϕ若信号是模拟信号,用FFT 进行谱分析时,首先必须对信号进行采样,使之变成离散信号,然后就可按照前面的方法用FFT 来对连续信号进行谱分析。
按采样定理,采样频率s f 应大于2倍信号的最高频率,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器。
数字信号处理实验报告_完整版
实验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来对信号进行频谱分析,这种截短等价于给原信号序列乘以一个矩形窗函数,也相当于在频域将信号的频谱和矩形窗函数的频谱卷积,所得的频谱是原序列频谱的扩展。
卷积的几种计算方法以及程序实现FFT算法
e ( t 1) )u(t 2)
Made by 霏烟似雨
数字信号处理
ht 1
e
t 2
u (t ) u (t 2)
e t 1
e t u (t )
O
t
波形
O
2
t
2. 今有一输油管道,长 12 米,请用数字信号处理的方法探测管道内部的损伤,管道的损伤可能为焊 缝,腐蚀。叙述你的探测原理,方法与结果。 (不是很清楚) 探测原理:因为输油管道不是很长,可以考虑设计滤波器器通过信号测量来测试管道的损伤,当有 焊缝时,所接受的信号会有所损失,当管道式腐蚀时,由于管壁变得不再是平滑的时候,信号的频率 就会有所改变。
rk r ( k N / 2)
,则后半段的 DFT 值表达式:
X 1[
N N / 2 1 N / 2 1 r ( k ) N N rk k ] x1[r ]WN / 22 x1[r ]WN , k ] X 2 [k ] ( k=0,1, … ,N/2-1 ) / 2 X 1[ k ] ,同样, X 2 [ 2 2 r 0 r 0
d it L Ri t et dt
t
t 2
u(t ) u(
i(t )
L 1H
2) 冲激响应为 h(t ) e u(t ) 3)
i(t ) e( ) h(t ) d
程序: function test x = rand(1 , 2 .^ 13) ; tic X1 = fft(x) ; toc tic X2 = dit2(x) ; toc tic X3 = dif2(x) ; toc tic X4 = real_fft(x) ; toc max(abs(X1 - X2)) max(abs(X1 - X3)) max(abs(X1 - X4)) return ; function X = dit2(x) N = length(x) ; if N == 1 X=x; else X1 = dit2(x(1:2:(N-1))) ; X2 = dit2(x(2:2:N)) ; W = exp(-1i * 2 * pi / N * (0:(N/2-1))) ; X = [X1 + W .* X2 , X1 - W .* X2] ; end return ;
利用FFT和IFFT计算线性卷积(可编辑)
利用FFT和IFFT计算线性卷积利用FFT和IFFT计算线性卷积/**************************************************************** ********说明:用快速傅立叶变换计算两个有限长序列的线性卷积void dftCOMPLEX *x, COMPLEX *y,int n,int flagx:指向复数变量的指针变量,存放要变换的数据,长度n。
y:指向复数变量的指针变量,存放变换的结果,长度n。
n:整型变量,变换数据的长度。
flag: 整型变量,标志符,flag=1时,做DFT, flag-1时,做IDFT。
***************************************************************** *******/说明:用快速傅立叶变换计算两个有限长序列的线性卷积void convoldouble *x,double *y,int lenx,int leny,int lenx:双精度实型一维数组,长度为1en。
开始时存放实序列xi,程序结束时,存放线性卷积的结果。
y:双精度实型一维数组,长度为n。
存放实序列yi。
lenx:整型变量。
序列xi的长度。
leny:整型变量。
序列yi的长度。
len:整型变量,线性卷积的长度。
1enm+n-1,且必须是2的整数次幂/**************************************************************** ********#include “rfft.c”#include “irfft.c”#in clude “math.h”#include “graphics.h”#include “stdlib.h”#include “string.h”#include “draw.h”void signalxhdouble *x,int ch;void convolutiondouble *x,double *h,double *y,int lenx,int lenhvoid fconvoldouble *x,double *y,int lenx,int leny,int len;void mainint i,choice,select,lenx,leny,flag;double *x;// 输入信号double *h; //单位脉冲响应存放变换的结果double *y;//输出信号printf“\nchoice singal : choice??xn select??hn\n”;printf“1.矩形序列,长度10 2.单位冲击序列\n”;printf“3.单位阶跃序列,长度54.矩形序列,长度6\n”;printf“choice :选择输入信号 select:选择输出信号\n”; printf“choice”;sc anf“%d”,&choice;ifchoice1 lenx10;else ifchoice2 lenx1;else ifchoice3 lenx5;else lenx6;xdouble *calloclenx,sizeofdouble;printf“\nselect”;scanf“%d”,&select;ifselect 1 lenh10;else ifselect 2 lenh1;else ifselect 3 lenh5;else lenh6;leny lenx+lenh-1;hdouble *calloclenh,sizeofdouble;y double *callocleny,sizeofdouble;printf“\nchoice :1.continue 2.over\n”; dosingalxhx,choice;singalxhh,select;convolutionx,h,y,lenx,lenh;printf“Do you want to input length of Convolution:Y/N?”;ifgetchar’Y’||’y’printf“input length:len”;scanf“%d”,len;else len intlogleny/log2+0.9999;printf(”\nDirect Caculation of Linear Convolution\n”);fori0;ileny;i++printf“%10.1lf”,y[i];ifi%43 printf“\n”;printf“\n”;fconvolx,h,lenx,lenh,len;printf(”Fast Caculation of Linear Convolution\n”);fori0;ileny;i++printf“%10.1lf”,x[i];ifi%43 printf“\n”;printf“\n”;scanf“&d”,&flag;while!flag;void singalxhdouble *x,int chint i;double al,a,f,t;printf“1.矩形序列,长度10 2.单位冲击序列\n”;printf“3.1,2.4,-2.4,2.4,长度44.矩形序列,长度6\n”;switchchcase 1: fori0;i10;i++ x[i]1;break;case 2: x[0]1;break;case 3: x[0]1;x[1]2.4;x[2]-2.4;x[3]2.4;break;default: fori0;i5;i++ x[i]1;break;void convolutiondouble *x,double *h,double *y,int lenx,int lenh int len;int i,j,k;lenlenx+lenh-1;fork0;klen;k++y[k]0.0;fori0;ik;i++y[k]y[k]+x[i]*h[k-i];void fconvoldouble *x,double *y,int lenx,int leny,int lenint i,len2;double t;forforilenx;ilen;i++ x[i]0.0;forilenh;ilen;i++ y[i]0.0;rfftx,len;rffty,len;len2len/2;x[0]x[0]*y[0];x[len2]x[len2]*y[len2];fori1;ilen2;i++tx[i]*y[i]-x[len-i]*y[len-i];x[len-i] x[i]* y[len-i]+ x[len-i]* y[i]; x[i]t;irfftx,len;void rfftdouble *x,int nint i,j,k,m,i1,i2,i3,i4,nl,n2,n4;double a,e,cc,ss,xt,t1,t2;forj1,i1;i16;i++m=i;j=2*j;ifjn break;n1=n-1;forj0,i0;i<n;i++=ifi<jxtx[j];x[j]x[i];x[i]=x[j];kn/2;whilekj十1j=j?k;kk/2;j=j+k;fori=0;i<n;i+2=xtx[i];x[i]xt+x[i+1];x[i+1]=xt-x[i+1j]; n21;for k=2;km;k++n4=n2;n2=2*n4;n12*n2;e=6.28318530718/n1;fori=0;in;i+n1xtx[i];x[i]xt+x[i+n2];x[i+n2]=xt-x[i+n2];x[i+n2+n4]-x[i+n2+n4]; ae;forj1;jn4?1;j++i1=i+j;i2i-j+n2;i3=i+j+n2;i4i-j+n1;cccosa;ss=sina;aa+e;t1=cc*x[i3]+ss*x[i4];t2=ss*x[i3]-cc*x[i4];x[i4]=x[i2]-t2;x[i3]=-x[i2]-t2;x[i2]=x[i1]-t1;x[i1]=x[i1]+t;void irfftdouble *x,int nint i,j,k,m,i1,i2,i3,i4,i5,i6,i7,i8,n2,n4,n8,id,is; double a,e,a3,t1,t2,t3,t4,t5,cc1,cc3,ss1,ss3;forj1,i1;i16;i++m=i;j=2*j;ifjn break;n2=2*n;fork1;km;k++is0;id=n2;n2=n2/2;R4n2/4;n8n2/8;e=6.28318530718/n2; doforiis;in;i+idi1=i;i2i1+n4;i3i2+n4;i4i3+n4;tl=x[i1]-x[i3];x[i1]x[i1]+x[i3]; x[i2]2*x[i2];x[i3]t1-2*x[i4];x[i4]t1+2*x[i4];ifn41 continue;i1+n8;i3+n8;i4+n8;t1x[i2]-x[i1]/sqrt2.0; t2x[i4]+x[i3]/sqrt2.0; x[i1]x[i1]+x[i2];x[i2]x[i4]-x[i3];x[i3]2*-t2-t1;x[i4]2*-t2+t1;is2*id-n2;id4*id;whileisn-1;ae;forj=1;jn8;j++a3=3*a;cc1cosa;ss1sina;cc3=cosa3;ss3=sina3;a=j+1*e;id2*n2;doforiis;in-1;ii+idi1i-j;i2=i1+n4;i3=i2+n4;i4=i3+n4;15=i+n4-j;i6=i5+n4;i7=i6+n4;i8=i7+n4;t1=x[i1]-x[i6];x[i1]=x[i1]+x[i6]; t2=x[i5]-x[i2];x[i5]=x[i2]+x[i5]; t3=x[i8]+x[i3];x[i6]=x[i8]-x[i3]; t4=x[i4]+x[i7];x[i2]=x[i4]-x[i7];t5t1-t4;t1t1+t4;t4=t2-t3;t2=t2+t3;x[i3]t5*cc1+t4*ss1; x[i7]-t4*cc1+t5*ss1; x[i4]t1*cc3-t2*ss3; x[i8]t2*cc3+t1*ss3;is2*id-n2;id=4*id;whileisn-1;is=0;id=4;doforiis;in;i+idi1=i+1;t1=x[i];x[i]=t1+x[i1];x[i1]=t1-x[i1];is2*id-2;id4*id;whileisn-1forj=0,i0;in-1;i++ ifijt1=x[j];x[j]=X[i];x[i]=t1;k=n/2;whi1ekj+1j=j-k;k=k/2;j=j十k;fori=0;in;i++ x[i]x[i]/n;。
数字信号处理课后答案-第4章高西全
解: 当N=1024=210时, 直接计算DFT的复数乘法运算 次数为
N2=1024×1024=1 048 576次 复数加法运算次数为
N(N-1)=1024×1023=1 047 552次 直接计算所用计算时间TD为
TD=4×10-6×10242+1 047 552×10-6=5.241 856 s 用FFT计算1024点DFT所需计算时间TF为
第3章 离散傅里叶变换(DFT)及其快速算法
(FFT)
作品欣赏 谢谢观看!
Re[
y(n)]
1 2
[
y(n)
y* (n)]
DFT[Yep
(k )]
x1(n)
j Im[
y(n)]
1 [ y(n) 2
y* (n)]
DFT[Yop (k)]
jx2 (n)
③ 由x1(n)和x2(n)合成x(n):
x(n)
x1
n 2
x2
n
2
1
n 偶数 n 奇数
,0≤n≤2N-1
TF
10 109
N 2
l
bN
10 109
N
l
bN
108 1024 10 108 1024 10 2
0.1536 ms
快速卷积计算时间Tc约为
Tc 2TF 1024 次复数乘计算时间 2 0.1536103 10109 1024
0.317 44 ms
可实时处理的信号最高频率fmax为
fmax ≤
由DFT的共轭对称性可知
Re[f(n)]=IDFT[Fep(k)]=IDFT[X(k)]=x(n)
j Im[f(n)]=IDFT[Fop(k)]=IDFT[jY(k)]=jy(n)
基于MATLAB的序列谱分析与FFT实现快速卷积
由于要求各段 xi n 数据间有 M 1 个重叠数据,故输入 x n 可写成
x n xi n i N M 1
i 0
则有
y n x n h n xi n i N M 1 h n
jw
)
, 其 中 , X R (e j ) 、
| X (e j ) | 为序列的幅度谱,arg X e j 为相 X I (e j ) 分别为 X (e j ) 的实部和虚部,
位谱。在 MATLAB 中, abs 函数可用于求复数函数的模, angle 函数可用于求复 数函数的相位角。
(1)重叠相加法
其基本思路是将输入长序列 x n 分段,每段长度为 L 点,然后依次计算每 段与 h n 的卷积,再由它们求得 y n 。当然是利用圆周卷积代替线性卷积,用
DFT 办法(采用 FFT 算法)来求解。
设 h n 为 M 点序列 0 n M 1 。 将 x n 分段,每段长为 N 点,写成
y n yi n i N M 1
i 0
这一输出是从 n M 1开始有值,若需 n 0 开始计算,则输出应为
yi n y n M 1 , n 0,1,
DFT 计算如下(实际上,只能计算有限段数据例如 K 段,则 i 的取值为 i 0 ~ K 1 ).
2.用 FFT 实现快速卷积
FFT 的出现,使 DFT 得到广泛应用。在实际应用中,为了分析时域离散 LTI 系统或者序列滤波时,需要计算两个序列的线性卷积。为了提高运算速度,可以 利用 FFT 来实现。通过使用重叠相加法、重叠保留法实现快速卷积,可以加深理 解 FFT 在实现数字滤波(或快速卷积)中的重要作用,更好地利用 FFT 进行数字 信号处理,并掌握循环卷积和线性卷积两者之间的关系。
数字信号处理毕业设计
摘要数字信号处理是将信号以数字方式表示并处理的理论和技术。
数字信号处理与模拟信号处理是信号处理的子集。
本书介绍了利用DFT的线性卷积、误差分析、快速傅里叶变换、划分和组合方法、基一2FFT算法、MATLAB 实现……。
关键字:DFT FFT MA TLAB目录利用DFT的线性卷积 (3)误差分析 (5)块卷积 (7)快速傅里叶变换 (11)划分和组合方法 (14)基一2FFT算法 (15)MA TLAB实现 (17)快速卷积 (19)高速块卷积 (21)致谢 (35)利用DFT 的线性卷积在线性系统中最重要的运算之一足线性卷积。
事实上,FIR 滤波器枉实际中一般都是用这种线性卷积实现的。
另一方面,DFT 、又是在频域实现线性系统运算的一条实际途径;稍后还会看到,通过计算这还是一种高效的运算。
然而,其巾存在一个问题:DFT 运算所得到的是一个循环卷积(我们不想要的东西),而不是我们想要的线性卷积。
现在要看看如何应用DFT"来吏现线性卷积(或等效为如何让循环卷积做戚与线性卷积一样)。
在例题5.15中曾间接提到过这一问题。
令1()x n 是1N 点序列,2()x n 是2N 点序列。
定义3()x n 为1()x n 和2()x n 的线性卷积,即*312()()()x n x n x n1112120()()()()N k x k x n k x k x n k ∞---∞=-=-∑∑ 那么3()x n 是一个12(1)N N +-点序列。
如果选取12max(,)N N N =,并计算 N 点的循环卷积12()()x n Nx n ,那么就得到N 点序列,它显然不同于3()x n 。
这样的观点也提供了一个线索,为什么不选12(1)N N N =+-,并做12(1)N N +-点的循环卷积呢,这样至少这两个卷积都有相同的样本数。
因此,令121N N N =+-并将1()x n 和2()x n 都当作N 点序列对待。
(成都理工大学)数字信号处理实验
本科生实验报告实验课程数字信号处理学院名称信息科学与技术学院专业名称物联网工程学生姓名曹林鑫学生学号201413060301指导教师罗耀耀实验地点6B607实验成绩二〇一六年十月——二〇一六年十二月实验一熟悉Matlab环境一、实验目的1.熟悉MATLAB的主要操作命令。
2.学会简单的矩阵输入和数据读写。
3.掌握简单的绘图命令。
4.用MATLAB编程并学会创建函数。
5.观察离散系统的频率响应。
二、实验内容(1)数组的加、减、乘、除和乘方运算。
输入A=[1 2 3 4],B=[3 4 5 6],求C=A+B,D=A-B,E=A.*B,F=A./B,G=A.^B并用stem语句画出A、B、C、D、E、F、G。
clear all;a=[1 2 3 4];b=[3 4 5 6];c=a+b;d=a-b;e=a.*b;f=a./b;g=a.^b;n=1:4;subplot(4,2,1);stem(n,a);xlabel('n');xlim([0 5]);ylabel('A');subplot(4,2,2);stem(n,b);xlabel('n');xlim([0 5]);ylabel('B');subplot(4,2,3);stem(n,c);xlabel('n');xlim([0 5]);ylabel('C');subplot(4,2,4);stem(n,d);xlabel('n');xlim([0 5]);ylabel('D');subplot(4,2,5);stem(n,e);xlabel('n');xlim([0 5]);ylabel('E');subplot(4,2,6);stem(n,f);xlabel('n');xlim([0 5]);ylabel('F');subplot(4,2,7);stem(n,g);xlabel('n');xlim([0 5]);ylabel('G');(2)用MATLAB实现下列序列:1) x(n)=0.8n0≤n≤152) x(n)=e(0.2+3j)n0≤n≤153) x(n)=3cos(0.125πn+0.2π)+2sin(0.25πn+0.1π) 0≤n≤154) 将3)中的x(n)扩展为以16为周期的函数x16(n)=x(n+16),绘出四个周期。
利用FFT计算线性卷积
实验三利用FFT计算线性卷积实验记录1.比较当序列长度分别为8,16,32,64,256,512,1024时两种方法计算的时间一、直接线性卷积程序代码for n1=3:10;L=2^n1;x=ones(1,L);h=cos(0.2*pi.*x);ticy=conv(x,h);tocend程序结果:Elapsed time is 0.000104 seconds.Elapsed time is 0.000022 seconds.Elapsed time is 0.000018 seconds.Elapsed time is 0.000021 seconds.Elapsed time is 0.000031 seconds.Elapsed time is 0.000059 seconds.Elapsed time is 0.000152 seconds.Elapsed time is 0.000508 seconds.二、快速卷积程序代码for n0=3:10;L=2^n0;n=0:L;x=heaviside(n)-heaviside(n-L);h=cos(0.2*pi.*n);X=fft(x);H=fft(h);Y=X.*H;ticy=ifft(Y);tocend程序结果Elapsed time is 0.000041 seconds. Elapsed time is 0.000441 seconds. Elapsed time is 0.000075 seconds. Elapsed time is 0.000070 seconds. Elapsed time is 0.001507 seconds. Elapsed time is 0.000544 seconds. Elapsed time is 0.005577 seconds. Elapsed time is 0.002435 seconds.2.考察当L=2048和4096,M=256时两种方法计算时间1)N=2048时一、直接线性卷积程序代码L=2048;M=256;n0=0:L;x=heaviside(n0)-heaviside(n0-L);n1=0:M;h=cos(0.2*pi.*n1);ticy=conv(x,h);toc程序结果Elapsed time is 0.011091 seconds二、快速卷积程序代码L=2048;M=256;n0=0:L;x=heaviside(n0)-heaviside(n0-L);n1=0:M;h=cos(0.2*pi.*n1);ticX=fft(x,2048);H=fft(h,2048);Y=X.*H;y=ifft(Y);toc程序结果Elapsed time is 0.005779 seconds.2)N=4096时一、直接线性卷积程序代码L=4096;M=256;n0=0:L;x=heaviside(n0)-heaviside(n0-L); n1=0:M;h=cos(0.2*pi.*n1);ticy=conv(x,h);toc程序结果Elapsed time is 0.002153 seconds.二、快速卷积程序代码L=4096;M=256;n0=0:L;x=heaviside(n0)-heaviside(n0-L); n1=0:M;h=cos(0.2*pi.*n1);ticX=fft(x,2048);H=fft(h,2048);Y=X.*H;y=ifft(Y);toc程序结果Elapsed time is 0.005149 seconds.3.利用重叠相加法计算线性卷积,考察L=2048和4096时的计算时间1)L=2048程序代码L=2048;M=256;x=ones(1,L);n=0:M-1;h=cos(0.2*pi*n);N=L+M-1;y=zeros(1,N);subLen=M;subNum=L/M;subLenY=2*M-1;ticH=fft(h,2*M-1);for count=1:subNumx_temp=x(((count-1)*subLen+1):(count*subLen));X=fft(x_temp,2*M-1);Y=X.*H;y_temp=ifft(Y,2*M-1);y(((count-1)*subLen+1):(count*subLen+M-1))=y(((count-1)*subLen+1):(count*subLen +M-1))+y_temp;endtoc程序结果Elapsed time is 0.003825 seconds.2)L=4096程序代码L=4096;M=256;x=ones(1,L);n=0:M-1;h=cos(0.2*pi*n);N=L+M-1;y=zeros(1,N);subLen=M;subNum=L/M;subLenY=2*M-1;ticH=fft(h,2*M-1);for count=1:subNumx_temp=x(((count-1)*subLen+1):(count*subLen));X=fft(x_temp,2*M-1);Y=X.*H;y_temp=ifft(Y,2*M-1);y(((count-1)*subLen+1):(count*subLen+M-1))=y(((count-1)*subLen+1):(count*subLen +M-1))+y_temp;endtoc程序结果Elapsed time is 0.006678 seconds.4.利用重叠保留法计算两个序列的线性卷积。
数字信号处理实验报告_完整版
实验1 利用DFT 分析信号频谱一、实验目的1.加深对DFT 原理的理解。
2.应用DFT 分析信号的频谱。
3.深刻理解利用DFT 分析信号频谱的原理,分析实现过程中出现的现象及解决方法。
二、实验设备与环境 计算机、MATLAB 软件环境 三、实验基础理论1.DFT 与DTFT 的关系有限长序列x (n )(0≤n ≤N −1)的离散时间傅里叶变换X (e jω)在频率区间(0≤ω≤2π)的N 个等间隔分布的点kω=2πk /N (0≤k ≤N −1)上的N 个取样值可以由下式表示:212/0()|()()01N jkn j Nk N k X e x n eX k k N πωωπ--====≤≤-∑由上式可知,序列x (n )的N 点DFT X k ,实际上就是x (n )序列的DTFT 在N 个等间隔频率点kω=2πk /N (0≤k ≤N −1)上样本X k 。
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 ωωω∞∞----=-∞=-∞=⎡⎤==⎢⎥⎣⎦∑∑∑ 由上式可以得到:IDFTDTFTX (ejω)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 分析连续信号的频谱采用计算机分析连续时间信号的频谱,第一步就是把连续信号离散化,这里需要进行两个操作:一是采样,二是截断。
实验3 利用FFT算线性卷积
实验 3 利用 FFT 算线性卷积
假设要计算序列 x(n)=u(n)-u(n-L),0nL 和 h(n)=cos(0.2n),0nM 的线 性卷积,完成以下实验内容。 1. 设 L=M,根据线性卷积的表达式和快速卷积的原理,分别编程实现 计 算 两 个 序 列 线 性 卷 积 的 方 法 , 比 较 当 序 列 长 度 分 别 为 8,16,32 , 64,256,512,1024 时,两种方法计算线性卷积所需时间。
北京理工大学5系数字信号处理实验报告实验3利用fft算线性卷积假设要算序列xnununl0nl和hncos02n0nm设lm根据线性卷积的表达式和快速卷积的原理分别编程实现计算两个序列线性卷积的方法比较当序列长度分别为81632642565121024时两种方法计算线性卷积所需时间
北京理工大学 5 系数字信号处理实验报告
北京理工大学 5 系数字信号处理实验报告
for ii=2:N/L %重叠相加 yn1(ii,1:(M-1))=yn1(ii-1,(L+1):e nd)+yn1(ii,1:(M-1)); end %截取前1~L个有效值 yn(:,:)=yn1(:,1:L); %重新组成输出序列 yn=reshape(yn',1,N); toc
代码:
clear;clc; vector=[8 16 32 64 256 512 1024]; for ii=1:size(vector,2) L=vector(ii); M=L; n=1:L; N=L+M-1; xn=heaviside(n)-heaviside(n-L); hn=cos(0.2*pi*n); %计算直接线性卷积的时间 tic yn1=conv(xn,hn); disp('%%%%%%%%%%%%%%%%%%% %%%%') end toc %计算快速卷积的时间 tic xw=fft(xn,N); hw=fft(hn,N); yw=xw.*hw; yn2=ifft(yw,N); toc
matlab fft用于卷积
matlab fft用于卷积在信号处理领域中,卷积是一种重要的数学运算。
在计算机中,卷积可以使用快速傅里叶变换(FFT)来实现。
MATLAB是一种流行的数值计算软件,它提供了方便的FFT函数来进行卷积计算。
使用MATLAB进行卷积计算的一般方法如下:1. 定义输入信号x和卷积核h。
2. 将x和h填充到相同的长度,以使它们可以进行FFT计算。
3. 对x和h进行FFT计算。
4. 将x和h进行逐点相乘得到卷积的频域表示。
5. 使用IFFT函数将频域表示转换为时域表示,得到卷积结果。
以下是一个简单的MATLAB代码示例,演示如何使用FFT函数进行卷积计算:% 定义输入信号和卷积核x = [1,2,3,4];h = [1,1,1];% 将x和h填充到相同的长度n = length(x) + length(h) -1;x = [x,zeros(1,n-length(x))];h = [h,zeros(1,n-length(h))];% 对x和h进行FFT计算X = fft(x);H = fft(h);% 将x和h进行逐点相乘得到卷积的频域表示Y = X .* H;% 使用IFFT函数将频域表示转换为时域表示,得到卷积结果y = ifft(Y);% 输出卷积结果disp(y);该代码示例中,输入信号x为[1,2,3,4],卷积核h为[1,1,1],将它们填充到相同的长度,进行FFT计算,然后将它们进行逐点相乘得到卷积的频域表示,使用IFFT函数将频域表示转换为时域表示,得到卷积结果。
卷积是信号处理中非常重要的一种数学运算,使用MATLAB中的FFT函数可以方便地进行卷积计算。
数字信号处理实验报告
实验报告课程名称:数字信号处理授课班级:学号:姓名:指导老师:实验一离散时间信号及系统的时域分析实验类别:基础性实验1实验目的:(1)了解MA TLAB 程序设计语言的基本特点,熟悉MA TLAB软件运行环境。
(2)熟悉MA TLAB中产生信号和绘制信号的基本命令,学会用MA TLAB在时域中产生一些基本的离散时间信号,并对这些信号进行一些基本的运算。
(3)通过MA TLAB仿真一些简单的离散时间系统,并研究它们的时域特性。
(4)通过MA TLAB进行卷积运算,利用卷积方法观察分析系统的时域特性。
2. 实验报告要求●简述实验原理及目的。
●结合实验中所得给定典型序列幅频特性曲线,与理论结果比较,并分析说明误差产生的原因以及用FFT作谱分析时有关参数的选择方法。
●记录调试运行情况及所遇问题的解决方法。
3.实验内容:思考题:9.2.1 运行程序P9.2.1,哪个参数控制该序列的增长或衰减:哪个参数控制该序列的振幅?若需产生实指数序列,应对程序作何修改?9.2.2运行程序P9.2.1,该序列的频率是多少?怎样改变它?哪个参数控制该序列的相位?哪个参数可以控制该序列的振幅?该序列的周期是多少?9.2.3 运行程序P9.2.3,对加权输入得到的y(n)与在相同权系数下输出y1(n)和y2(n)相加得到的yt(n)进行比较,这两个序列是否相等?该系统是线性系统吗?9.2.4 假定另一个系统为y(n)=x(n)x(n-1)修改程序,计算这个系统的输出序列y1(n),y2(n)和y(n)。
比较有y(n)和yt(n)。
这两个序列是否相等?该系统是线性系统吗?(提高部分)9.2.5运行程序P9.2.4,并比较输出序列y(n)和yd(n-10)。
这两个序列之间有什么关系?该系统是时不变系统吗?9.2.6 考虑另一个系统:修改程序,以仿真上面的系统并确定该系统是否为时不变系统。
(选做)n = 0:40; D = 10;a = 3.0;b = -2;x = a*cos(2*pi*0.1*n) + b*cos(2*pi*0.4*n);[x1,n1]=sigmult(n,n,x,n)[x2,n2]=sigshift(x,n,1)[y,ny1]= sigadd(x1,n1,x2,n2)[y1,ny11]= sigshift(y,ny1,D)[sx,sn]= sigshift(x,n,D)[sx1,sn1]=sigmult(n,n, sx,sn)[sx2,sn2]=sigshift(sx,sn,1)[y2,ny2]= sigadd(sx1,sn1,sx2,sn2)D= sigadd(y1,ny11,y2,ny22)六、实验心得体会:实验时间批阅老师实验成绩实验二 FFT 实现数字滤波实验类别:提高性实验 1.实验目的(1) 通过这一实验,加深理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好的利用FFT 进行数字信号处理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
洛阳理工学院课程设计报告课程名称数字信号处理课程设计设计题目用FFT实现快速卷积专业通信工程班级学号姓名完成日期2015.06.15课程设计任务书设计题目:用FFT实现快速卷积设计内容与要求:FFT的出现,使DFT在数字通信、语音信号处理、图像处理、功率谱估计、系统分析与仿真、雷达信号处理、光学、地震及数值分析等各个领域都得到广泛应用。
然而,各种应用一般都以卷积和相关运算为依据。
在实际应用中,为了分析时域离散LTI系统或者序列滤波时,需要计算两个序列的线性卷积。
为了提高运算速度,可以利用FFT来实现。
要求:参考课本上第90页的内容(3.4.1 用DFT计算线性卷积),设计并编写程序来实现重叠相加法计算线性卷积。
课程设计评语成绩:指导教师:_______________年月日目录第1章概述 (1)1.1Matlab简介 (1)1.2设计目的 (2)1.3设计原理 (2)1.3.1算法产生背景 (2)1.3.2算法基本思想 (2)第2章程序设计 (5)第3章分析与测试 (7)3.1循环卷积设计 (7)3.2 线性卷积设计 (9)3.3 设计结果 (11)第4章心得体会 (12)参考文献 (13)第1章概述随着信息时代和数字世界的到来,数字信号处理已成为当今一门极其重要的学科和技术领域,数字信号处理在通信、语音、图像、自动控制、医疗和家用电器等众多领域得到了广泛的应用。
任意一个信号都具有时域与频域特性,信号的频谱完全代表了信号,因而研究信号的频谱就等于研究信号本身。
通常从频域角度对信号进行分析与处理,容易从信号的特性获得更加深入的了解。
因此,信号的频谱分析是数字信号处理技术中一种较为重要的工具。
1.1 Matlab简介Matlab语言是当今国际上科学界最具影响力、也是最有活力的软件。
它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。
它是由美国Math Works 公司于1982年推出的软件产品,取名来源于Matrix Laboratory,简称“Matlab”。
Matlab是一个完整的、可扩展的、高性能数值计算的可视化软件,是一种进行科学工程计算的交互式程序设计语言。
它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。
Matlab 语言在各国高校与研究单位起着重大的作用,MatLab控制系统仿真软件是当今国际控制界公认的标准计算软件,1999年春MatLab 5.3版问世,使MATLAB拥有更丰富的数据类型和结构、更友善的面向对象、更加快速精良的图形可视、更广博的数学和数据分析资源、更多的应用开发工具。
特别是Simulink这一个交互式操作的动态系统建模、仿真、分析集成环境的出现,使人们有可能考虑许多以前不得不做简化假设的非线性因素、随机因素,从而即使学生没有对非线性动态系统进行分析研究的数学基础,仍可通过仿真来认知非线性对系统动态的影响。
它的信号处理工具箱包含了各种经典的和现代数字信号处理技术,是一个非常优秀的算法研究与辅助设计工具。
1.2 设计目的1.加深理解FFT在实现快速卷积中的重要作用,更好地利用FFT进行数字信号处理。
2.进一步掌握利用重叠相加法计算线性卷积的方法。
1.3设计原理1.3.1算法产生背景DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。
在形式上,变换两端(时域和频域上)的序列是有限长的。
DFT 具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运算。
对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即y(n) = x(n) * h(n)通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。
因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了DFT 的一个重要应用。
1.3.2算法基本思想重叠相加法是将待过滤的信号分割成长为 N 的若干段,,每一段都可以和有限时宽单位取样回应作卷积,再将过滤后的各段重叠相加。
在实际应用中利用FFT来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需要补很多的零点,这样就需要大的存储量,运算时间也会变长。
所以常用重叠相加法来解决。
如以下情况:h(n)长度为N,x(n)长度为无限长;x(n)取M点,且与N尽量接近;可采用如下方法来解决:x(n)与h(n)的卷积为:重叠相加法示意图:重叠相加法的步骤如下(1)将h(n)补零延长到L =M+ N -1,并计算长为L 的FFT ,得到 H(k)。
(2)分别将xk(n)补零延长到L =M+ N -1,并计算长为L 的FFT ,得到 Xk(k) (3)计算)()()(k H k X k Y k K =,并求长为L 的反变换,即)]([)(k Y IFFT n y k k =(4)将yk(n)的重叠部分相加,最后得到结果为∑∞-∞==k kn yn y )()(。
第2章程序设计2.1程序设计思路1.函数juanji(x1,x2,L)设计:(1) x1(n)进行N点快速傅里叶变换得X1k(2) x2(n)进行N点快速傅里叶变换得X2k(3)进行频域相乘Yk=X1k*X2k(4)对Yk进行反变换得到时域卷积结果y(n)2.函数chongdie(x,h,N)设计:(1)首先取圆周卷积的周期L(即进行L点的快速傅里叶变换)(2)计算每一分段的大小N(3)填充序列使得循环中对序列的索引不会超出范围(4)计算分段数K(5)对序列进行分段调用juanji()函数计算圆周卷积(6)各段重叠相加(7)取出实际的输出序列2.2程序流程图卷积:重叠相加法:第3章分析与测试3.1循环卷积设计1、程序M = length(h);if N <M %为N选择合适的值保证运算正确N = M+1;endL = M+N-1; %循环卷积与线性卷积结果相同时需要进行运算的最少点数Lx = length(x);T = ceil(Lx/N); %确定分段数T t = zeros(1,M-1); %初始化序列t(n)x = [x,zeros(1,(T+1)*N-Lx)]; %不足的分段补零y = zeros(1,(T+1)*N); %生成输出序列y(n),长度足够长for i=0:1:Txi=i*N+1;x_seg = x(xi:xi+N-1); %选择低点数计算时的分段x(n)X1k = fft(x_seg,L); %x_seg做L点FFTX2k = fft(h,L); %h做L点FFTYk = X1k.*X2k; %频域相乘y_seg = ifft(Yk); %FFT反变换得循环卷积结果y_seg(1:M-1)=y_seg(1:M-1)+t(1:M-1); %完成重叠相加t(1:M-1) = y_seg(N+1:L); %重新对t(n)赋值为保留的后M-1点y(xi:xi+N-1)=y_seg(1:N); %直接输出前N个点endy=y(1:Lx+M-1); %取出最终的输出序列2、测试设N=4h=[1,2,3,4]X=[1,2,3,4,5,6,7,8,9]调用系统函数fftfilt(h,x,N)对比生成图像图3-1 设计函数图像图3-2 系统函数fftfilt(h,x,N)3、分析设计函数与系统函数前7个点一样,系统函数没有后4-1=3个点,4为h(n)长度。
设计函数符合要求。
3.2线性卷积设计1、程序Lx=length(A)+length(B)-1; %线性卷积长度l1=length(A)-1; l2=length(B)-1;A=[zeros(1,l2) A zeros(1,l2)]; %A序列前后补零B=fliplr(B); %反转BB=[B,zeros(1,l1+l2)]; %B序列后面补零与A长度相等for i=1:Lx %计算z(i)z(i)=A(1)*B(1);for k=2:length(B)z(i)=z(i)+A(k)*B(k);endt=B(length(B)); %保存B序列最后一个数for j=length(B):-1:2 %B序列依次向后移位B(j)=B(j-1);endB(1)=t;end2、测试设h=[1,3,5,7]X=[9,8,7,6,5,4,3,2,1]调用系统函数conv(h,x)对比生成图像图3-3 设计函数图像图3-4 系统函数conv(h,x)3.3设计结果重叠相加法实现卷积:第4章心得体会数字信号处理作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序和公式枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对数字信号处理的兴趣也在逐渐增加。
在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计结束了,但是从中学到的知识会让我受益终身。
发现、提出、分析、解决问题和实践能力的提高都会受益于我在以后的学习、工作和生活中。
设计过程,好比是我们人类成长的历程,常有一些不如意,但毕竟这是第一次做,难免会遇到各种各样的问题。
在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
我们通过查阅大量有关资料,并在小组中互相讨论,交流经验和自学,若遇到实在搞不明白的问题就会及时请教老师,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。
通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。
这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。
通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。
我觉得作为一名通信专业的学生,数字信号的课程设计是很有意义的。
更重要的是如何把自己平时所学的东西应用到实际中。
虽然自己对于这门课懂的并不多,很多基础的东西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。
我认为这个收获应该说是相当大的。
觉得课程设计反映的是一个从理论到实际应用的过程,但是更远一点可以联系到以后毕业之后从学校转到踏上社会的一个过程。
小组人员的配合﹑相处,以及自身的动脑和努力,都是以后工作中需要的。
最后,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!参考文献[1]刘泉、阙大顺、郭志强,《数字信号处理》,电子工业出版社,2009[2]Ingle.V.K,《数字信号处理(MATLAB版)(第2版)》,西安交通大学出版社,2008[3]张德丰 ,《详解MATLAB 数字信号处理》, 电子工业出版社,2010[4]程佩青,《数字信号处理教程(第3版)》,清华大学出版社,2008[5]张志涌,《MATLAB教程》,北京航天航空大学出版社,2005。