利用FFT实现快速卷积(杭电)
利用FFT实现快速卷积(杭电)
信号、系统与信号处理实验Ⅱ实验报告实验名称:利用FFT 实现快速卷积一、 实验目的1.加深理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好地利用FFT 进行数字信号处理。
2.进一步掌握圆周卷积和线性卷积两者之间的关系。
二、 实验内容与要求1、给定两个序列x(n)=[2,1,1,2],h(n)=[1,-1,-1,1]。
首先直接在时域计算两者的线性卷积;其次用FFT 快速计算二者的线性卷积,验证结果。
2、数字滤波器的脉冲响应为())(2/1-)(2n R n h N n= ,N 2可自定,本实验取N 2=17,输入序列x(n)可选下列几种情况:①)()(1n R n x N =,N 1可自取16 ②)(2cos )(11n R N n n x N π=,N 1=16③)(31)(1n R n x N n⎪⎭⎫ ⎝⎛=, N 1=163、实验前,预先编制一个应用FFT 实现数字滤波器的通用程序。
4、上机独立调试,并打印或记录实验结果。
5、将实验结果与预先笔算的结果比较,验证其正确性。
三、 实验程序与结果1、给定两个序列x(n)=[2,1,1,2],h(n)=[1,-1,-1,1]。
首先直接在时域计算两者的线性卷积;其次用FFT 快速计算二者的线性卷积,验证结果。
clear all;n=[2,1,1,2];m=[1,-1,-1,1];y1n=conv(n,m);ny1=[0:1:length(y1n)-1];stem(ny1,y1n);title('利用conv 函数求线性卷积')figure;N=length(n)+length(m)-1;NK=fft(n,N);MK=fft(m,N);YK=NK.*MK;y2n=ifft(YK,N);x=0:N-1;stem(x,y2n);title('利用fft 方法求线性卷积')2、数字滤波器的脉冲响应为())(2/1-)(2n R n h N n= ,N 2可自定,本实验取N 2=17,输入序列x(n)可选下列几种情况:①)()(1n R n x N =,N 1可自取16 ②)(2cos )(11n R N n n x N π= ,N 1=16 ③)(31)(1n R n x N n ⎪⎭⎫ ⎝⎛= , N 1=16主程序:clear all;n=[0:1:15];m=[0:1:16];xn1=ones(1,16);xn2=cos(2*n*pi/16);xn3=(1/3).^n;hn=(-1/2).^n;y1=ccc(xn1,hn);y2=ccc(xn2,hn);y3=ccc(xn3,hn);定义函数实现利用FFT 实现数字滤波器:function yf = ccc(xn,hn)N1=length(xn);N2=length(hn);N=N1+N2-1;XK=fft(xn,N);HK=fft(hn,N);YK=XK.*HK;yf=ifft(YK,N);if all (imag(xn)==0)&(all(imag(hn)==0))yf=real(yf);x=0:N-1;figure;stem(x,yf);end051015202530051015202530四、仿真结果分析五、实验问题解答与体会六、七、八、九、(注:可编辑下载,若有不当之处,请指正,谢谢!)十、十一、十二、十三、十四、十五、。
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算法
数字信号处理
用一个例子说明计算卷积的基本方法。 例子:设函数 f1(t)=u(t) – u(t-3),f2(t)=e-tu(t),试计算其卷积 y(t)= f1(t)* f2(t)。
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 米,请用数字信号处理的方法探测管道内部的损伤,管道的损伤可能为焊 缝,腐蚀。叙述你的探测原理,方法与结果。 (不是很清楚) 探测原理:因为输油管道不是很长,可以考虑设计滤波器器通过信号测量来测试管道的损伤,当有 焊缝时,所接受的信号会有所损失,当管道式腐蚀时,由于管壁变得不再是平滑的时候,信号的频率 就会有所改变。
1 e 2
u( ) u( 2) e (t ) u(t ) d
e t e 2 u ( )u (t )d e t e 2 u ( 2)u (t )d
4) 定积分限(关键)
3 当 t>3 时,f1(τ )与 f2(t-τ )的图形的图形仅在[0,3]内有重叠,如图 c,所以
综上所述有:
3、 利用卷积的特性计算
卷积作为一种数学运算方法, 具有某些特殊的有用特性。在卷积运算中要注意应用卷积的 特性简化运算,尤其要重视应用奇异函数的卷积特性。 (1) 微积分等效特性
傅里叶变换进行卷积
傅里叶变换进行卷积
傅里叶变换可以用于进行卷积运算。
傅里叶变换将信号从时域转换到频域,因此可以通过对两个信号的傅里叶变换进行点对点乘积来模拟它们在时域中的卷积。
具体来说,假设有两个信号f(t)和g(t),它们的傅里叶变换分别为F(w)和G(w)。
那么,f(t)和g(t)的卷积在频域中的表示为F(w)和G(w)的乘积,即:
卷积结果在频域= F(w) ×G(w)
需要注意的是,傅里叶变换有线性性质,即对于任意常数c1和c2,有:
c1f(t)+c2g(t)↔c1F(w)+c2G(w)c1f(t)+c2g(t)\Rightarrow
c1F(w)+c2G(w)c1f(t)+c2g(t)↔c1F(w)+c2G(w)
因此,卷积运算在频域中也可以表示为两个信号傅里叶变换的和。
另外,卷积运算还有可分离性质,即如果两个信号在时域中的卷积可以表示为其中一个信号在不同时间位置的复制与另一个信号的卷积,那么它们的傅里叶变换的乘积也可以通过将两个信号的傅里叶变换分别进行逆变换后再相乘得到。
需要注意的是,傅里叶变换只是将信号从时域转换到频域的一种工具,卷积运算的本质仍然是在时域中进行的。
快速卷积算法
快速卷积算法
传统的卷积算法需要进行大量的乘法和加法运算,时间复杂度较高。
而快速卷积算法则采用了分治思想,在时间复杂度上有很大的优化。
其中,最常用的快速卷积算法是基于快速傅里叶变换(FFT)的卷积算法。
该算法可以将卷积运算转化为频域上的乘法运算,从而大大提高了计算速度。
另外,还有基于卷积定理的卷积算法和基于卡尔曼滤波的卷积算法等。
总之,快速卷积算法是一种重要的算法,能够在信号处理、图像处理、数字滤波等多个领域中得到广泛应用。
- 1 -。
实验三 FFT在卷积积分和谱分析中的应用
实验三FFT在卷积积分和谱分析中的应用一.实验目的1.在理论学习的基础上,通过本实验,加深对FFT的理解,熟悉FFT子程序。
2.熟悉掌握FFT实现两个序列的线性卷积的方法3.熟悉应用FFT进行信号谱分析过程中可能出现的问题以便在实际中正确应用FFT.4.学习用FFT对连续信号进行谱分析的方法和参数选择原则。
5.掌握用FFT对连续信号进行谱分析时,由模拟信号采样得到序列的X(k)=DFT[xn]中k值与模拟信号实际频率f或w的对应关系。
二.实验原理三.实验内容1.已知序列xn={1/2,1,1,1/2},利用FFT计算线性卷积xn*xn,画出图形。
clc,clear;N=4;M=4;L=N+M;n=0:L-1;xn=[1/2,1,1,1/2];xn=[xn,zeros(1,(L-M))]; Xk=fft(xn,L);Yk=Xk.*Xk;subplot(211)stem(n,xn)title('原序列xn');xlabel('n')ylabel('xn');grid on;subplot(212)yn=ifft(Yk,L);stem(n,yn);title('');xlabel('k');ylabel('线性卷积Yk'); grid on;2.对如下模拟信号进行谱分析Xt=cos(8*pi*t)+cos(16*pi*t)+cos(20*pi*t)选择Fs=64hz,对变换区间N=16,32,64 三种情况进行谱分析。
(1)用stem绘制三种情况下的幅频特性曲线,显示三种情况的谱分辨率F各是多少。
Fs=64;N1=16;N2=32;N3=64;F1=Fs/N1;%F1=4F2=Fs/N2;%F2=2F3=Fs/N3;%F3=1%fk=k*F=k/(N*Ts)=k/Tp;k=0:N-1;f1=0:F1:(N1-1)*F1;f2=0:F2:(N2-1)*F2;f3=0:F3:(N3-1)*F3;Ts=1/Fs;%Ts=1/64n1=0:N1-1;n2=0:N2-1;n3=0:N3-1;Tp1=1/F1;Tp2=1/F2;Tp3=1/F3;t1=0:Ts:Tp1;t2=0:Ts:Tp2;t3=0:Ts:Tp3;xn1=cos(8*pi*t1)+cos(16*pi*t1) +cos(20*pi*t1);%周期= 1/4f1=1/4,f2=1/8 ,f3=1/10hzXk1=fft(xn1,N1);xn2=cos(8*pi*t2)+cos(16*pi*t2) +cos(20*pi*t2);Xk2=fft(xn2,N2);xn3=cos(8*pi*t3)+cos(16*pi*t3) +cos(20*pi*t3);Xk3=fft(xn3,N3);XaKF1=Ts*Xk1;XaKF2=Ts*Xk2;XaKF3=Ts*Xk3;subplot(311);stem(f1,abs(XaKF1)/max(abs(Xa KF1)));title('N=16,Tp=0.5个周期¸ F=4'); xlabel('f/hz');ylabel('幅度');subplot(312);stem(f2,abs(XaKF2)/max(abs(Xa KF2)));title('N=32,Tp=1个周期F=2') xlabel('f/hz');ylabel('幅度');subplot(313);stem(f3,abs(XaKF3)/max(abs(Xa KF3)));title('N=64,Tp=2个周期F=1') xlabel('f/hz');ylabel('幅度');绘制三种情况的功率谱Fs=64;N1=16;N2=32;N3=64;F1=Fs/N1;F2=Fs/N2;F3=Fs/N3;f1=0:F1:(N1-1)*F1; f2=0:F2:(N2-1)*F2; f3=0:F3:(N3-1)*F3; Ts=1/Fs;n1=0:N1-1;n2=0:N2-1;n3=0:N3-1;Tp1=1/F1;Tp2=1/F2;Tp3=1/F3;t1=0:Ts:Tp1;t2=0:Ts:Tp2;t3=0:Ts:Tp3;xn1=cos(8*pi*t1)+cos(16*pi *t1)+cos(20*pi*t1);Xk1=fft(xn1,N1);xn2=cos(8*pi*t2)+cos(16*pi *t2)+cos(20*pi*t2);Xk2=fft(xn2,N2);xn3=cos(8*pi*t3)+cos(16*pi *t3)+cos(20*pi*t3);Xk3=fft(xn3,N3);subplot(311);plot(f1,Xk1.*conj(Xk1)/N1) ;title('N=16,Tp=0.5个周期F=4');xlabel('f/hz');ylabel('功率谱');grid on;subplot(312);plot(f2,Xk2.*conj(Xk2)/N2) ;title('N=32,Tp=1个周期F=2');xlabel('f/hz');ylabel('功率谱');grid on;subplot(313);plot(f3,Xk3.*conj(Xk3)/N3) ;title('N=64,Tp=2个周期F=1); xlabel('f/hz');ylabel('功率谱');grid on(2)四.实验结论问题一:检查N=16,32,64,三种情况下谱峰的出现位置,说明哪个是正确的,哪个是不正确的?为什么?问题二:观察幅频图,根据分辨率读出信号含有的频率分量是多少?问题三:检查有无混叠和泄漏现象?说明产生现象的原因。
fft卷积计算 频域
fft卷积计算频域在信号处理中,卷积是一种重要的运算,用于分析信号的特性。
快速傅里叶变换(FFT)是一种高效计算离散傅里叶变换(DFT)和其逆变换的方法,它在频域中分析信号。
当我们讨论在频域中进行卷积时,通常是指通过快速傅里叶变换(FFT)将信号从时域转换到频域,然后在频域中进行卷积运算,最后再通过逆FFT将结果转换回时域。
以下是使用FFT在频域中进行卷积的基本步骤:1.信号的FFT变换:首先,对两个输入信号进行快速傅里叶变换(FFT),将它们从时域转换到频域。
2.频域卷积:在频域中,两个信号的卷积可以通过对应频率分量的乘积来计算。
3.逆FFT变换:最后,对卷积后的频域信号进行逆FFT变换,将其转换回时域。
在Python中,可以使用numpy库中的fft模块来实现这些操作。
以下是一个简单的示例代码:频域卷积和时域卷积的区别频域卷积和时域卷积的主要区别在于它们处理信号的方式。
在时域中,我们直接对信号进行卷积运算,而在频域中,我们首先使用FFT将信号从时域转换到频域,然后在频域中进行卷积运算。
频域卷积有一些优点,例如它可以更高效地处理长信号,因为FFT可以快速计算傅里叶变换。
此外,在频域中,信号的频率成分是分离的,这使得我们可以更容易地分析信号的频率特性。
然而,需要注意的是,频域卷积可能会引入一些问题,例如频谱泄漏和混叠。
频谱泄漏是指由于信号的傅里叶变换不是完美的,导致频域中的信号能量泄漏到其他频率分量中。
混叠则是指由于信号的频率分量太接近,导致在频域中无法区分它们,从而在时域中出现重叠。
因此,在选择使用频域卷积还是时域卷积时,需要根据具体的应用场景和需求来决定。
fpga 快速傅里叶变换实现卷积
标题:FPGA实现快速傅里叶变换加速卷积的原理与应用在当今信息时代,数字信号处理和数据处理已经成为许多领域中不可或缺的部分。
而在处理这些信号和数据时,快速傅里叶变换(FFT)和卷积运算是常用的数学工具。
在很多实际应用中,由于其高复杂度,这两个运算往往需要花费大量的时间和资源。
然而,通过利用现代的FPGA技术,我们可以实现这些运算的高效加速,本文将探讨如何利用FPGA来加速实现快速傅里叶变换卷积。
1. 背景介绍快速傅里叶变换(FFT)是一种离散傅里叶变换(DFT)的快速算法。
它不仅可以用于频域分析和信号处理,还被广泛应用于图像处理、通信、雷达和生物医学领域等。
而卷积运算则是数字信号处理和图像处理中常见的运算之一,用于实现信号的滤波、特征提取和模式识别等。
然而,这两种运算都具有较高的计算复杂度,特别是在涉及大规模数据时,传统的处理方法往往效率低下。
2. FPGA加速计算的优势FPGA(Field-Programmable Gate Array)是一种灵活可编程的数字集成电路,它通过可编程的逻辑单元和可编程的连接网络,可以实现大规模的并行计算和高速数据处理。
这使得FPGA在加速计算领域具有独特的优势。
与传统的CPU和GPU相比,FPGA可以根据具体的应用需求进行快速定制和优化,提供更高的计算密度和更低的功耗。
利用FPGA来加速实现FFT和卷积运算,可以大幅提高运算速度和效率。
3. FPGA实现快速傅里叶变换在实现FFT时,FPGA可以充分利用其并行计算的特性,通过设计合适的硬件结构和算法,实现FFT运算的高效加速。
可以采用基于蝶形运算单元(Butterfly)的并行计算结构,利用FPGA的片上资源进行数据流控制和计算单元的并行化。
通过巧妙的数据流设计和数据重用策略,还可以有效地减少时序延迟和资源消耗,进一步提高FFT算法的运行速度。
在实际应用中,基于FPGA的FFT加速器已经被广泛应用于通信系统、无线电频谱监测和图像处理等领域。
傅里叶变换求卷积
傅里叶变换求卷积
傅里叶变换是一种广泛应用于信号处理领域的数学工具,其中之一的应用就是求卷积。
卷积是一种在信号处理中常见的操作,它用来表示两个函数之间的关系,比如滤波器和传输信道之间的关系。
在数字信号处理中,卷积通常表示为一个离散的形式。
傅里叶变换可以将卷积运算转化为乘法运算,从而使卷积计算更为高效。
假设有两个离散序列f[n]和g[n],它们的卷积表示为
f[n]*g[n]。
那么,通过傅里叶变换,可以将这个卷积转化为以下形式:
F(w)·G(w)
其中,F(w)和G(w)分别是f[n]和g[n]的傅里叶变换。
因此,只需要对f[n]和g[n]进行傅里叶变换,然后相乘再进行反变换,就可以得到f[n]*g[n]的结果。
这个过程称为傅里叶域卷积。
需要注意的是,在进行傅里叶变换之前,需要对f[n]和g[n]进行零填充,使它们的长度为2的幂。
这样做的目的是为了避免频域混叠现象,表示为傅里叶变换中的折叠。
总之,傅里叶变换是求解卷积问题的强大工具,可用于各种信号处理应用中。
- 1 -。
利用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;。
基于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计算卷积
4点滑动平均系统去噪结果
8 7 6 5 4 3 2 1 0 -1
0
10
20
30
40
50
60
70
问题讨论
若x1[k]为 M 点序列, x2[k]为L 点序列 , L>M
x1[k ]
x2 [ k ]
M-1
k
L -1
k
x1[k] L x2[k]中哪些点不是线性卷积的点?
x1[n ]
x2 [ n ]
0
M -1
L -1
k
y1 [k] k
0
M -1
L -1
例: 已知序列x[k]=k+2,0k12, h[k]={1,2,1}试利用重
叠保留法计算线性卷积, 取L=5 。 解: 重叠保留法
x1[k]={0, 0, 2, 3, 4} x2[k]={3, 4, 5, 6 ,7}
x4[k]={9, 10 , 11, 12,13} y1[k]= x1[k] ⑤h[k]= {11, 4, 2, 7, 12} y2[k]= x2[k] ⑤ h[k]= {23, 17, 16, 20, 24} y3[k]= x3[k] ⑤ h[k]= {35, 29, 28, 32, 36} y4[k]= x4[k] ⑤ h[k]= {47, 41, 40, 44, 48} y5[k]= x5[k] ⑤ h[k]= {12, 37, 52, 41, 14} y[k]={2, 7, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 41, 14}
M-1
n
L-1
n
x1[(-n) L ]RL [n]
x1[(1 - n) L ]RL [n]
实验五利用FFT实现快速卷积
实验课程名称数字信号处理实验工程名称利用FFT实现快速卷积专业电信年级2008级姓名学号所在学院应用科技学院2009年月曰实验准备实验目地(1>加深理解FFT在实现数字滤波<或快速卷积)中地重要作用,更好地利用FFT进行数字信号处理(2>掌握循环卷积和线性卷积两者之间地关系实验环境<1)计算机一台<2) Matlab6.5或以上版本实验内容一•实验原理数字滤波器根据系统地单位脉冲响应h( n>是有限长还是无限长可分为有限长单位脉冲响应<Finite Impulse Response)系统<简记为 FIR系统)和无限长单位脉冲响应<lnfinite Impulse Respons©系统<简记为IIR系统).对于FIR滤波器来说,除了可以通过数字网络来实现外,也可以通过FFT地变换来实现.首先我们知道,一个信号序列x(n>通过FIR滤波器时,其输出应该是x(n>与h(n>地卷积:-bey(n) = x(n)*h(n) = ' x(m)h(n - m)m =.::::当h(n>是一个有限长序列,即h(n>是FIR滤波器,且0乞n乞N -1时N 4y(n)二 ' h(m)x(n -m)m £在数字网络类地FIR滤波器中,普遍使用地横截型结构就是按这个卷积公式构成地应用FFT实现数字滤波器实际上就是用FFT来快速计算有限长度序列地线性卷积 .这种方法就是先将输入信号x(n>通过FFT变换为它地频谱采样值X(k>,然后再和 FIR滤波器地④完成 X(k> 和 H(k>乘积,丫(k) = X(k)H(k)⑤用FFT 计算Y(k >地离散傅里叶反变换得结果,然后用相应地方式把它们结合起来 ,便是总地输出.分段卷积方法主要有两种,即重叠相加法和重 叠保留法.具体内容请参考数字信号处理教材中“快速离散傅里叶变换” 一章中地线性卷积地 法部分,本实验这部分不作重点要求 二、实验内容1 .数字滤波器地脉冲响应为 h(n) =(1/2 $ R N 2(n) ,N 2取8. 输入序列x(n >可选下列几种情况2•实验前,预先计算好x(n)* h(n)地值.3 •实验前,预先编制一个应用 FFT 实现数字滤波器地通用程序 .<或用Matlab 提供地FFT 函数)① x(n) ② x(n) ③ x(n)= R N 1(n),N 1 取 8. 2砧 -cos — N 1 3 R M (n)N 取 8.R N ®) ,N I 取 8. 频响采样值 H(k >相乘,H(k >可事先存放在存储器中,最后再将乘积H(k >X(k >通过快速傅里叶变换 <简称IFFT )还原为时域序列,即得到输出y(n >. 现以FFT 求有限长序列间地卷积及求有限长度序列与较长序列间地卷积为例来讨论FFT 地快速卷积方法.a.序列x(n >和h(n >地长差不多.设x(n >地长为N 1,h(n >地长为N 2,要求N J y(n) = x(n) : y(n) 八 h(m)x(n _ m)m -0用FFT 完成这一卷积地具体步骤如下:①为使两有限长序列地线性卷积可用其循环卷积代替而不发生混叠 ,必须选择循环卷积长度 N _N 1 • N 2 -1,若采用基2-FFT 完成卷积运算 要求N =2m<m 为整数).②用补零方法使 'x(n)x(n >和h(n >变成列长为 N 地序列. h(n)③用FFT 计算 x(n >和h(n >地N 点离散傅里叶变换y(n )=迟[*Y(k)k=0 !_N =柩[丄Y *(k)W 一b.当x(n >长度很长时,即N 1 • • N 2,通常不允许等x(n >全部采集齐后再进行卷积,否则使输出相 对于输入有较长地延时,另外,若N 1 • N 2 -1太大,h(n >要补上太多地零点,很不经济,且FFT 地计算时 间也要很长.为此,采用分段卷积地方法,即把x(n >分成长度与h(n >相仿地一段段,分别求出每段卷积地_nk N nk N FFT 算请同学们做好实验后,以格式为“实验四+学号+姓名”地形式命名文档<例如:实验四120602008001蔡和颜.doc).实验报告提交方式:实验报告以电子文档地形式提交给学习委员学习委员统一交给老师.【参考资料一】1.快速傅立叶变换(FFT>算法长度为N地序列x(n)地离散傅立叶变换X(k)为:N -4X(k)八x(n)W「k,k =0,•…,N -1n =eN点地DFT可以分解为两个 N/2点地DFT,每个N/2点地DFT又可以分解为两个,由N/4点,所以地DFT.依此类推,当N为2地整数次幕时(N = 2M>,由于每分解一次降低一阶幕次通过M次地分解,最后全部成为一系列 2点DFT运算.以上就是按时间抽取地快速傅立叶变换(FFT>算法.当需要进行变换地序列地长度不是2地整数次方地时候,为了使用以2为基地FFT,可以用末尾补零地方法,使其长度延长至 2地整数次方.b5E2RGbCAP序列X(k)地离散傅立叶反变换为N Jnkx(n) X(k)W N, n =0,•…,N-1N y离散傅立叶反变换与正变换地区别在于W N变为W N1,并多了一个1 N地运算.因为W N和1W N对于推导按时间抽取地快速傅立叶变换算法并无实质性区别,因此可将FFT和快速傅立叶反变换<IFFT )算法合并在同一个程序中.p1EanqFDPw2.利用FFT进行频谱分析若信号本身是有限长地序列,计算序列地频谱就是直接对序列进行FFT运算求得X(k), X (k)就代表了序列在0,2二]之间地频谱值.DXDiTa9E3d幅度谱X(k) r J x R(k) • X2(k)XI (k)相位谱「(k)二arctanX R(k)若信号是模拟信号,用FFT进行谱分析时,首先必须对信号进行采样,使之变成离散信号然后就可按照前面地方法用FFT来对连续信号进行谱分析.按采样定理,采样频率f s应大于2倍信号地最高频率,为了满足采样定理,一般在采样之前要设置一个抗混叠低通滤波器.用FFT对模拟信号进行谱分析地方框图如下所示.< 注意:采样信号地频谱要乘以Ts,其主值区间才代表原来模拟信号地频谱)RTCrpUDGiT【参考资料二】1、 fft功能:一维快速傅里叶变换<FFT)调用格式:y=fft(x,n> :采用n点FFT.当x地长度小于 n时,fft函数在x地尾部补零,以构成n点数据;当x地长度大于n时,fft函数会截断序列 x.当x为矩阵时,fft函数按类似方式处理列长度.5PCzVD7HxA2、 fftshift功能:对 fft 地输出进行重新排列 ,将零频分量移到频谱中心调用格式:y=fftshift(x> :对 fft 地输出进行重新排列 ,将零频分量移到频谱中心当 x 为向量时 ,fftshift(x> 直接将 x 中地左右两半交换而产生 y. 当 x 为矩阵时 ,fftshift(x> 同时将 x 地左右、上下进行交换而产生 y。
应用FFT实现信号频谱分析(杭电)
信号、系统与信号处理实验Ⅱ实验报告实验名称:应用FFT 实现信号频谱分析一、实验目的1、能够熟练掌握快速离散傅里叶变换FFT 的原理及应用FFT 进行频谱分析的基本方法。
2、对离散傅里叶变换的主要性质及 FFT 在数字信号处理中的重要作用有进一步的了解。
二、实验内容与要求(2)编写一个调用 FFT 函数的通用程序,可计算下列三种序列的离散频谱。
指数序列: v1(n) = 0.9^n*u(n);周期为 N 的余弦序列:v2(n) = cos(2*pi*n/N) ,且 0≤ n≤ N-1 复合函数序列:v3(n) = 0.9sin(2*pi*n/N) + 0.6sin(2*pi*n*3/N)(3)计算实指数序列 v1(n) 的 N点离散频谱 V1(k), 记录 N为不同的 2 的幂次方时的V1(k) 值,并与理论值 V1(e^jwk ) 进行分析比较。
(4)计算周期为 N 的余弦序列 v2(n) 的 N 点 FFT、2N 点 FFT 及(N+2) 点 FFT,记录结果并作为分析说明。
(5) 已知信号x(t) =0.15sin(2*pi*f1*t)+sin(2*pi*f2*t)-0.1sin(2*pi*f3*t), 其中f1 = 1Hz, f2 =2Hz,f3= 3Hz, 取样频率为 32Hz。
编程实现:① 32 点 FFT,画出其幅度谱。
②64 点 FFT,画出其幅度谱,比较两者间的差异,思考实际频率与离散频谱图中横坐标 k 的对应关系。
三、实验程序与结果指数序列: v1(n) = 0.9^n*u(n);v1(n) 的 N 点离散频谱 V1(k), 记录 N 为不同的 2的幂次方时的 V1(k) 值,并与理论值 V1(e^jwk ) 进行分析比较。
clear allN=16;N1=16;N2=32;N3=64;n=0:N-1;xn=0.9.^n;XK1=fft(xn,N1);magXK1=abs(XK1);phaXK1=angle(XK1);XK2=fft(xn,N2); magXK2=abs(XK2); phaXK2=angle(XK2);XK3=fft(xn,N3); magXK3=abs(XK3); phaXK3=angle(XK3);subplot(4,1,1);plot(n,xn);xlabel('n');ylabel('x(n)');title('x(n) '); subplot(4,1,2);k=0:length(magXK1)-1; stem(k,magXK1);xlabel('k');ylabel('|X(k)|');title('X(k) N1 = 16'); subplot(4,1,3);k=0:length(magXK2)-1; stem(k,magXK2);xlabel('k');ylabel('|X(k)|');title('X(k) N2 = 32'); subplot(4,1,4);k=0:length(magXK3)-1; stem(k,magXK3);xlabel('k');ylabel('|X(k)|');title('X(k) N3 = 64');x(n)1)n(0.5x0 5 10 15nX(k) N1 = 1610|)k( 5X|0 5 10 15kX(k) N2 = 3210|)k( 5X|0 5 10 15 20 25 30 35kX(k) N3 = 6410|)k(5X|10 20 30 40 50 60 70k周期为 N 的余弦序列: v2(n) =cos(2*pi*n/N) ,且 0≤ n≤ N-1;计算周期为 N 的余弦序列 v2(n) 的 N 点 FFT、 2N 点 FFT 及 (N+2) 点 FFT,记录结果并作为分析说明。
杭电_数字信号处理课程设计_实验2
实验2 利用快速离散傅里叶变换分析信号的频谱一、实验目的1、通过这一实验,能够熟练掌握快速离散傅里叶变换FFT的原理及其用FFT 进行频谱分析的基本方法。
2、在通过计算机上用软件实现FFT 及信号的频谱分析。
3、通过实验对离散傅里叶变换的主要性质及FFT 在数字信号处理中的重要作用有进一步的了解。
二、实验要求及内容第一题代码:clear all;N=32;n=0:N-1;xn=sin(2*pi*n/32);subplot(2,1,1);plot(n,xn);ylabel('x(n)');title('x(n) N=32');XK=fft(xn,N);magXK=abs(XK); %幅频特性phaXK=angle(XK); %相频特性subplot(2,1,2);k=0:length(magXK)-1;stem(k,magXK,'.'); %信号幅频特性曲线xlabel('k');ylabel('|X(k)|');title('X(k) N=32');第二题代码:clear all;N=100;n=0:N-1;xn=0.9*sin(2*pi/N*n)+0.6*cos(2*pi/(N/3)*n); subplot(2,1,1);plot(n,xn);xlabel('n');ylabel('x(n)');title('x(n) N=32');XK=fft(xn,N);magXK=abs(XK); %幅频特性phaXK=angle(XK); %相频特性subplot(2,1,2);k=0:length(magXK)-1;stem(k,magXK,'.'); %信号幅频特性曲线xlabel('k');ylabel('|X(k)|');title('X(k) N=100');第三题代码:clear all;N=8;x=[ones(1,8),zeros(1,N-8)];n=0:N-1;X=dft(x,N);magX=abs(X);phaX=angle(X)*180/pi;k=(0:length(magX)'-1)*N/length(magX); subplot(2,2,1);stem(n,x);subplot(2,2,2);stem(k,magX,'.');axis([0,10,0,8]);ylabel('|X(k)| of N=8');N=16;x=[ones(1,8),zeros(1,N-8)];n=0:N-1;X=dft(x,N);magX=abs(X);phaX=angle(X)*180/pi;k=(0:length(magX)'-1)*N/length(magX);subplot(2,2,3);stem(n,x,'.');ylabel('x(n)');subplot(2,2,4);stem(k,magX,'.');axis([0,15,0,8]);ylabel('|X(k)| of N=16');%用到的函数:function[Xk]=dft(xn,N)n=[0:1:N-1];k=[0:1:N-1];WN=exp(-j*2*pi/N);nk=n'*k;WNnk=WN.^nk;Xk=xn*WNnk;End第四题代码:clear all;N3=120;x3=0:1:N3-1;%xn3=[1+cos(2*pi*100*x3)].*cos(2*pi*600*x3);xn3=cos(2*pi*600/3000*x3)+0.5*cos(2*pi*700/3000*x3)+0.5*cos(2*pi*500/3000*x3); subplot(2,2,1);plot(x3,xn3);title('xn3');XK3=fft(xn3,N3);XK3=abs(XK3);subplot(2,2,2);stem(0:length(XK3)-1,XK3,'.');title('XK3 N=120点DFT');N30=128;%xn30=[1+cos(2*pi*100*x30)].*cos(2*pi*600*x30);xn30=cos(2*pi*600/3000*x30)+0.5*cos(2*pi*700/3000*x30)+0.5*cos(2*pi*500/3000*x30); subplot(2,2,3);plot(x30,xn30);title('xn30');XK30=fft(xn30,2*N30);XK30=abs(XK30);subplot(2,2,4);stem(0:length(XK30)-1,XK30,'.');title('XK30 N=128点DFT');三、实验结果与分析:题目一结果与分析:从图像中可以看出,当0≤n≤N-1,N=32时,当且仅当K=1和K=31时,|X(k)|=16,其余点的|X(k)|=0,与笔算结果相同,符合题目要求。
实验3 利用FFT计算线性卷积
实验3 利用FFT计算线性卷积一、实验目的1.掌握利用FFT计算线性卷积的原理及具体实现方法。
2.加深理解重叠相加法和重叠保留法。
3.考察利用FFT计算线性卷积各种方法的适用围。
二、实验设备与环境计算机、matlab软件环境。
三、实验基础理论1.线型卷积和圆周卷积设x(n)为L点序列,h(n)为M点序列,x(n)和h(n)的线性卷积为的长度为L+M-1。
x(n)和h(n)的N点圆周卷积为圆周卷积与线性卷积相等而不产生交叠的必要条件为圆周卷积定理:根据DFT的性质,x(n)和h(n)的N点圆周卷积的DFT 等于它们DFT的乘积2.快速卷积快速卷积算法用圆周卷积实现线性卷积,根据圆周卷积定理利用FFT算法实现圆周卷积。
可以将快速卷积的步骤归纳如下:(1)为了使线性卷积可以用圆周卷积来计算,必须选择;同时为了能使用基-2FFT完成卷积运算,要求。
采用补零的办法使x(n)和h(n)的长度均为N。
(2)计算x(n)和h(n)的N点FFT(3)组成乘积(4)利用IFFT计算Y(K)的IDFT,得到线性卷积y(n)3.分段卷积我们考察单位取样响应为h(n)的线性系统,输入为x(n),输出为y(n),则当输入序列x(n)极长时,如果要等x(n)全部集齐时再开始进行卷积,会使输出相对输入有较大的延时,再者如果序列太长,需要大量存贮单元。
为此我们把x(n)分段,分别求出每段的卷积,合在一起得到最后总的输出。
这种方法称为分段卷积分段卷积可细分为重叠保留法和重叠相加法。
重叠保留法:设x(n)的长度为,h(n)的长度为M。
我们把序列x(n)分成多段N点序列(n),每段与前一段重叠M-1个样本。
由于第一段没有前一段保留信号,为了修正,我们在第一个输入端前面填充M-1个零。
计算每一段与h(n)的圆周卷积,则其每段卷积结果的前M-1个样本不等于线性卷积值,不是正确的样本值。
所以我们将每段卷积结果的前M-1个样本社区,只保留后面的N-M+1个正确输出样本,把这些输出样本合起来,得到总输出。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信号、系统与信号处理实验Ⅱ
实验报告
实验名称:利用FFT 实现快速卷积
一、 实验目的
1.加深理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好地利用FFT
进行数字信号处理。
2.进一步掌握圆周卷积和线性卷积两者之间的关系。
二、 实验内容与要求
1、给定两个序列x(n)=[2,1,1,2],h(n)=[1,-1,-1,1]。
首先直接在时域计算两者的线性卷积;其次用FFT 快速计算二者的线性卷积,验证结果。
2、数字滤波器的脉冲响应为())(2/1-)(2n R n h N n
= ,N 2可自定,本实验取N 2=17,输入序列x(n)可选下列几种情况:
①)()(1n R n x N =,N 1可自取16 ②)(2cos )(11
n R N n n x N π=,N 1=16
③)(31)(1n R n x N n
⎪⎭⎫ ⎝⎛=, N 1=16
3、实验前,预先编制一个应用FFT 实现数字滤波器的通用程序。
4、上机独立调试,并打印或记录实验结果。
5、将实验结果与预先笔算的结果比较,验证其正确性。
三、 实验程序与结果
1、给定两个序列x(n)=[2,1,1,2],h(n)=[1,-1,-1,1]。
首先直接在时域计算两者的线性卷积;其次用FFT 快速计算二者的线性卷积,验证结果。
clear all;
n=[2,1,1,2];
m=[1,-1,-1,1];
y1n=conv(n,m);
ny1=[0:1:length(y1n)-1];
stem(ny1,y1n);
title('利用conv 函数求线性卷积')
figure;
N=length(n)+length(m)-1;
NK=fft(n,N);
MK=fft(m,N);
YK=NK.*MK;
y2n=ifft(YK,N);
x=0:N-1;
stem(x,y2n);
title('利用fft 方法求线性卷积')
2、数字滤波器的脉冲响应为())(2/1-)(2n R n h N n
= ,N 2可自定,本实验取N 2=17,输入序列x(n)可选下列几种情况:
①)()(1n R n x N =,N 1可自取16 ②)(2cos )(1
1
n R N n n x N π= ,N 1=16 ③)(31)(1n R n x N n ⎪⎭
⎫ ⎝⎛= , N 1=16
主程序:
clear all;
n=[0:1:15];
m=[0:1:16];
xn1=ones(1,16);
xn2=cos(2*n*pi/16);
xn3=(1/3).^n;
hn=(-1/2).^n;
y1=ccc(xn1,hn);
y2=ccc(xn2,hn);
y3=ccc(xn3,hn);
定义函数实现利用FFT 实现数字滤波器:
function yf = ccc(xn,hn)
N1=length(xn);
N2=length(hn);
N=N1+N2-1;
XK=fft(xn,N);
HK=fft(hn,N);
YK=XK.*HK;
yf=ifft(YK,N);
if all (imag(xn)==0)&(all(imag(hn)==0))
yf=real(yf);
x=0:N-1;
figure;
stem(x,yf);
end
05
1015202530
0510********
四、仿真结果分析
五、实验问题解答与体会
Welcome !!! 欢迎您的下载,资料仅供参考!。