重叠相加法实现卷积

合集下载

基于重叠保留法的圆周卷积

基于重叠保留法的圆周卷积

1.理论知识1.1圆周卷积的定义设)(1n x 和)(2n x 为长度为N 的有限长序列,且[])()(11k X n x DFT =,[])()(22k X n x DFT =,如果()()()k X k X k Y 21=,则()()[]k Y IDFT n y =()()()()n R m n x m x N N N m -=∑-=1102 (1)证明:相当于将)(~),(~21n x n x 作周期卷积和后,再取主值序列。

将)(k y 周期延拓:)(~)(~~21k X k X k Y =)(则有: []()()⎥⎦⎤⎢⎣⎡-=-==∑∑-=-=10211021))(()(~)(~)(~)(~N m N N N m m n x m x m n x m x k Y IDFS n y在主值区间)())((,1011m x m x N m N =-≤≤ ,所以:()()()n R m n x m x n R n y n y N N m N N ⎥⎦⎤⎢⎣⎡-==∑-=1021)()()(~)( 同样可以证明:()())()()(1012n R m n x m x n y N N m N ⎥⎦⎤⎢⎣⎡-=∑-=定义式(1)为序列)(1n x 与)(2n x 的圆周卷积,习惯表示为 ()()()n n x y 21x ⊙n =从以上的证明过程也可以得出圆周卷积与周期卷积之间的关系,即有限长序列圆周卷积结果的周期延拓等于它们周期延拓后的周期卷积。

也就是说,周期卷积的主值序列是各周期序列主值序列的圆周卷积。

1.2圆周卷积的计算圆周卷积的具体步骤为:第一步:在哑元坐标上做)(1m x 与)(2m x ;第二步:把)(2m x 沿着纵坐标翻转,得到)(2m x -; 第三步:对)(2m x -做圆周移位,得()()()n R m n x N N -2;第四步:)(1m x 与()()()n R m n x N N -2对应的相同m 的值进行相乘,并把结果进行相加,得到的对应于自变量n 的一个()n y ;第五步:换另一个n ,重复第三、四步,直到n 取遍[0,N-1]中的所有值,得到完整的()n y 。

北邮《数字信号处理》Matlab实验——实现重叠相加和重叠保留算法完成线性卷积的分段计算

北邮《数字信号处理》Matlab实验——实现重叠相加和重叠保留算法完成线性卷积的分段计算
实验题目 1:线性卷积的分段计算
实验目的:
实现重叠相加和重叠保留算法,完成线性卷积的分段计算(可任意指定 x(n)及 h(n)) 。
试验内容:
1、对算法的概括性说明
重叠相加法是将待过滤的信号分割成长为 N 的若干段,每一段都可以和有限时宽单位 取样响应作卷积,再将过滤后的各段重叠相加。建立缓存序列,每次输入 N 点序列,通过 计算 x(n)和 h(n) 的循环卷积实现线性卷积运算,将缓存的 M‐1 点序列和卷积结果相加,并 输出前 N 点作为计算结果,同时缓存后 M‐1 点,如此循环,直至所有分段计算完毕,则输 出序列 y(n)为最终计算结果。
5、总结实验过程中出现的问题以及解决问题的具体措施
1.利用自定义函数解决代码重复使用的问题,避免多次输入同样代码。 2.构造分段补零不会实现,通过上网查资料后获得实现相关功能的代码。
可见, 用重叠相加法和重叠保留发分别计算的卷积结果与直接利用线性卷积计算的结果 一致。算法正确性得以验证。
4、结合教材 3.5.1 节作运算量分析
若有限长因果序列 x(n)和 h(n)的长度分别为 N 和 M,计算其线性卷积 y(n),需 MN 次乘 法运算,(M‐1)(N‐1)次加法运算。如果利用循环卷积方法,按基 2 时域抽选法实现 L 点 FFT 和 IFFT,需
3、实验结果
输入(参考教材例 3.4、3.5) :
n = 0:9; xn = n+1; hn = [1,0,-1]; N = 6;
y1 = conv(hn, xn) y2 = overlap_add(xn, hn, N) y3 = overlap_save(xn, hn, N)
输出:
y1 = 1 y2 = Columns 1 through 10 1.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2.0000 2 2 2 2 2 2 2 2 2 -9 -10

通过重叠相加法实现卷积

通过重叠相加法实现卷积

数字信号处理课程设计题目:通过重叠相加法实现卷积院系:自动化与信息工程学院专业:通信工程班级:通信092学号:3090432051姓名:侯鹏指导教师:吴鹏飞2012年6月23日-2012年6月30日设计任务通过重叠相加法实现卷积(C语言或MATLAB实现)。

计算一个给定序列与输入序列的卷积。

功能对给定的数据进行卷积计算,要求分算卷积由循环卷积实现要求设计有数据导入界面,各种参数可以由软件界面输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。

设计步骤:1)初步完成总体设计,搭好框架,确定人机对话界面,确定函数功能,控制参数的输入方法;2)设计线性卷积的实现方案;3)编写两序列做循环卷积的程序;4)通过直接作线性卷积来检验最后结果;设计要求:1)用结构化设计方法。

一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计要画出流程图;2)输入输出界面要友好;3)源程序书写要规范,加必要的注释;4)要提供直接通过卷积进行检验的结果;5)程序一定要能运行起来。

课程设计的最后结果是提交一份实验报告,内容包括:1)程序的设计思想,包括功能描述,函数接口的确定;2)流程图;3)程序源代码(需打印);4)测试方法和结果;5)小结。

一、原理<一>设计思想:运用分段处理方法中的重叠相加法计算两个序列的卷积运算。

设一个给定序列是长度为n1的A,另一个导入序列是长度为n2的B,其中B 序列 是相对A 序列比较长的,所以可以把B 分为和A 一样长的若干段段,即B 分后每一小段长度为n1。

根据书上的公式:)()(*)()(*)()(*)()(0n y n x n A n B n A n B n A n y k k k k k k ∑∑∑∞-∞=∞=====可知将B 序列的每一小段与A 序列做现行卷积,然后将所有的n2/n1段的线性卷积结果相加起来就是整个B 序列和A 序列的线性卷积结果,而又在本设计中,B 序列的一小段和A 序列的线性卷积又可由循环卷积来实现,只要让循环卷积的点数121-+≥n n L ,循环卷积的结果就和线性卷积的结果等价,在本实验中取112-⨯=n L ,故A 序列和B 序列的线性卷积可认为是由A 序列和B 的每一小段做112-⨯=n L 点的循环卷积的最终累加和,另外还有两个个问题需要考虑,首先是做循环卷积时要对A 序列和B 序列的那一小段补零做卷积后,最终做累加的时候要考虑重叠的片段,必须将重叠的两段加起来。

重叠相加法和重叠保留法的原理与实现

重叠相加法和重叠保留法的原理与实现

重叠相加法与重叠保存法的原理实现侯凯(吉林大学 通信工程学院 吉林 长春 130012)0概述线性卷积是求离散系统响应的主要方法之一,许多重要应用都建立在这一理论基础上,如卷积滤波等。

用圆周卷积计算线性卷积的方法归纳如下:将长为N 2的序列x(n)延长到L,补L -N 2个零,将长为N 1的序列h(n)延长到L,补L -N 1个零。

如果L ≥N1+N2-1,则圆周卷积与线性卷积相等,此时,可有FFT 计算线性卷积,方法如下:a.计算X(k)=FFT[x(n)]b.求H(k)=FFT[h(n)]c.求Y(k)=H(k)Y(k) k=0~L -1d.求y(n)=IFFT[Y(k)] n=0~L -1可见,只要进行二次FFT,一次IFFT 就可完成线性卷积计算。

上述结论适用于x(n)、h(n)两序列长度比较接近或相等的情况,如果x(n)、h(n)长度相差较多。

例如,h(n)为某滤波器的单位脉冲响应,长度有限,用来处理一个很长的输入信号x(n),或者处理一个连续不断的信号,按上述方法,h(n)要补许多零再进行计算,计算量有很大的浪费,或者根本不能实现。

为了保持快速卷积法的优越性,可将x(n)分为许多段后处理,每小段的长与h(n)接近,其处理方法有两种:重叠相加法和重叠保留法。

1重叠相加法——由分段卷积的各段相加构成总的卷积输出假定x i (n)表示图中第i 段x(n)序列如下图:22()(1)1()0i x n iN n i N x n ≤≤+-⎧=⎨⎩则输入序列可表为:()()i i x n x n ∞=-∞=∑图1 长序列分段滤波于是输出可分解为: ()()*()()*()()i i i i i y n x n h n x n h n y n ∞∞=-∞=-∞===∑∑其中 ()()*()i i y n x n h n =由此表明,只要将x(n)的每一段分别与h(n)卷积,然后再将这些卷积结果相加起来就可得到输出序列,这样,每一段的卷积都可用上面讨论的快速卷积来计算。

【含源代码】北邮dsp-MATLAB试验一重叠相加和重叠保留

【含源代码】北邮dsp-MATLAB试验一重叠相加和重叠保留

Dsp-matlab实验实验一:重叠相加法和重叠保留法的实现设计报告课题名称:学生姓名:级:班班内序号:学号:2015/06/15 日期:目录一、实验原理·········································二、Matlab源代码·································运行结果Matlab三、····························结果分析Matlab四、····································五、遇到的难题与解决方法····························参考文献·························································一、实验原理1、算法来源DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。

利用FFT计算卷积

利用FFT计算卷积

利用FFT 计算卷积一.线卷积的作用及定义线卷积包括卷积积分和卷积和。

1.线卷积的作用求解线性系统对任意激励信号的零态响应。

2.卷积积分)(*)(d )()()(t h t x t h x t y =-=⎰∞∞-τττ3.卷积和离散系统的时域分析是,已知离散系统的初始状态和输入信号(激励),求离散系统的输出(响应),两种方法:递推解法和离散卷积法。

卷积和:)()()()()(n h n x m n h m x n y m *=-=∑∞-∞= 二.圆周卷积的定义圆周移位:一周期为N 的周期序列, 可视为一主值序列在圆周上的循环移位。

周期序列在时间轴上左移右移m 反时针转称为圆周移位。

时域圆周卷积(循环卷积))()()(n h n x n y ⊗=()()()∑-=-=10)(N m N N n R m n h m x条件:两序列实现圆卷积的条件是:长度相等,如果不相等, 可通过增补零值来使之相等。

特点:卷积求和范围只在10-≤≤N m 有限区间进行;卷积时不作反褶平移, 而是反褶圆移步骤:量置换→反褶→圆移→相乘→求和。

三.两者的关系有限长序列的圆卷积和线卷积的关系在一般情况下,两序列的圆卷积和线卷积是不相等的,这是因为:线卷积是平移, 结果长度为121-+=N N L ;而圆卷积是圆移,结果长度为21N N L ==。

只有在两卷积的结果长度相时,二者才有相同的结果。

解决方法是:在作圆卷积时,通过加零的方法,使两序列的长度都增加到121-+=N N L ,此时,圆卷积的结果和线卷积同。

四.利用FFT 计算卷积工程实际需要解决的卷积:)()()(n h n x n y *=,但其计算量很大。

而圆卷积为:)()()(n h n x n y ⊗=,便于采用FFT 算法, 故计算速度快。

若将线卷积的两个序列用增补零的方法将长度取为一致,此时两序列的离散线卷积和圆周卷积结果是相等的,这样就则可以通过圆卷积来快速计算线卷积。

DFT计算卷积

DFT计算卷积

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}
x2 [0] x [1] 2 x [ M 1] 2 x [ L 1] 2 0 x1[0] x2 [ L M - 2]
x1[0] x1[1] x1[ M - 2] x1[ M - 1] x1[0] x1[ M - 3] x1[ M - 2] x1[0] x1[1]
2. 重叠保留法(overlap save) 方法:
(1) 将x[k]长序列分段,每段长度为L。
(2) 各段序列xn[k]与 M点短序列h[k]循环卷积。
(3) 从各段循环卷积中提取线性卷积结果。
因yn[k]=xn [k] L h[k] 前M-1个点不是线性卷积的点, 故分段时,每段与其前一段有M-1个点重叠。

数字信号处理期末试卷(共七套)

数字信号处理期末试卷(共七套)

第一套试卷学号 姓名 成绩一、 选择题(每题3分,共5题) 1、)63()(π-=n j en x ,该序列是 。

A.非周期序列B.周期6π=N C.周期π6=N D. 周期π2=N2、序列)1()(---=n u a n x n ,则)(Z X 的收敛域为 。

A.a Z <B.a Z ≤C.a Z >D.a Z ≥3、若一线性移不变系统当输入为x(n)=δ(n)时输出为y(n)=R 3(n),则当输入为u(n)-u(n -2)时输出为 。

A.R 3(n)B.R 2(n)C.R 3(n)+R 3(n -1)D.R 2(n)+R 2(n -1) 4、)()(101n R n x =,)()(72n R n x =,用DFT 计算二者的线性卷积,为使计算量尽可能的少,应使DFT 的长度N 满足 。

A.16>NB.16=NC.16<ND.16≠N5.已知序列Z 变换的收敛域为|z |<1,则该序列为 。

A.有限长序列 B.右边序列 C.左边序列 D.双边序列 二、填空题(每题3分,共5题)1、离散时间信号,其时间为 的信号,幅度是 。

2、线性移不变系统的性质有__ ____、___ ___和分配律。

3、要想抽样后能够不失真的还原出原信号,则抽样频率必须 ,这就是奈奎斯特抽样定理。

4、序列R 4(n)的Z 变换为_____ _,其收敛域为____ __。

5、对两序列x(n)和y(n),其线性相关定义为 。

三、10)(-≤≥⎩⎨⎧-=n n ba n x nn求该序列的Z 变换、收敛域、零点和极点。

(10分)四、求()()112111)(----=z z Z X ,21<<z 的反变换。

(8分)五、已知两个有限长序列如下图所示,要求用作图法求。

(10分)六、已知有限序列的长度为8,试画出按频率抽选的基-2 FFT算法的蝶形运算流图,输入为顺序。

(10分)七、问答题:数字滤波器的功能是什么?它需要那几种基本的运算单元?写出数字滤波器的设计步骤。

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

设计任务计算1个给定序列与输入序列的卷积。

功能:对给定的数据进行卷积运算,要求分段卷积由循环卷积实现。

要求设计有数据导入界面,各种参数从软件界面可以输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。

要求:1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数功能,控制参数的输入方法;2)设计线性卷积的实现方案;3)编写两序列作循环卷积的程序;4)通过直接做线性卷积来检验最后结果。

设计步骤:1)用结构化设计方法。

一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计应画出流程图;2)输入输出界面要友好;3)源程序书写要规,加必要的注释;4)要提供通过直接卷积进行检验的结果;5)程序一定要要能运行起来。

一、原理1、算法产生背景DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。

在形式上,变换两端(时域和频域上)的序列是有限长的。

DFT 具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运算。

对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即y(n)=x(n)*h(n)通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。

因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了DFT 的一个重要应用。

2、算法基本思想重叠相加法是将待过滤的信号分割成长为 N 的若干段,,每一段都可以和有限时宽单位取样回应作卷积,再将过滤后的各段重叠相加。

在实际应用中利用FFT来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需要补很多的零点,这样就需要大的存储量,运算时间也会变长。

所以常用重叠相加法来解决。

如以下情况:h(n)长度为N,x(n)长度为无限长x(n)取M点,且与N尽量接近可采用如下方法来解决重叠相加法的卷积示意图∑∞-∞==k kn x n x )()()()()(kM n R n x n x M k -= x(n)与h(n)的卷积为)(*)()(*)()(n x n h n h n x n y k k ∑∞-∞===)()](*)([n y n h n x k k kk ∑∑∞-∞=∞-∞===重叠相加法的步骤如下(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 y n y )()(二、程序设计1、程序设计思路函数juanji(x1,x2,L)设计(1) x 1(n)进行N 点快速傅里叶变换得X1k (2) x 2(n)进行N 点快速傅里叶变换得X2k (3) 进行频域相乘Yk=X1k*X2k(4) 对Yk 进行反变换得到时域卷积结果y(n) 函数chongdie (x,h,N )设计(1)首先取圆周卷积的周期L (即进行L 点的快速傅里叶变换) (2)计算每一分段的大小N(3)填充序列使得循环中对序列的索引不会超出围 (4)计算分段数K(5)对序列进行分段调用juanji()函数计算圆周卷积 (6)各段重叠相加 (7)取出实际的输出序列2、程序流程图重叠相加法卷积三、分析与测试1、循环卷积设计①程序M = length(h);if N <M %为N选择合适的值保证运算正确N = M+1;endL = M+N-1; %循环卷积与线性卷积结果相同时需要进行运算的最少点数Lx = length(x);T = ceil(Lx/N); %确定分段数Tt = 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); %取出最终的输出序列②测试设N=4h=[1,2,3,4]X=[1,2,3,4,5,6,7,8,9]调用系统函数fftfilt(h,x,N)对比生成图像设计函数图形系统函数fftfilt(h,x,N)③分析设计函数与系统函数前7个点一样,系统函数没有后4-1=3个点,4为h(n)长度。

设计函数符合要求。

2、线性卷积设计①程序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;end②测试设h=[1,3,5,7]X=[9,8,7,6,5,4,3,2,1]调用系统函数conv(h,x)对比生成图像设计函数图形系统函数conv(h,x)③分析设计函数与调用系统函数结果完全相同,设计函数符合要求。

四、实验结果1、实验源程序见附录2、实验结果五、总结作为电子信息工程系的学生,数字信号处理这门课程是其他很多课程的基础,所以学好学通数字信号处理这门课程对我们来说是非常重要的。

而MATLAB这款软件对数字信号处理的建模、编程、分析、实现有极大的帮助作用,所以我们应该掌握使用MATLAB编程来实现对数字信号的处理。

此次我得到的课设题目是:通过重叠相加法计算卷积。

拿到课设题目后,我仔细研究了与题目相关的原理,包括线性卷积、周期卷积、圆周卷积、重叠相加法、离散福利叶变换DFT、快速傅里叶变换FFT等原理知识,弄清楚了它们之间的关系。

通过这次课程设计,我不仅顺利完成课程设计的要求,而且在课程设计过程过对相关原理的回顾,对各相关原理之间的关系有了脱胎换骨般的认识,让我意识到此前学到的知识是多么的浅薄。

在和同组同学一起讨论研究通基于重叠相加法的圆周卷积原理后,我开始了利用MATLAB来实现这个功能。

在编写程序的过程中,我查阅了很多有关MATLAB的编程知识,通过整合所查阅到的编程知识,结合先前研究的基于重叠相加法的圆周卷积原理,我设计了具有此功能的MATLAB函数。

在设计时我遇到了不少的问题,刚开始时我先设定分段长度N,然后由N来求卷积周期L。

但是在程序运行过程中我发现算法具有很大的局限性。

通过仔细揣摩这其中的问题,原来是我忽略了FFT 运算的条件。

所以我制定了第二个方案,先设定卷积的周期L,然后由L来求分段长度N,这样程序的适用围就扩大了。

为了提高程序的适用性,我不断的对程序进行修改和测试,以求能够达到更好的效果,这个过程让我体会到了编程解决问题的乐趣。

通过这次课程设计,让我加深了对书本知识的理解,并应用课本的理论知识,结合相关软件,设计解决问题的算法。

从而提高了由知识转换为技能的能力,提高了自己的实践能力。

通过与同学的互相沟通,不仅使各自的知识得到了扩充,而且从中得到了很多的启示,这次课程设计让人受益匪浅。

六、参考文献【1】高西全、丁玉美.数字信号处理第三版.电子科技大学.2008.【2】罗建军、琦.精讲多练MATLAB.:交通大学.2002.【3】泉、阙大顺、郭志强.数字信号处理.电子工业.2009.【4】程卫国.MATLAB53精要编程及高级应用.:机械工业.2000.【5】正周.MATLAB数字信号处理与应用.: 清华大学.2008.【6】周建兴、岂兴明等编. MATLAB从入门到精通.人民邮电.2008【7】徐金明、孟喜、丁涛编. Matlab实用教程.清华大学,交通大学.2007. 附录:源程序function varargout = zc(varargin)%ZC M-file for zc.fig% ZC, by itself, creates a new ZC or raises the existing% singleton*.%% H = ZC returns the handle to a new ZC or the handle to% the existing singleton*.%% ZC('Property','Value',...) creates a new ZC using the% given property value pairs. Unrecognized properties are passed via % varargin to zc_OpeningFcn. This calling syntax produces a% warning when there is an existing singleton*.%% ZC('CALLBACK') and ZC('CALLBACK',hObject,...) call the% local function named CALLBACK in ZC.M with the given input% arguments.%% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one% instance to run (singleton)".%% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help zc% Last Modified by GUIDE v2.5 30-Jun-2010 22:11:29% Begin initialization code - DO NOT EDITgui_Singleton = 1;gui_State = struct('gui_Name', mfilename, ...'gui_Singleton', gui_Singleton, ...'gui_OpeningFcn', zc_OpeningFcn, ...'gui_OutputFcn', zc_OutputFcn, ...'gui_LayoutFcn', [], ...'gui_Callback', []);if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); elsegui_mainfcn(gui_State, varargin{:});end% End initialization code - DO NOT EDIT% --- Executes just before zc is made visible.function zc_OpeningFcn(hObject, eventdata, handles, varargin)% This function has no output args, see OutputFcn.% hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% varargin unrecognized PropertyName/PropertyValue pairs from the % command line (see VARARGIN)% Choose default command line output for zchandles.output = hObject;% Update handles structureguidata(hObject, handles);% UIWAIT makes zc wait for user response (see UIRESUME)% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line. function varargout = zc_OutputFcn(hObject, eventdata, handles)% varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)% Get default command line output from handles structurevarargout{1} = handles.output;function aa_Callback(hObject, eventdata, handles)% hObject handle to aa (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of aa as text% str2double(get(hObject,'String')) returns contents of aa as a double% --- Executes during object creation, after setting all properties. function aa_CreateFcn(hObject, eventdata, handles)% hObject handle to aa (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispcset(hObject,'BackgroundColor','white');elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')) ;endfunction bb_Callback(hObject, eventdata, handles)% hObject handle to bb (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of bb as text% str2double(get(hObject,'String')) returns contents of bb as a double% --- Executes during object creation, after setting all properties. function bb_CreateFcn(hObject, eventdata, handles)% hObject handle to bb (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispcset(hObject,'BackgroundColor','white');elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')) ;endfunction ll_Callback(hObject, eventdata, handles)% hObject handle to ll (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,'String') returns contents of ll as text% str2double(get(hObject,'String')) returns contents of ll as a double% --- Executes during object creation, after setting all properties. function ll_CreateFcn(hObject, eventdata, handles)% hObject handle to ll (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFcns called% Hint: edit controls usually have a white background on Windows.% See ISPC and COMPUTER.if ispcset(hObject,'BackgroundColor','white');elseset(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')) ;% --- Executes on button press in tt.function tt_Callback(hObject, eventdata, handles)% hObject handle to tt (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)N=str2num(get(handles.ll,'string'));a=str2num(get(handles.aa,'string'));b=str2num(get(handles.bb,'string'));h=a;x=b;M = length(h);if N <M %为N选择合适的值保证运算正确N = M+1;endL = M+N-1; %循环卷积与线性卷积结果相同时需要进行运算的最少点数Lx = length(x);T = ceil(Lx/N); %确定分段数Tt = 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); %取出最终的输出序列%------------------------线性卷积程序------------------------------A=a;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;endxx=conv(a,b);yy=fftfilt(a,b,N);axes(handles.axes1)plot(a)axes(handles.axes2)plot(b)axes(handles.axes3)plot(y)axes(handles.axes4)plot(z)axes(handles.axes5)plot(yy)axes(handles.axes6)plot(xx)% --- Executes on button press in tt2.function tt2_Callback(hObject, eventdata, handles)% hObject handle to tt2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)N=str2num(get(handles.ll,'string'));a=str2num(get(handles.aa,'string'));b=str2num(get(handles.bb,'string'));h=a;x=b;M = length(h);if N <MN = M+1;endL = M+N-1;Lx = length(x);T = ceil(Lx/N);t = zeros(1,M-1);x = [x,zeros(1, (T+1)*N-Lx)];y = zeros(1, (T+1)*N);for i=0:1:Txi=i*N+1;x_seg = x(xi:xi+N-1);X1k = fft(x_seg,L);X2k = fft(h,L);Yk = X1k.*X2k;y_seg = ifft(Yk);y_seg(1:M-1) = y_seg(1:M-1)+t(1:M-1); t(1:M-1) = y_seg(N+1:L);y(xi:xi+N-1) = y_seg(1:N);endy=y(1:Lx+M-1);A=a;B=b;Lx=length(A)+length(B)-1;l1=length(A)-1;l2=length(B)-1;A=[zeros(1,l2) A zeros(1,l2)];B=fliplr(B);B=[B,zeros(1,l1+l2)];for i=1:Lxz(i)=A(1)*B(1);for k=2:length(B)z(i)=z(i)+A(k)*B(k);endt=B(length(B));for j=length(B):-1:2 B(j)=B(j-1);endB(1)=t;endxx=conv(a,b);yy=fftfilt(a,b,N);axes(handles.axes1)stem(a)axes(handles.axes2)stem(b)axes(handles.axes3)stem(y)axes(handles.axes4)stem(z)axes(handles.axes5)stem(yy)axes(handles.axes6)stem(xx)。

相关文档
最新文档