用MATLAB实现序列圆周卷积

合集下载

快速卷积的MATLAB实现

快速卷积的MATLAB实现

摘要在信号处理中,许多具体的应用是以线性卷积为基础的。

当序列点数较少时可以直接计算线性卷积,然而当序列长度很长时,直接计算卷积的运算量非常庞大。

快速卷积是实现卷积的一种快速算法,减少了运算量,节约了时间,给我们计算卷积提供了很大的便利。

本课程设计是以Matlab为基础,完成序列的卷积和快速卷积运算的编程实现,以及相应的分析和比较。

关键字:Matlab 卷积快速卷积目录1.基于设计题目的原理简介 (1)1.1 序列卷积的定义 (1)1.2 快速傅里叶变换FFT概念 (1)1.3 快速卷积方法及实现 (1)2.程序设计及运行结果分析 (3)2.1 题目一 (3)2.2 题目二 (4)2.3 题目三 (7)3.心得体会 (10)参考文献 (11)专业综合课程设计成绩评定表 (12)1.基于设计题目的原理简介卷积是数字信号处理(DSP)系统中最常见的,也是最重要的运算之一,无论在时域或频域都离不开卷积运算,FFT是DFT的快速算法,当满足一定条件时可用来计算线性卷积,称为快速卷积。

Matlab具有强大的矩阵运算能力,方便实用的绘图功能和语言的高度集成性,在DSP开发中,使用Matlab可以快速对系统进行仿真运算。

1.1 序列卷积的定义设x(n)和h(n)是两个离散序列,进行下列求和运算:∑∞-∞== -=nnhnxmnhmxny)(*)()()()(这样,随着n的不同取值,这个求和公式就定义了一个新序列y(n),称为序列x(n)与h(n)的卷积,记为y(n)=x(n)*h(n) 。

由于DSP主要依靠计算机完成,而计算机无论在时域或频域只能处理有限长的离散信号。

此时只需令上述公式中的n在一个范围内取值即可。

1.2 快速傅里叶变换FFT概念DFT就是对序列频谱的离散化,在数字信号处理中有着重要的作用,但直接计算DFT 的运算量非常大,它与序列长度的平方成正比,因此制约了DFT的应用。

快速傅里叶变换FFT是实现DFT的一种快速算法,能使计算机计算离散傅里叶变换所需要的乘法次数大为减少,特别是被变换的抽样点数N越多,FFT算法计算量的节省就越显著。

序列的卷积和快速卷积运算的编程实现

序列的卷积和快速卷积运算的编程实现
式(2.3)表示,计算x1(n)与x2(n)的线性卷积y(n)时,可以先分段计算yk(n),然后再叠加起来即可。因为yk(n)的长度为M+N-1,因此yk(n)的后N-1个值与yk+1(n)的前N-1个值重叠,因此必须把yk(n)的后N-1个值与yk+1(n)前的N-1个值相加,因为称为重叠相加法。
卷积是数字信号处理中最常见的,也是最重要的运算之一。利用卷积可以实现相关计算和FIR滤波等等,正因为卷积如此重要,所以半个世纪以来,学者们提出了多种不同卷积实现结构,这些结构各有优点,针对不同应用可以灵活选择,而其中快速卷积无疑是重要的卷积方法之一。顾名思义,快速卷积重点在一个“快”,如果对卷积速度要求较高,快速卷积无疑是理想的工具。当然,为了提高速度,就要牺牲面积和功耗
3、用快速卷积法计算

两个序列的卷积;并测试直接卷积和快速卷积的时间。
利用快速卷积原理求两个函数的卷积可以用题目二中所用的方法(先分别对两个函数求傅里叶变换得到X(k)与H(k),再两个函数傅里叶变换的点乘的结果y(k),最后直接对y(k)求傅里叶反变换得到y(n))快速卷积,得到所要求的结果。
因为在这次题目中
四、程序设计及仿真结果分析
1、已知线性非移变系统的h(n)=[6,2,3,6,4,2],输入为x(n)=[1,2,3,4,5];
(1)用人工计算系统输出y(n);
(2)编写程序输出y(n),并作图。
人工计算:
长度为m的向量序列h和长度为n的向量序列x,卷积w的向量序列长度为(m+n-1),当不等于n时,应以0补齐阶次低的向量的高位后进行计算
X1(k)=DFT[ x1(n)],
X2(k)=DFT[ x2(n) ],
再用IFFT计算X1(k)X2(k)的L点IDFT得yc(n),也就是x1(n)与x2(n)的线性卷积为yl(n),即

用matlab计算序列卷积和并绘图

用matlab计算序列卷积和并绘图

(一)实验目的:学会用MATLAB 对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。

(二)实验原理:1、离散时间序列f1(k)和f2(k)的卷积和定义:f(k)=f1(k)*f2(k)=∑∞-∞=-•i i k f i f )(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a 、f(k)=∑∞-∞=-•i i k i f )()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。

b 、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)=∑∞-∞=-•i i k h i f )()(3、上机:conv.m 用来实现两个离散序列的线性卷积。

其调用格式是:y=conv(x,h)若x 的长度为N ,h 的长度为M ,则y 的长度L=N+M-1。

(三)实验内容1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326,,,,,,y(n)=x(n)*h(n),求y(n)。

要求用subplot 和stem 画出x(n),h(n),y(n)与n 的离散序列图形。

源程序: N=5; M=6; L=N+M-1; x=[1,2,3,4,5];h=[6,2,3,6,4,2]; y=conv(x,h); nx=0:N-1; nh=0:M-1; ny=0:L-1;subplot(131); stem(nx,x,'*k'); xlabel('n'); ylabel('x(n)'); grid on ;subplot(132); stem(nh,h,'*k'); xlabel('n'); ylabel('h(n)'); grid on ;subplot(133); stem(ny,y,'*k'); xlabel('n'); ylabel('y(n)'); grid on ; 实验结果:nx (n)nh (n)ny (n )分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。

matlab卷积计算例题

matlab卷积计算例题

matlab卷积计算例题卷积是信号处理中一种常用的数学运算方法,它用于描述两个函数之间的特殊运算关系。

在Matlab中,我们可以利用内置函数或者自定义函数来进行卷积计算。

本文将以一个具体的例题为基础,介绍Matlab中卷积计算的方法。

首先,我们定义两个信号序列x和h:x = [1, 2, 3, 4];h = [1, 1, 1];这里,x表示输入信号,h表示系统的冲激响应。

接下来,我们可以使用Matlab内置的conv函数来进行卷积计算:y = conv(x, h);通过上述代码,我们得到了卷积结果y。

为了更好地理解卷积计算的过程,我们可以手动实现卷积计算。

具体步骤如下:1. 翻转h序列,得到h':h' = [1, 1, 1];2. 在x序列前后各添加与h'序列长度相等的零元素,得到x':x' = [0, 1, 2, 3, 4, 0];3. 将h'序列从x'序列的第一个元素开始与x'序列逐个相乘,得到中间结果:[0, 1, 2, 3, 4, 0] * 1 = [0, 1, 2, 3, 4, 0][0, 1, 2, 3, 4, 0] * 1 = [0, 1, 2, 3, 4, 0][0, 1, 2, 3, 4, 0] * 1 = [0, 1, 2, 3, 4, 0]4. 将上述中间结果依次相加,得到最终的卷积结果y:y = [0, 1, 3, 6, 9, 7, 4, 0]通过手动计算,我们得到的卷积结果与使用conv函数计算得到的结果一致。

除了使用conv函数,我们还可以通过定义自定义函数来实现卷积计算。

下面是一个示例代码:function y = myConv(x, h)N = length(x);M = length(h);y = zeros(1, N+M-1);for n = 1:N+M-1for k = 1:Nif n-k+1 > 0 && n-k+1 <= My(n) = y(n) + x(k) * h(n-k+1);endendendend通过调用自定义函数myConv,同样可以得到卷积结果y。

matlab 实现圆周卷积函数

matlab 实现圆周卷积函数

matlab 实现圆周卷积函数
圆周卷积是数字信号处理中常用的一种卷积方式,它可以用于周期性信号的卷积计算,而且具有一定的计算效率。

在 MATLAB 中,可以使用 fft 函数实现圆周卷积。

具体实现方法如下:
1. 将两个周期性信号分别进行 fft 变换,得到它们的频域表示。

2. 对两个频域信号进行逐元素相乘。

3. 对结果进行 ifft 变换,得到圆周卷积的时域表示。

4. 若信号长度为 N,则在进行 fft 变换时,应该使用长度为2N-1 的 fft 算法。

在 MATLAB 中,可以使用如下代码来实现圆周卷积函数:
function y = cconv(x1,x2)
N = length(x1);
if(N~=length(x2))
error('Error: Input signals must be of equal length'); end
y = ifft(fft(x1,2*N-1).*fft(x2,2*N-1));
end
其中,x1 和 x2 分别表示要进行卷积计算的两个周期性信号,y 表示圆周卷积的结果。

该函数实现了两个信号的圆周卷积计算,并可以处理信号长度不相等的情况。

在使用该函数时,可以将要进行卷积计算的两个信号作为参数
传入函数中,例如:
x1 = [1,2,3,4];
x2 = [5,6,7,8];
y = cconv(x1,x2);
上述代码将计算 x1 和 x2 的圆周卷积,并将结果保存在 y 变量中。

Matlab中的卷积与相关运算详解

Matlab中的卷积与相关运算详解

Matlab中的卷积与相关运算详解引言Matlab是一种强大的科学计算工具,其支持多种数学运算和信号处理操作。

在信号处理中,卷积和相关运算是非常重要的概念,用于处理和分析信号。

本文将详细介绍在Matlab中实现卷积和相关运算的方法和应用。

1. 卷积运算1.1 卷积的定义卷积运算是信号处理中常用的一种数学运算,它描述了两个信号之间的某种关联。

在时间域中,卷积运算可以表示为两个函数的积分。

具体而言,对于两个函数f(t)和g(t),其卷积函数为:h(t) = ∫f(τ)g(t-τ)dτ其中,h(t)表示卷积结果函数,τ为积分变量。

1.2 Matlab中的卷积函数在Matlab中,可以通过conv函数来实现卷积运算。

conv函数的语法为:y = conv(u, v)其中,u和v分别为输入的两个向量,y为卷积结果。

需要注意的是,输入向量的长度必须相同。

示例代码:u = [1, 2, 3];v = [4, 5, 6];y = conv(u, v);disp(y);运行上述代码,将输出卷积结果[4, 13, 28, 27, 18]。

1.3 卷积的应用卷积运算在信号处理中有广泛的应用,例如平滑滤波、图像处理、系统响应等。

下面以平滑滤波为例来说明卷积的应用。

示例代码:x = [0, 0, 1, 1, 1, 0, 0];h = [0.2, 0.2, 0.2];y = conv(x, h, 'same');disp(y);运行上述代码,将输出平滑滤波后的信号[0.4, 0.6, 0.8, 0.8, 0.8, 0.4, 0.2]。

通过卷积运算,我们可以实现对信号的平滑处理,去除噪声和突变。

2. 相关运算2.1 相关的定义相关运算是另一种常用的信号处理运算,它描述了两个信号之间的相似性。

在时间域中,相关运算可以表示为两个函数的乘积积分。

具体而言,对于两个函数f(t)和g(t),其相关函数为:r(t) = ∫f(τ)g(t+τ)dτ其中,r(t)表示相关结果函数,τ为积分变量。

实验一:matlab实现序列卷积运算

实验一:matlab实现序列卷积运算

↑前言MATLAB 是一套功能强大的工程计算及数据处理软件,广泛应用于工业,电子,医疗和建筑等众多领域。

它是一种面向对象的,交互式程序设计语言,其结构完整又优良的可移植性。

它在矩阵运算,数字信号处理方面有强大的功能。

另外,MATLAB 提供了方便的绘图功能,便于用户直观地输出处理结果。

本课程实验要求学生运用MATLAB 编程完成一些数字信号处理的基本功能,加深对教学内容的理解。

课程试验1——用MATLAB 实现序列卷积运算一、实验目的• 加深对常用离散信号的理解• 熟悉并验证离散时间信号用数字序列表示的方法及序列的线性卷积运算。

二、实验内容1、(1)单位抽样序列⎩⎨⎧=01)(n δ 00≠=n n 在MATLAB 中可以利用zeros()函数实现。

;1)1();,1(==x N zeros x 如果)(n δ在时间轴上延迟了k 个单位,得到)(k n -δ即:⎩⎨⎧=-01)(k n δ 0≠=n k n(2)正弦序列)/2sin()(ϕπ+=Fs fn A n x在MATLAB 中)/***2sin(*1:0fai Fs n f pi A x N n +=-= 2、用MATLAB 计算序列x 1[k]={-2,0,1,–1,3;k=-1,0,1,2,3}和序列x 2[k]={1, 2, 0,-1;k=-2,-1,0,1}的线性卷积。

三、实验要求1、用MATLAB 独立编程并给出运行结果2、试验报告的书写格式(1)试验目的(2)试验内容(3)程序清单(4)运行结果(5)总结(试验结果分析、心得与体会等)。

信号卷积在 MATLAB 中的实现

信号卷积在 MATLAB 中的实现

信号卷积在 MATLAB 中的实现宋德周【摘要】The core digital signal processing algorithm is the Discrete Fourier Transform (DFT), is the DFT to the signal in the digital domain and frequency domain are realized discrete,general-purpose computer which can handle discrete signal. Discrete Fourier transform, in communications, voice processing, image processing, radar, medical imaging and other fields is widely used, but this is by convolution and correlation operations on continuous signals and sequences based on spectral analysis. Volume integral for the circular convolution, linear convolution. This paper analyzes under what circumstances can use cyclic convolution operation instead of linear convolution and the corresponding program codes in MATLAB to achieve this on two sequences of arbitrary input cyclic convolution, the keyboard sequence can input the final results and waveform display.%核心的数字信号处理算法是离散傅立叶变换(DFT),是在数字域和频率域对信号的DFT 实现离散,通用计算机可以处理离散信号。

用matlab验证卷积定理

用matlab验证卷积定理

⽤matlab验证卷积定理
⽤matlab验证卷积定理
卷积定理
⼀、实验⽬的
通过本实验,验证卷积定理,掌握利⽤DFT和FFT计算线性卷积的⽅法。

⼆、实验原理
时域圆周卷积在频域上相当于两序列DFT的相乘,因⽽可以采⽤FFT的算
法来计算圆周卷积,当满⾜
121
L N N
≥+-时,线性卷积等于圆周卷积,因此可利⽤FFT计算线性卷积。

三、实验内容和步骤
1.给定离散信号()
x n和()
h n,⽤图解法求出两者的线性卷积和圆周卷积;2.编写程序计算线性卷积和圆周卷积;
3.⽐较不同列长时的圆周卷积与线性卷积的结果,分析原因。

四、实验设备
计算机、Matlab软件
五、实验报告要求
1.整理好经过运⾏并证明是正确的程序,并且加上详细的注释。

2.给出笔算和机算结果对照表,⽐较不同列长时的圆周卷积与线性卷积的结果对照,作出原因分析报告。

3.结出⽤DFT计算线性卷积的⽅法。

[Matlab]线性卷积圆周卷积代码实现

[Matlab]线性卷积圆周卷积代码实现

[Matlab]线性卷积圆周卷积代码实现1、线性卷积周期卷积圆周卷积的关系:2、Matlab实验及现象圆周卷积:1 %% 圆周卷积实例程序2 %% Alimy 2014年11⽉21⽇20:19:123 clc;4 clear;5 %%准备数据6 N = 5;7 M = 5;8 L = N + M -1;9 x1n = [1,2,3,4,5];10 x2n = [1,5,9,7,3];11 kn_x1 = 0:1:N-1;12 kn_x2 = 0:1:M-1;13 kn_y = 0:1:L-1;14 %%画原始有限长序列15 subplot(4,2,1);16 stem(kn_x1,x1n);17 xlabel('n','FontSize',15);18 ylabel('x1n','FontSize',15);19 subplot(4,2,2);20 stem(kn_x2,x2n);21 xlabel('n','FontSize',15);22 ylabel('x2n','FontSize',15);2324 x1n_t = [x1n, zeros(1,L-N)]; %%补零25 x2n_t = [x2n, zeros(1,L-M)];26 kn_x1t = 0:1:(N+M-1)-1;27 kn_x2t = 0:1:(N+M-1)-1;28 %%画补0后序列29 subplot(4,2,3);30 stem(kn_x1t,x1n_t);31 xlabel('n','FontSize',15);32 ylabel('x1n补0后','FontSize',15);33 subplot(4,2,4);34 stem(kn_x2t,x2n_t);35 xlabel('n','FontSize',15);36 ylabel('x2n补0后','FontSize',10);3738 x1n_t = [x1n_t,x1n_t,x1n_t,x1n_t]; %沿拓39 x1n_t = fliplr(x1n_t); %翻转40 [x1t_x,x1t_y] = size(x1n_t);41 x1t_numbers = x1t_x * x1t_y;42 kn_x1t = -17:1:18;43 %%画沿拓翻转后的周期序列44 subplot(4,2,5);45 stem(kn_x1t,x1n_t);46 xlabel('t','FontSize',15);47 ylabel('x1n_t补0后再沿拓翻转后','FontSize',10);4849 x2n_t = [zeros(1,L),zeros(1,L),x2n_t,zeros(1,L)];50 kn_x2t = -18:1:17;51 subplot(4,2,6);52 stem(kn_x2t,x2n_t);53 xlabel('t','FontSize',15);54 ylabel('x2n_t补0后沿拓翻转后','FontSize',15);555657 %% 乘加移位58 yn = zeros(1,2*L);59for I = 1:1:1860 x1n_t = circshift(x1n_t,[0,1]);61 yn(I) = x2n_t*x1n_t';62 end6364 kn_yn = 0:1:2*(N+M-1)-1;65 subplot(4,2,7);66 stem(kn_yn,yn);67 xlabel('n','FontSize',15);68 ylabel('圆周卷积结果','FontSize',15);6970 %%取主值序列71 ynmain = zeros(1,L);72for I = 1:1:973 ynmain(I) = yn(I);74 end75 kn_ynm = 0:1:8;76 subplot(4,2,8);77 stem(kn_ynm,ynmain)78 xlabel('n','FontSize',15);79 ylabel('主值序列','FontSize',15);8081 %%cycleConv.m线性卷积:1 %% 线性卷积2 clc;3 clear;4 %%5 N = 5;6 M = 5;7 L = N + M - 1;8 x1n = [1,2,3,4,5];9 kx1 = 0:1:N-1;10 x2n = [1,5,9,7,3];11 kx2 = 0:1:M-1;1213 %% 线性卷积14 yn = conv(x1n,x2n);15 kyn = kx1(1)+kx2(1):1:kx1(end)+kx2(end); % 0:1:(N+M-1)-11617 %% 循环卷积 To do 2014年11⽉20⽇ 15:25:36 循环卷积怎么做1819 %% 画图20 subplot(2,2,1);21 stem(kx1,x1n);22 xlabel('n');23 ylabel('x1n');24 title('信号1');2526 subplot(2,2,2);27 stem(kx2,x2n);28 xlabel('n');29 ylabel('x1n');30 title('信号2');3132 subplot(2,2,3);33 stem(kyn,yn);34 xlabel('n');35 ylabel('yn');36 title('线性卷积结果');37 yn %% 1 7 22 44 69 88 82 47 15 linConv.m结果如下:当 L = N + M -1时,圆周卷积和线性卷积的结果⼀致:yn =1 7 22 44 69 88 82 47 15圆周卷积:线性卷积:。

基于MATLAB的线性圆周卷积(DFT)及重叠相加法代码

基于MATLAB的线性圆周卷积(DFT)及重叠相加法代码

基于MATLAB的线性圆周卷积(DFT)及重叠相加法代码主程序:x1=[1,2,3,4,5,5,4,3,2,1];x2=[1,0,1];L=8;y=chongdie(x1,x2,L);s=1:10;subplot(2,2,1);stem(s,x1)r=1:3;subplot(2,2,2);stem(r,x2)u=1:13;subplot(2,2,3);stem(u,y)函数juanji()function y=juanji(x1,x2,L)if length(x1)>L %如果x1长度大于L则产生错误error('L must not be less than length of x1');endif length(x2)>N %如果x2长度大于L则产生错误error('L must not be less than length of x2');endX1k=fft(x1,L); %对x1进行L点FFT计算X2k=fft(x2,L); %对x2进行L点FFT计算Yk=X1k.*X2k; %频域相乘y=ifft(Yk); %反变换得卷积结果if (all(imag(x1)==0))&(all(imag(x2)==0))y=real(y);end函数chongdie()方案1:function[y]=chongdie(x,h,N)Lenx=length(x); %取x(n)的长度M=length(h); %取h(n)的长度L=N+M-1; %计算圆周卷积的周期L使其不发生混叠x=(x,zero(1,N-1)); %填充序列使得循环中对序列的索引不会超出围K=floor(Lenx/N);y=zeros(1,Lenx+L-1); %确定分段数Kfor i=0:1:Kix=i*N;x_seg=x(ix+1:ix+N); %将x(n)分段y_seg=juanji(x_seg,h,L); %调用函数juanji()计算圆周卷积y(ix+1:ix+L)=y(ix+1:ix+L)+y_seg(1:L); %各段重叠相加endy=y(1:Lenx+M-1); %取出实际的输出序列方案2:function[y]=chongdie(x,h,L)Lenx=length(x); %取x(n)的长度M=length(h); %取h(n)的长度N=L-M+1; %计算分段大小Nx=[x,zeros(1,N-1)]; %填充序列使得循环中对序列的索引不会超出围K=floor(Lenx/N); %确定分段数Ky=zeros(1,Lenx+L-1);for i=0:1:Kix=i*N;x_seg=x(ix+1:ix+N); %将x(n)分段y_seg=juanji(x_seg,h,L); %调用函数juanji()计算圆周卷积y(ix+1:ix+L)=y(ix+1:ix+L)+y_seg(1:L); %各段重叠相加endy=y(1:Lenx+M); %取出实际的输出序列。

如何通过Matlab进行卷积与卷积运算

如何通过Matlab进行卷积与卷积运算

如何通过Matlab进行卷积与卷积运算使用Matlab 进行卷积与卷积运算引言:卷积与卷积运算在信号处理、图像处理、机器学习等领域中起着至关重要的作用。

Matlab作为一款强大的数学工具,提供了丰富的函数和工具箱,能够便捷地进行卷积与卷积运算。

本文将介绍如何使用Matlab进行卷积与卷积运算,并通过实例说明其应用。

一、卷积的基本概念卷积是一种数学运算,常用于信号处理中。

它将两个函数进行混合,输出一个新的函数。

在离散卷积中,输入的两个函数通常是序列或矩阵。

卷积的定义如下:[f * g](n) = ∑[f(k) * g(n-k)] (k=-∞ to ∞)其中,f * g 表示卷积运算,f 表示输入函数,g 表示卷积核函数,n 表示输出函数的索引。

二、Matlab中的卷积函数在Matlab中,可以使用conv函数来进行一维离散卷积的计算。

conv函数的语法如下:y = conv(x,h)其中,x 表示输入函数,h 表示卷积核函数,y 表示输出函数。

在使用conv函数时,需要注意输入函数和卷积核函数的维度匹配,以及输入函数和卷积核函数的长度关系。

在长度不一致的情况下,可以使用padarray函数进行填充。

三、卷积运算的应用举例为了更好地理解卷积与卷积运算的应用,下面将通过几个实例进行详细讲解。

实例一:图像模糊图像模糊是一种常见的图像处理技术,可以用于去除图像中的噪声和细节。

在Matlab中,可以通过卷积运算实现图像模糊。

首先,需要构建一个卷积核函数,例如:h = ones(5, 5) / 25;此处构建了一个5x5的全1卷积核函数,并将其除以25,以实现平均模糊。

然后,使用conv函数对输入图像进行卷积运算:blurred_image = conv(input_image, h);实例二:音频信号滤波在音频处理中,常常需要对音频信号进行滤波以去除噪声或者强调特定频率。

卷积运算可以实现各种滤波器的设计和应用。

用matlab计算序列卷积和并绘图

用matlab计算序列卷积和并绘图

(一)实验目的:学会用MATLAB对信号与系统分析的方法,理解离散序列卷积和的计算对进行离散信号与系统分析的重要性。

(二)实验原理:1、离散时间序列f1(k)和f2(k)的卷积和定义:f(k)=f1(k)*f2(k)=∑∞-∞=-•iikfif)(2)(12、在离散信号与系统分析中有两个与卷积和相关的重要结论:a、f(k)= ∑∞-∞=-•iikif)()(δ=f(k)* δ(k)即离散序列可分解为一系列幅度由f(k)决定的单位序列δ(k)及其平移序列之积。

b、对线性时不变系统,设其输入序列为f(k),单位响应为h(k),其零状态响应为y(k),则有:y(k)= ∑∞-∞=-•iikhif)()(3、上机:用来实现两个离散序列的线性卷积。

其调用格式是:y=conv(x,h)若x的长度为N,h的长度为M,则y的长度L=N+M-1。

(三)实验内容1、题一:令x(n)= {}5,4,3,2,1,h(n)={}246326,,,,,,y(n)=x(n)*h(n),求y(n)。

要求用subplot和stem画出x(n),h(n),y(n)与n的离散序列图形。

源程序:N=5;M=6;L=N+M-1;x=[1,2,3,4,5];h=[6,2,3,6,4,2];y=conv(x,h);nx=0:N-1;nh=0:M-1;ny=0:L-1;subplot(131); stem(nx,x,'*k'); xlabel('n');ylabel('x(n)'); grid on ;subplot(132); stem(nh,h,'*k'); xlabel('n');ylabel('h(n)'); grid on ;subplot(133); stem(ny,y,'*k'); xlabel('n');ylabel('y(n)'); grid on ;实验结果:nx (n)nh (n)ny (n )分析实验结果:根据实验结果分析可知,实验所得的数值跟x (n )与y (n )所卷积的结果相同。

用MATLAB实现序列的圆周卷积

用MATLAB实现序列的圆周卷积

数字信号处理实验报告实验项目名称:用MATLAB实现序列的圆周卷积实验日期:2012-11-28 实验成绩:实验评定标准:1)实验结果是否正确A()B()C()2)实验结果分析A()B()C()3)实验报告是否按照规定格式A()B()C()*一、实验目的通过本实验,掌握一些基本而且重要的离散时间信号,熟悉基本离散时间信号的MATLAB实现方法。

二、实验器材PC机,MATLAB软件。

三、实验内容计算两序列x1(n)={1,2,3,4,5},x2(n)={1,2,3,4,5,4,3,2,1}的圆周卷积。

四、实验结果实验代码:clear allclose allclcx1=[1,2,3,4,5,6,7,8];x2=[1,2,3,4,5,6,7,8,7,6,5,4,3,2,1]; N=length(x1)+length(x2);n=0:N-1n1=0:N-2;n2=0:N-3;y1=circonvt(x1,x2,N); y2=circonvt(x1,x2,N-1); y3=circonvt(x1,x2,N-2);x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; Xf1=dft(x1,N);Xf2=dft(x2,N);Xf=Xf1.*Xf2;x=idft(Xf,N);x=real(x);subplot(2,3,1)stem(n,x1);title('x1(n)');subplot(2,3,2)stem(n,x2);title('x2(n)')subplot(2,3,3);stem(n,x);title('x(n)=IDFT(X(k))'); subplot(2,3,4);stem(n,y1);title('N点圆周卷积'); subplot(2,3,5);stem(n1,y2);title('N-1点圆周卷积'); subplot(2,3,6);stem(n2,y3);title('N-2点圆周卷积');function y=circonvt(x1,x2,N)if length(x1)>Nerror('N 必须>= x1的长度') endif length(x2)>Nerror('N 必须>= x2的长度') endx1=[x1 zeros(1,N-length(x1))];x2=[x2 zeros(1,N-length(x2))];m=[0:1:N-1];x2=x2(mod(-m,N)+1);H=zeros(N,N);for n=1:1:NH(n,:)=cirshift(x2,n-1,N);endy=x1*H;function y=cirshift(x,m,N)if length(x)>Nerror('N 必须>= x的长度') endx=[x zeros(1,N-length(x))];n=[0:1:N-1];n=mod(n-m,N);y=x(n+1);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;function [xn]=idft(Xk,N)%计算逆离散傅里叶变换%[xn]=idft(Xk,N)n=[0:1:N-1];k=[0:1:N-1]; WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^(-nk); xn=(Xk*WNnk)/N;实验结果:五、实验结果分析~六、,七、2468246850100150200250x(n)=IDFT(X (k))0510*******50100150200250N 点圆周卷积50100150200250N-1点圆周卷积50100150200250N-2点圆周卷积。

基于Matlab实现线性卷积等

基于Matlab实现线性卷积等

线性卷积与循环卷积一、作品目的通过matlab的强大功能展示线性卷积和循环卷积过程中方方面面的计算和变化,让大家对这两种卷积有一个更加完美的认识。

二、概念简介卷积是一种典型的乘累加运算。

1.线性卷积线性卷积是对线性移不变(LSI)系统的输入输出关系的描述,体现系统的特性。

线性卷积的表达式为一般情况,现实的系统为因果系统,有k<0时,恒有h(k)=0,则若x(n)是一个N点序列,h(n)是一个m点序列,则卷积的结果y(n)将是L=N+M-1点的序列。

2.循环卷积设x1(n) 和x2(n) 是两个长度为L、M的有限长序列,它们的N 点循环卷积x3(n) 定义为:注意:其中N>=Max{L,M}如果其中一个序列(或者两个序列)的长度没有所求N点循环卷积的长度长,那在该序列后面补零,直到长度达到N。

三、设计思路及程序1. 线性卷积:(1)以输入序列x(n)=[5,4,3,2,1],脉冲响应h(n)=[1,1,1,1]为列进行演示。

(2)计算输入序列和脉冲响应的长度。

(3)画出补零后的输入序列和脉冲响应(4)设计一个循环,在循环中实现反转、位移和计算。

并画出反转后的图像变化和卷积图像,将每一次移位结果保存为fig图。

(5)最后将上一步所生成的所有fig图合起来生成一张gif图程序展示:clear;clc;close all;(1)(2)xn=[5,4,3,2,1];M=length(xn);%输入任意序列并计算长度Mhn=[1,1,1,1];N=length(hn);%输入任意脉冲响应并计算长度Nm=[-(M-1):M+N-2];%设置代换变量的范围以便x(m)翻转和移位(3)xm=[zeros(1,M-1),xn,zeros(1,N-1)];%补零以便与m对应绘图subplot(2,2,1);stem(m,xm,'r.');%%绘输入序列x(m) ylabel('x(m)'); grid on;title('(a)输入序列x(m)');hm=[zeros(1,M-1),hn,zeros(1,M-1)];%补零以便与m对应绘图subplot(2,2,2);stem(m,hm,'r.');%绘脉冲响应ylabel('h(m)'),grid,title('(b)脉冲响应h(m)');%%加标签网格和标题yn=zeros(1,2*M+N-2);%卷积输出初始化(4)for n=0:M+N-2;%逐个计算卷积输出if n==0;xmfy=[fliplr(xn),zeros(1,M+N-2)];%实现翻转else for k=M:-1:1;xmfy(k+n)=xmfy(k+n-1);endxmfy(n)=0;xmfy;%实现翻转后移位并显示endsubplot(2,2,3);stem(m,xmfy,'b.');%%绘制翻转移位序列ylabel('x(n-m)'), grid,title('(c)x(n-m)');%%加标签网格和标题yn(M+n)=sum(xmfy.*hm);%计算第n位输出并与m位置对应subplot(2,2,4);stem(m,yn,'r.');%%绘制卷积输出序列axis([min(m),max(m),min([0,conv(xn,hn)]),max([0,c onv(xn,hn)])]);%%控制绘图坐标ylabel('y(n)');grid on;title('(d)卷积输出y(n)');%%加标签网格和标题pause(.5);drawnow,picname=[num2str(n) '.fig'];%保存的文件名:如i=1时,picname=1.fighold on % 写后面的字时,不把前面的字冲掉saveas(gcf,picname)endyn;stepall=M+N-2;(5)for i=1:stepallpicname=[num2str(i) '.fig'];open(picname)set(gcf,'outerposition',get(0,'screensize'));% matlab窗口最大化frame=getframe(gcf);im=frame2im(frame);%制作gif文件,图像必须是index索引图像[I,map]=rgb2ind(im,20);if i==1imwrite(I,map,'xianxingjuanji.gif','gif', 'Loopcount',inf,'DelayTime',0.5);elseif i==stepallimwrite(I,map,'xianxingjuanji.gif','gif','WriteMo de','append','DelayTime',0.5);elseimwrite(I,map,'xianxingjuanji.gif','gif','WriteMode','append','DelayTime',0.5); end;close allend实验结果展示:2. 循环卷积(1)以输入序列x(n)=[5,4,3,2,1],脉冲响应h(n)=[1,1,1,1]为列进行演示。

序列的卷积和快速卷积运算的编程实现

序列的卷积和快速卷积运算的编程实现

目录1 Matlab软件介绍 (1)2 项目设计目的及技术要求 (3)3 原理简介 (4)3.1 基本概念 (4)3.2 原理分析 (4)3.2.1 离散傅里叶变换(DFT)和快速傅里叶变换(FFT) (4)3.2.2 序列的卷积和快速卷积运算 (5)3.2.3 快速傅里叶变换和快速卷积 (5)4 程序设计及仿真结果分析 (6)4.1 题目一 (6)4.2 题目二 (7)4.3 题目三 (9)5 心得体会 (13)6 参考文献 (14)1 Matlab软件介绍MMATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。

它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。

MATLAB和Mathematica、Maple并称为三大数学软件。

它在数学类科技应用软件中在数值计算方面首屈一指。

MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。

matlab序列卷积

matlab序列卷积

在MATLAB中,序列卷积可以使用`conv`函数来实现。

`conv`函数用于计算两个序列的线性卷积。

以下是使用`conv`函数进行序列卷积的示例代码:
```matlab
% 定义两个序列
x = [1, 2, 3];
h = [4, 5, 6];
% 计算卷积
c = conv(x, h);
% 输出卷积结果
disp(c);
```
在上述示例中,我们定义了两个序列`x`和`h`,然后使用`conv`函数计算它们的卷积,并将结果存储在变量`c`中。

最后,我们使用`disp`函数输出卷积结果。

请注意,`conv`函数返回的卷积结果是一个新的序列,其长度等于
输入序列的长度之和减去1。

在上述示例中,输入序列`x`的长度为3,输入序列`h`的长度为3,因此卷积结果的长度为5。

此外,如果你想在MATLAB中绘制序列的图形表示,可以使用`stem`函数。

在上述示例中,我们使用`stem`函数绘制了输入序列`x`的图形表示。

你可以根据需要调整绘图参数和添加其他图形元素来更好地可视化你的数据和分析结果。

卷积运算matlab

卷积运算matlab

卷积运算matlab一、什么是卷积运算在数字信号处理和图像处理领域,卷积运算是一种常用的数学运算方法,它可以通过两个函数产生一个新的函数。

在信号处理中,卷积运算常用于信号滤波、图像边缘检测等领域。

而在图像处理中,卷积运算可以实现图像的模糊、锐化和特征提取等功能。

二、卷积运算的原理卷积运算的原理可以用以下公式表示:$$(f*g)(t)=\in t_{-\i nf ty}^{\in ft y}f(\t au)g(t-\ta u)d\ta u$$其中,$f(t)$和$g(t)$表示两个函数,$*$表示卷积运算符,$(f*g)(t)$表示卷积运算的结果。

在离散情况下,卷积运算可以用以下公式表示:$$(f*g)[n]=\su m_{m=-\i nf ty}^{\in fty}f[m]g[n-m]$$其中,$f[n]$和$g[n]$表示两个离散序列,$[n]$表示序列的下标,$*$表示卷积运算符,$[m]$表示离散序列的下标。

三、在MATL AB中进行卷积运算M A TL AB中提供了方便快捷的函数用于进行卷积运算。

具体步骤如下:1.准备输入序列首先,我们需要准备两个输入序列,分别表示$f[n]$和$g[n]$。

f=[1,2,3,4,5];g=[1,1,1];2.执行卷积运算接下来,使用MA TL AB的`c on v`函数执行卷积运算。

r e su lt=c on v(f,g);3.查看结果最后,我们可以通过打印`r es ul t`来查看卷积运算的结果。

d i sp(r es ul t);四、实际应用案例卷积运算在实际应用中具有广泛的应用性。

下面以图像处理中的边缘检测为例说明卷积运算的应用。

1.准备图像首先,我们需要准备一张待处理的图像。

i m ag e=im re ad('ima g e.jp g');2.定义边缘检测算子接下来,我们需要定义一个边缘检测算子,例如S ob el算子。

s o be l=[1,0,-1;2,0,-2;1,0,-1];3.执行卷积运算然后,使用M AT LA B的`co nv2`函数执行卷积运算。

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

数字信号处理实验报告
实验项目名称:用MATLAB实现序列的圆周卷积
实验日期: 2012-11-28 实验成绩:
实验评定标准:
一、实验目的
通过本实验,掌握一些基本而且重要的离散时间信号,熟悉基本离散时间信号的MATLAB实现方法。

二、实验器材
PC机,MATLAB软件。

三、实验内容
计算两序列x1(n)={1,2,3,4,5},x2(n)={1,2,3,4,5,4,3,2,1}的圆周卷积。

四、实验结果
实验代码:
clear all
close all
clc
x1=[1,2,3,4,5,6,7,8];
x2=[1,2,3,4,5,6,7,8,7,6,5,4,3,2, 1]; N=length(x1)+length(x2); n=0:N-1
n1=0:N-2;
n2=0:N-3;
y1=circonvt(x1,x2,N);
y2=circonvt(x1,x2,N-1);
y3=circonvt(x1,x2,N-2);
x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; Xf1=dft(x1,N);
Xf2=dft(x2,N);
Xf=Xf1.*Xf2;
x=idft(Xf,N);
x=real(x);
subplot(2,3,1)
stem(n,x1);
title('x1(n)');
subplot(2,3,2)
stem(n,x2); title('x2(n)')
subplot(2,3,3);
stem(n,x);
title('x(n)=IDFT(X(k))'); subplot(2,3,4);
stem(n,y1);
title('N点圆周卷积'); subplot(2,3,5);
stem(n1,y2);
title('N-1点圆周卷积'); subplot(2,3,6);
stem(n2,y3);
title('N-2点圆周卷积');
function y=circonvt(x1,x2,N)
if length(x1)>N
error('N 必须 >= x1的长度') end
if length(x2)>N
error('N 必须 >= x2的长度') end
x1=[x1 zeros(1,N-length(x1))]; x2=[x2 zeros(1,N-length(x2))]; m=[0:1:N-1];
x2=x2(mod(-m,N)+1);
H=zeros(N,N);
for n=1:1:N
H(n,:)=cirshift(x2,n-1,N); end
y=x1*H;
function y=cirshift(x,m,N) if length(x)>N
error('N 必须 >= x的长度') end
x=[x zeros(1,N-length(x))];
n=[0:1:N-1];
n=mod(n-m,N);
y=x(n+1);
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;
function [xn]=idft(Xk,N)
%计算逆离散傅里叶变换
%[xn]=idft(Xk,N)
n=[0:1:N-1];
k=[0:1:N-1]; WN=exp(-j*2*pi/N); nk=n'*k; WNnk=WN.^(-nk); xn=(Xk*WNnk)/N;
实验结果:
五、 实验结果分析
x(n)=IDFT(X (k))
N 点圆周卷

N-1点圆周卷

N-2点圆周卷积。

相关文档
最新文档