-
2021-05-22 16:59:10
与《重叠相加法计算线性卷积》相关的范文
2 圆周卷积原理 2.1 圆周卷积定义 有两个有限长序列x 1(n ) 和x 2(n ) .设x 1(n ) 和x 2(n ) 的长度分别为N1和N2,N=max[N1, N2]. ⎧x (n ) 0≤n ≤N 1-1 x 1(n ) =⎨1 N 1≤n ≤N -1⎩0 X 3(k )=X 1(k )·X 2(k ) 则 ⎧x (n ) 0≤n ≤N 2-1 x 2(n ) =⎨2 N 2≤n ≤ ...
现代信号处理 学号 0212755 专业 交通信息工程及控制 姓名 张 锐 学院 光电技术与智能控制教育部重点实验室 2012·12 第一题 题目:x (t ) =cos(5⨯π⨯t ) ,频率f=5/2Hz,周期T=1/f=2/5s. 1.采样频率f s =4Hz 2.采样频率f s =10Hz >2f m =5Hz ,不失真采样,对x(t)进行间隔采样周期Ts=0.1s的采样,如采集8个 ...
2-1 试求如下序列的傅里叶变换: (1)x 1(n ) =δ(n -n 0) (2)x 12(n ) = 2δ(n +1) +δ(n ) -1 2 δ(n -1) (3)x 3(n ) =a n u (n +2), 0 (4)x 4(n ) =u (n +3) -u (n -4) ∞ n (5)x ⎛1⎫ 5(n ) =∑ ⎝4⎪⎭ δ(n -3k ) k =0(6)x ⎧cos (π), -1 ...
大连理工大学实验预习报告 学院(系): 信息与通信工程 专业: 通信 班级: 电通1101 姓 名: 殷青 学号: 201181227 实验时间: 2014.4.23 实验室: 创C221 实验一 线性卷积与圆周卷积 一. 实验目的和要求 理解离散序列的线性卷积与圆周卷积的原理,比较其相同和不同点,掌握线性卷积与圆周卷积的计算步骤和计算方法,能熟练使用Matlab的相关命令. 二. 实验原理和内容 ...
只适用于卷积算法或者计算原理与卷积一样的,比如分母为1的滤波算法. MATLAB 实验代码: clear all; b=[1,2,3,4,5,4,3,2,1]; a=1; x=[1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0]; lenb=leng ...
一.选择题 1. 某系统y (k ) =kx (k ) ,则该系统( ). A. 线性时变 B. 线性非时变 C. 非线性非时变 D. 非线性时变 2. 因果稳定系统的系统函数H (z ) 的收敛域是( ). A. z 1. 1 D. z >0. 9 3. x (k ) =3sin(0.5πk ) 的周期( ). A.4 B.3 C.2 D.1 4. 下列序列中为共轭对称序列的是( ) A. ...
判断题(画√或×,每题1分) 1.全息技术分为两个过程,第一个过程是利用干涉原理将物光波前以干涉条纹的形式记录下来,再用光波照射全息图,可以再现原始物光波. () 2.同轴全息是在记录物体的全息图时,参考光和物光波来自同轴方向,光照射全息图的透射光波中包含四项,都在同一方向无法分离. () 3.离轴全息消除了同轴全息图孪生像的相互干扰,离轴全息图在记录过程中,参考光和信号光不在同一方向. () 4 ...
用MATLAB 设计循环卷积系统仿真 专 业: 电子信息工程 学 号: 姓 名: 2014年12月 一.实验目的 (1) 熟悉使用MATLAB 软件. (2) 学会调用MATLAB 信号处理工具的设计函数. (3) 对循环卷积有更深的认识和理解. 二.实验原理和步骤 1.卷积的定义: 任意信号 都可以根据不同需要进行不同的分解.如信号 可以分解为直 流分量和交流分量,也可以分解为奇分量和偶分量,或 ...
※※※※※※※※※ ※2009级信号系统 ※ ※※※※ 课程设计 ※※※※※ ※ ※ ※※ 信号与系统课程设计报告书 课题名称 连续时间系统的LTI 系统的时域 仿真零输入响应与零状态响应 姓 名 学 号 院.系.部 专 业 指导教师 2011年 12 月27日 王志宏 20096412 电气工程系 电子信息工程 孙秀婷.康朝红 连续时间系统的LTI 系统的时域仿真 零输入响应与零状态响应 200 ...
更多相关内容 -
如何使用重叠相加法求线性卷积:如何使用重叠相加法求线性卷积-matlab开发
2021-05-30 16:14:21如何使用重叠相加法找到线性卷积 -
重叠相加法与重叠保留法
2019-02-02 11:07:19主要讲解长度列与短序列卷积算法(或相关算法),重叠保留法和重叠相加法,通过公式推导其计算原理 -
Matlab重叠相加法代码
2022-02-06 13:49:411.代码有注释,修改输入...2.本代码实现的重叠相加法与Matlab自带的卷积函数进行了对比,保证正确性。 3.本代码只适用于将x(n)刚好分为整数段的情况,因此要设计好每一段长度。 4.带有重叠相加法和本代码的介绍文章。 -
OverlapAdd2_handqgr_重叠相加法_数字语音处理_
2021-10-03 14:33:38数字语音信号处理中重叠相加法的matlab文件,用于编写帧合并的函数。 -
重叠相加法和重叠保留法
2016-04-24 18:44:39MATLAB中的fft的重叠相加法和重叠保留法的实现 -
信号分段,信号分段重叠相加法,matlab
2021-09-10 17:55:07一个长信号进行分析时,可能需要对信号分段,本程序提供一种分段方法 -
【语音合成】基于matlab比例重叠相加法的信号分帧与还原【含Matlab源码 561期】.zip
2021-10-11 18:01:33完整代码,可直接运行 -
matlab重叠相加法
2013-06-24 15:16:02matlab重叠相加法%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 重叠相加法 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %说明: % clc; clear; %--... -
用matlab分析重叠相加、重叠保留法.pdf
2020-12-21 21:16:00Matlab 实验一 重叠相加法和重叠保留法的实现 学院信息与通信工程学院 班级 学号 班内序号 姓名 一 实验原理 为了实现线性卷积的快速计算方法重叠相加法和重叠保留 法的实质都是以逐段地方式通过循环卷积来完成线性... -
用重叠相加法来加速语音信号
2021-03-29 23:18:10用重叠相加法来加速语音信号 -
重叠相加法和重叠保留法[含MATLAB code]
2022-01-21 15:56:06重叠相加法和重叠保留法[含MATLAB code]前言重叠相加法理论分析代码验证重叠保留法理论分析代码验证 前言 我们知道,如果使用DFT来计算线性卷积,需要分别将M点数据长度的x(n)x(n)x(n)和N点滤波器长度的h(n)h(n)h(n)...前言
我们知道,如果使用DFT来计算线性卷积,需要分别将M点数据长度的 x ( n ) x(n) x(n)和N点滤波器长度的 h ( n ) h(n) h(n)分别补零至L点以上,其中
L = M + N − 1 L=M+N-1 L=M+N−1然而,当M与N相差非常大时,需要补很多零,另外,由于FFT属于批处理算法,需要等到长序列全部输入完毕后才能利用FFT这一快速算法计算DFT,实时性难以保证。因此,可以采用分段卷积的方法来解决这一问题。分段卷积的具体方法,主要包括重叠相加法和重叠保留法。重叠相加法
理论分析
重叠相加法的核心思想在于,将长序列均匀分段,每段分别与短序列做线性卷积,而后将卷积结果重叠部分叠加起来。结果可以用分段函数来表示,对给定的n,可以相应求出结果值y(n)。
具体分析如下:
设长序列 x ( n ) x(n) x(n)长到无限长,滤波器 h ( n ) h(n) h(n)的长度为N,将 x ( n ) x(n) x(n)按照每M点一部分进行划分,其中设M>N,每段用 x k ( n ) x_k(n) xk(n)表示,则有
x k ( n ) = { x ( n + k M ) ,0 ≤ n ≤ M-1, k=0,1,2 … 0 ,others x_k(n)=\begin{cases} x(n+kM) & \text{,0 $\le$ n $\le$ M-1, k=0,1,2…} \\ 0 & \text{,others} \end{cases} xk(n)={x(n+kM)0,0 ≤ n ≤ M-1, k=0,1,2…,others
反过来, x ( n ) x(n) x(n)可以用 x k ( n ) x_k(n) xk(n)表示为
x ( n ) = ∑ k = 0 ∞ x k ( n − k M ) x(n)=\sum_{k=0}^{\infty}x_k(n-kM) x(n)=k=0∑∞xk(n−kM)
设卷积结果为 y ( n ) y(n) y(n),有
y ( n ) = x ( n ) ∗ h ( n ) = ∑ k = 0 ∞ x k ( n − k M ) ∗ h ( n ) = ∑ k = 0 ∞ y k ( n − k M ) y(n)=x(n)*h(n)\\ =\sum_{k=0}^{\infty}x_k(n-kM)*h(n)\\ =\sum_{k=0}^{\infty}y_k(n-kM) y(n)=x(n)∗h(n)=k=0∑∞xk(n−kM)∗h(n)=k=0∑∞yk(n−kM)
其中, y k ( n ) = x k ( n ) ∗ h ( n ) y_k(n)=x_k(n)*h(n) yk(n)=xk(n)∗h(n), 0 ≤ n ≤ N + ( M − 1 ) − 1 0\le n \le N+(M-1)-1 0≤n≤N+(M−1)−1
则 y k ( n − k M ) y_k(n-kM) yk(n−kM)的非零部分的自变量取值范围为
0 ≤ n − k M ≤ N + ( M − 1 ) − 1 0\le n-kM \le N+(M-1)-1 0≤n−kM≤N+(M−1)−1
即
k M ≤ n ≤ N + ( k + 1 ) M − 2 kM\le n \le N+(k+1)M-2 kM≤n≤N+(k+1)M−2
下面讨论重叠部分:
由于 y k ( n − k M ) y_k(n-kM) yk(n−kM)非零部分的自变量取值范围为
k M ≤ n ≤ N + ( k + 1 ) M − 2 kM\le n \le N+(k+1)M-2 kM≤n≤N+(k+1)M−2
则 y k + 1 ( n − ( k + 1 ) M ) y_{k+1}(n-(k+1)M) yk+1(n−(k+1)M)非零部分的自变量取值范围为
( k + 1 ) M ≤ n ≤ N + ( k + 2 ) M − 2 (k+1)M\le n \le N+(k+2)M-2 (k+1)M≤n≤N+(k+2)M−2
则可以得出,重叠区间为
( k + 1 ) M ≤ n ≤ N + ( k + 1 ) M − 2 (k+1)M\le n \le N+(k+1)M-2 (k+1)M≤n≤N+(k+1)M−2
可见,重叠点数为
N + ( k + 1 ) M − 2 − ( k + 1 ) M + 1 = N − 1 N+(k+1)M-2 - (k+1)M +1 = N-1 N+(k+1)M−2−(k+1)M+1=N−1
所以,只要将结果分段,未重叠部分直接得到最终结果,重叠部分相加后得到结果,就可逐段得到最终卷积结果。代码验证
下面举个例子:
设 h ( n ) = 2 , 4 , 1 , 6 h(n)={2,4,1,6} h(n)=2,4,1,6, x ( n ) = n 2 − 4 n + 1 , 0 ≤ n ≤ 20 x(n)=n^2-4n+1, 0\le n \le 20 x(n)=n2−4n+1,0≤n≤20,取分段数M为6.这里使用MATLAB,将采用重叠相加法得到的最终卷积结果与直接使滤波器与长序列线性卷积得到的结果相比较,从而验证算法的正确性。
clc;close all;clear; hn = [2,4,1,6]; n = 0 : 20; xn = n.^2-4*n+1; M = 6; N = length(hn); La = length(xn); L = M + N - 1; km = floor(La/M); break_mtx = zeros(km, M); end_set = zeros(1, La-km*M); y_mtx = zeros(km, L); end_y_set = zeros(1, La-km*M+N-1); for k = 0 : km if (k~=km) break_mtx(k+1, :) = xn(1+k*M:(k+1)*M); y_mtx(k+1, :) = conv(break_mtx(k+1, :), hn); else end_set = xn(1+k*M:La); end_y_set = conv(end_set, hn); end end y_final = zeros(1, La+N-1); y_mtx = [y_mtx;[end_y_set,zeros(1,L-(La-km*M+N-1))]]; for k = 0 : km if(k==0) y_final(1+k*M:(k+1)*M) = y_mtx(k+1,1:M); y_final((k+1)*M+1:L+k*M) = y_mtx(k+1, M+1:L)+y_mtx(k+2,1:N-1); elseif(k~=km) y_final(N+k*M:(k+1)*M) = y_mtx(k+1,N:M); y_final((k+1)*M+1:L+k*M) = y_mtx(k+1, M+1:L)+y_mtx(k+2,1:N-1); else y_final(N+k*M:end) = y_mtx(k+1,N:La-km*M+N-1); end end y_test = conv(xn, hn); CorrectNum = sum(y_final-y_test==0); if(CorrectNum==length(y_test)) disp('SUCCESSFUL');end
结果:
SUCCESSFUL
重叠保留法
理论分析
重叠保留法的要点在于,利用循环卷积,通过初始移位使得重叠点为不需要的点,舍弃重叠点拼接得到最终结果。
设滤波器 h ( n ) h(n) h(n)的长度为N,将长序列 x ( n ) x(n) x(n)按照每M个点为一段进行划分。设M>N,我们知道,循环卷积的前N-1个点是重叠点。我们希望重叠点无用被弃置,所以在开始分段之前,先将长序列 x ( n ) x(n) x(n)整体右移N-1个点,空位补零,然后再分段,每段与 h ( n ) h(n) h(n)进行循环卷积。这里要注意,此处的段,不是直接划分,而是在每段的前N-1个点,取上一个段的后N-1个点。将每一个卷积后的段的前N-1个点舍弃,保留并拼接剩下的M-N+1个点,即可得到最终的卷积结果。
代码验证
仍以上面的例子,进行MATLAB验证:
clc;clear;close all; hn = [2,4,1,6]; n = 0:20; xn = n.^2-4*n+1; M = 6; N = length(hn); La = length(xn); km = ceil(La/(M-N+1)); remains = km*(M-N+1)-La; km = km+1; x_mtx = zeros(km, M); y_mtxrow = zeros(1, km*(M-N+1)); for k = 1 : km if(k==1) x_mtx(k,:) = [zeros(1,N-1), xn(1+(k-1)*(M-N+1):k*(M-N+1))]; elseif(k==km) x_mtx(k,:) = [xn((k-1)*(M-N+1)-(N-2):(k-1)*(M-N+1)), zeros(1, M-N+1)]; elseif(k==km-1) x_mtx(k,:) = [xn((k-1)*(M-N+1)-(N-2):(k-1)*(M-N+1)), xn(1+(k-1)*(M-N+1):La), zeros(1, remains)]; else x_mtx(k,:) = [xn((k-1)*(M-N+1)-(N-2):(k-1)*(M-N+1)), xn(1+(k-1)*(M-N+1):k*(M-N+1))]; end temp = ifft(fft(x_mtx(k,:), M).*fft(hn, M), M); y_mtxrow(1+(k-1)*(M-N+1):k*(M-N+1)) = temp(N:M); end y_final = y_mtxrow(1:La+N-1); y_test = conv(xn, hn); CorrectNum = sum(y_final-y_test<1e-4);%fft引入微小误差 if(CorrectNum==length(y_test)) disp('SUCCESSFUL');end
结果:
SUCCESSFUL
-
重叠相加法&重叠保留法
2020-12-20 06:24:29∑ m = 0 M x ( n − m ) h ( m ) 那怎么利用频域计算呢,两种方法,重叠相加(overlap-add)和重叠保留(overlap-save) 重叠相加法(OLA) 将x(n) x ( n )分段,每段长为M M,保证M M接近N N即可,然后将xk(n) x k ...1.问题
上一篇中介绍了利用循环卷积计算线性卷积,但是当两个卷积项长度相差很大时,短序列需要补的0非常多,这样无助于计算量的减小,并且这种方法需要等长序列全部输入完之后才开始计算,这会造成输出有很大的延时。
但是实际中这种现象很长见,比如对音频信号进行数字滤波,滤波器抽头系数点数较少,而MIC一直在录音,需要滤波的信号可以认为是无限长的,如果等录很久后才开始进行滤波,则会造成需要存储的数据量急剧增大,同时输出的信号也会有较长的延时,这个时候怎样保证延时小的同时输出的结果跟对长信号滤波的结果相同呢
滤波器系数h(n), h ( n ) ,长度为N N,输入信号x(n) x ( n ),长度为无限长,输出y(n) y ( n )即为它们的卷积
y(n)=∑Mm=0x(n−m)h(m) y ( n ) = ∑ m = 0 M x ( n − m ) h ( m )
那怎么利用频域计算呢,两种方法,重叠相加(overlap-add)和重叠保留(overlap-save)
重叠相加法(OLA)
将x(n) x ( n )分段,每段长为M M,保证M M接近N N即可,然后将xk(n) x k ( n )补零延长到L=M+N−1 L = M + N − 1,计算L L点FFT F F T得到XK(K) X K ( K )
将h(n) h ( n )补零延长至L=M+N−1 L = M + N − 1,计算L L点FFT F F T得到H(K)。 H ( K ) 。
计算yk(k)=XK(K)∗H(K) y k ( k ) = X K ( K ) ∗ H ( K ),然后求L L点的IFFT, I F F T ,得到yk(K) y k ( K )
观察可以发现,每段xk(n) x k ( n )长为M M,恢复得到的yk(K) y k ( K )长为L,L>M L , L > M,那怎么将每段yk(K) y k ( K )拼接起来呢,方法为在还原的时候将重叠部分相加就可以了,这也是重叠相加法名字的由来。
用matlab验证一下,很简单,因为matlab的FFT F F T指定长度后会自动补零,那么上述过程几行代码就可以验证了
close all
clear all
h = [1,7,8];
N = length(h);
x = [5,8,9,6,3,4,8,2,1,7,5,6];
M = 4;
L = M+N-1;
x1 = x(1:4);
x2 = x(5:8);
x3 = x(9:12);
H = fft(h,L);
Y1 = fft(x1,L).*H;
Y2 = fft(x2,L).*H;
Y3 = fft(x3,L).*H;
y1 = ifft(Y1,L);
y2 = ifft(Y2,L);
y3 = ifft(Y3,L);
y_conv = conv(h,x)
y_ola = [y1(1:4),y1(5:6)+...
y2(1:2),y2(3:4),y2(5:6)+...
y3(1:2),y3(3:6)]
上面代码为了看的更清楚,循环都不用了,可以对比看看结果直接计算的y_conv与y_ola是不是相等的
重叠保留法(OLS)
将x(n) x ( n )分段,每段长为M M,保证M M接近N N即可,然后 将每段xk(n) x k ( n )向前多取N−1 N − 1个点,第一段前面补N−1 N − 1个0,则每段xk(n) x k ( n )长为L=M+N−1 L = M + N − 1,计算L L点FFT F F T得到XK(K) X K ( K )
将h(n) h ( n )补零延长至L=M+N−1 L = M + N − 1,计算L L点FFT F F T得到H(K)。 H ( K ) 。
计算yk(k)=XK(K)∗H(K) y k ( k ) = X K ( K ) ∗ H ( K ),然后求L L点的IFFT, I F F T ,得到yk(K) y k ( K )
分析下上面的步骤,对比下线性卷积与圆周卷积:
线性卷积:
xk(n) x k ( n ):L=M+N−1 L = M + N − 1
h:N h : N
yk(n):M+2N−2 y k ( n ) : M + 2 N − 2
圆周卷积:
XK(K) X K ( K ):L=M+N−1 L = M + N − 1
H(K):L=M+N−1 H ( K ) : L = M + N − 1
Yk(K):L=M+N−1 Y k ( K ) : L = M + N − 1
可以看到线性卷积的长度(M+2N−2 M + 2 N − 2)>圆周卷积长度(M+N−1 M + N − 1),由线性卷积与圆周卷积的关系可知当圆周卷积长度小于线性卷积长度时会发生混叠,那就在恢复的时候,丢掉前面混叠的部分(M+2N−2 M + 2 N − 2)-(M+N−1 M + N − 1)=N−1 = N − 1,每段仅保留后面M M点就行,这也是重叠保留名字的由来。
代码如下:
close all
clear all
h = [1,7,8];
N = length(h);
x0 = [5,8,9,6,3,4,8,2,1,7,5,6];
M = 4;
x = [zeros(1,N-1),x0];
L = M+N-1;
x1 = x(1:6);
x2 = x(5:10);
x3 = x(9:14);
x4 = [x(13:14),zeros(1,4)];
H = fft(h,L);
Y1 = fft(x1,L).*H;
Y2 = fft(x2,L).*H;
Y3 = fft(x3,L).*H;
Y4 = fft(x4,L).*H;
y1 = ifft(Y1,L);
y2 = ifft(Y2,L);
y3 = ifft(Y3,L);
y4 = ifft(Y4,L);
y_conv = conv(h,x0)
y_ols = [y1(3:6),y2(3:6),y3(3:6),y4(3:6)]
可以对比看看y_conv与y_ols是否相同
参考链接:
Frequency-Domain FIR Filter
卷积
-
重叠相加法实现卷积.doc
2021-05-22 16:57:42如以下情况: h(n)长度为N,x(n)长度为无限长 x(n)取M点,且与N尽量接近 可采用如下方法来解决 x(n) x(n)与h(n)的卷积为 重叠相加法的卷积示意图 重叠相加法的步骤如下 (1)将h(n)补零延长到L =M+ N -1,并计算长...0 -
设计任务
计算1个给定序列与输入序列的卷积。
功能:对给定的数据进行卷积运算,要求分段卷积由循环卷积实现。要求设计有数据导入界面,各种参数从软件界面可以输入,其中给定序列可以由界面输入,对运算前后的数据绘制曲线。
要求:
初步完成总体设计,搭好框架,确定人机对话的界面,确定函数功能,控 制参数的输入方法;
设计线性卷积的实现方案;
编写两序列作循环卷积的程序;
通过直接做线性卷积来检验最后结果。
设计步骤:
用结构化设计方法。一个程序划分成若干模块,每一个模块的函数功能要划分好,总体设计应画出流程图;
输入输出界面要友好;
源程序书写要规范,加必要的注释;
要提供通过直接卷积进行检验的结果;
程序一定要要能运行起来。
一、原理
1、算法产生背景
DFT 是连续傅里叶变换在时域和频域上都离散的形式,将时域信号的采样变换为在离散时间傅里叶变换频域的采样。在形式上,变换两端(时域和频域上)的序列是有限长的。DFT 具备明确且合理的物理含义,适合应用于数字系统,同时可以方便地由计算机进行运算。
对于线性非移变离散系统,可由线性卷积表示时域输入输出关系,即
y(n)=x(n)*h(n) ?
通常采用循环卷积降低运算量,但实际中往往无法满足对信号处理的实时性要求。因此,产生了重叠相加法和重叠保留法两种典型的算法,用以快速计算线性卷积,成为了DFT 的一个重要应用。
2、算法基本思想
重叠相加法是将待过滤的信号分割成长为 N 的若干段,,每一段都可以和有限时宽单位取样回应作卷积,再将过滤后的各段重叠相加。
在实际应用中利用FFT来计算两个序列的圆周卷积从而实现计算其线性卷积,但是常遇到的问题是参加卷积的两个序列的长度相差较大,这样长度小的序列就需要补很多的零点,这样就需要大的存储量,运算时间也会变长。所以常用重叠相加法来解决。
如以下情况:
h(n)长度为N,x(n)长度为无限长
x(n)取M点,且与N尽量接近
可采用如下方法来解决
x(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)计算,并求长为L的反变换,即
(4)将yk(n)的重叠部分相加,最后得到结果为
二、程序设计
1、程序设计思路
函数juanji(x1,x2,L)设计
x1(n)进行N点快速傅里叶变换得X1k
x2(n)进行N点快速傅里叶变换得X2k
进行频域相乘Yk=X1k*X2k
对Yk进行反变换得到时域卷积结果y(n)
函数chongdie(x,h,N)设计
(1)首先取圆周卷积的周期L(即进行L点的快速傅里叶变换)
(2)计算每一分段的大小N
(3)填充序列使得循环中对序列的索引不会超出范围
(4)计算分段数K
(5)对序列进行分段调用juanji()函数计算圆周卷积
(6)各段重叠相加
(7)取出实际的输出序列
程序流程图
开始对x1(n)进行FFT运算
开始
对x1(n)进行FFT运算
对x(2)进行FFT运算
频域相乘
Yk=X1k*X2k
对Yk进行反变换得到时域结果y(n)
结束
开始
取圆周卷积的周期L
计算每一分段的大小N
将序列按要求填充
计算分段数K
调用卷积函数
将各段处理的结果重叠相加输出最终结果
结束
重叠相加法
卷积
三、分析与测试
1、循环卷积设计
= 1 \* GB3 ① 程序
M = length(h);
if N
N = M+1;
end
L = 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:T
xi=i*N+1;
x_seg = x(xi:xi+N-1); %选择低点数计算时的分段x(n)
X1k = fft(x_seg,L); %x_seg做L点FFT
X2k = fft(h,L);
-
重叠相加法计算卷积
2021-04-04 19:33:54重叠相加法计算线性卷积是这样的,首先将输入序列 x ( n ) x(n) x(n)拆分成许多的小区间, 然后用每一个小区间和冲击序列 h ( n ) h(n) h(n)进行卷积计算,最后将所得的每一个序列重叠部分进行叠加即可,算法的可行性见... -
matlab重叠相加法求线性卷积
2012-05-18 22:39:21重叠相加法实现长短差距很大的序列的线性卷积 -
【matlab实现】重叠相加法与重叠保留法
2021-04-22 16:15:57两个有限长的序列,当一个序列的长度远大于另外一个序列的时候,如果仍采用常规的处理方法,效率会很低,所以引入了重叠相加法和重叠保留法。下面我们就利用MATLAB来实现这两种方法。在下面的代码中,我使用了一个新... -
python实现重叠保留法和重叠相加法分段计算卷积
2021-04-20 21:41:28分段卷积根据方式不同,有重叠相加法和重叠保留法两种,下面分别介绍两种方法 重叠相加法 重叠相加法基本思想是将长序列 x ( t ) x(t) x(t)分为若干个子段 x k ( t ) x_k(t) xk(t),每个子段长为 L L L,然后每个... -
通过重叠相加法实现卷积的报告.doc
2021-04-22 10:22:36数字信号处理课程设计题目:通过重叠相加法实现卷积院系:自动化与信息工程学院专业:通信工程班级: 通信091学号: 3090432028姓名: 雷帛川指导教师: 李建勋职称: 副教授2012年7月1日2012年7月14日用结构化设计方法。... -
利用重叠相加法计算快速卷积(matlab)
2011-11-05 13:20:16利用重叠相加法原理计算快速卷积,代码清晰明了,关键处都有注释,且可以通用 -
重叠相加法和重叠保留法的原理与实现
2020-12-30 04:03:57《重叠相加法和重叠保留法的原理与实现》由会员分享,可在线阅读,更多相关《重叠相加法和重叠保留法的原理与实现(4页珍藏版)》请在人人文库网上搜索。1、重叠相加法与重叠保存法的原理实现侯凯(吉林大学 通信工程... -
重叠相加法_重叠保留法_小例
2020-07-24 22:10:24文章目录 重叠相加法 重叠保留法 重叠相加法 %-------------------------------------------------------------------------- % 清空一切 clc;clear all;close all; %---------------------------------------------... -
数字信号处理——重叠相加法计算线性卷积
2019-11-04 14:17:21重叠相加法介绍 #由来 在利用FFT计算线性卷积时,遇见长序列与短序列卷积时,FFT不一定具备简化计算的优势 #思路 分而治之的思想,可能很多情况下都使用,将大问题转为能解决的已知问题。既然一长一段不行,何不把短... -
重叠保留法、重叠相加法的MATLAB代码
2018-11-14 13:05:15%重叠保留法 clc;close all;clear all; xk=[1 2 3 4 5];%子序列 h=[1 2 1];%短序列 N=5;M=3;%长度 for k=1:6 x((k-1)N+1:kN)=xk;%长序列 end Hk=fft(h,N+M-1);%短序列的DFT y=zeros(1,M+N*6-1);%规定线性... -
重叠相加法与重叠保留法原理PPT学习教案.pptx
2021-10-05 22:57:48重叠相加法与重叠保留法原理PPT学习教案.pptx -
三种常见的卷积概述(线性卷积周期卷积圆周卷积)以及重叠保留法重叠相加法
2020-12-20 06:25:29要点: 以分段5,\(h(n)\)长度为3举例 重叠保留法,输出的每一段都是长3和长5的5点圆周卷积,重叠的是最左边(3-1=2)个,这2个扔掉 重叠相加法,输出的每一段都是长3和长5的线性卷积 分段一般是有讲究的: 每段多长...