利用MATLAB实现循环卷积
matlab 卷积函数

matlab 卷积函数
卷积是信号处理中的重要概念之一,许多时域上的操作可以在频域上进行卷积运算,进而提高运算速度。
Matlab是一款广泛使用的数学软件,在信号处理中也有非常完备的库函数,其中卷积函数就是其中之一。
Matlab中实现卷积运算的函数是conv,其使用方法十分简单。
conv函数的调用格式为:y = conv(x, h),其中x、h为输入向量,y 为输出向量。
调用该函数时,Matlab会自动计算x和h的卷积结果,并将结果存储在y中。
下面我们分步骤阐述使用Matlab中的conv函数实现卷积运算的过程。
1.打开Matlab软件并新建一个.m文件。
2.定义输入向量x和卷积核h。
输入向量x可以是一维数组,也可以是多维数组,卷积核h也是一维数组。
3.调用conv函数,并传入输入向量x和卷积核h作为参数。
函数会自动计算它们的卷积结果,并将结果存储在输出向量y中。
4.可以使用Matlab中的plot函数将输入向量x、卷积核h和卷积结果y显示出来,以便直观地理解卷积的过程。
需要注意的是,在卷积运算时通常需要对数据进行边缘填充(pad)操作,以避免因边缘效应导致的计算错误。
Matlab中提供了一些边缘填充函数来解决这个问题,如circshift和padarray。
circshift函数可以对数组进行循环位移操作,而padarray函数则可以通过添加0或其他常数值的方式对数组进行填充。
总的来说,Matlab中的conv函数可以方便地实现卷积运算,无需手动计算卷积结果。
在调用conv函数时需要注意参数的传递和边缘填充操作,以获得正确的计算结果。
卷积运算的matlab命令及其参数设置规则

卷积运算是数字信号处理和图像处理中常用的一种运算方式,它在图像滤波、特征提取等领域中发挥着重要作用。
在Matlab中,卷积运算可以通过一些内置的函数实现,同时可以通过设置不同的参数来实现不同的卷积操作。
本文将结合实际案例,介绍卷积运算在Matlab 中的常用命令及其参数设置规则。
一、卷积运算的基本概念在数字信号处理和图像处理中,卷积运算是一种重要的数学运算。
它通常用于图像滤波、特征提取等方面。
卷积运算的基本原理是将一个函数与另一个函数的翻转及平移进行积分。
在离散情况下,卷积运算可以用离散的形式来表示如下:\[y[n] = \sum_{k=-\infty}^{\infty} x[k] \cdot h[n-k]\]其中,\(x[k]\)和\(h[n]\)分别代表输入信号和卷积核,\(y[n]\)代表卷积运算的输出结果。
二、Matlab中的卷积运算函数在Matlab中,可以使用conv函数来进行一维和二维的卷积运算。
conv函数的基本语法如下:```y = conv(x, h)```其中,x和h分别代表输入信号和卷积核,y代表卷积运算的输出结果。
这里需要注意的是,x和h的长度必须是有限的,而且二者不能交换位置。
在进行二维卷积运算时,可以使用conv2函数。
conv2函数的基本语法如下:```y = conv2(x, h)```其中,x和h分别代表输入图像和卷积核,y代表二维卷积运算的输出结果。
三、卷积运算参数的设置规则在进行卷积运算时,需要注意一些参数的设置规则,以确保卷积运算的正确性和有效性。
以下是一些常见的参数设置规则:1. 卷积核的选择:卷积核的选择对卷积运算的结果影响很大。
通常情况下,可以根据具体的应用需求来选择合适的卷积核,例如高斯滤波、边缘检测等。
2. 边界处理:在进行卷积运算时,往往需要考虑图像或信号的边界处理。
常见的处理方式包括零填充、边界拓展、周期延拓等。
3. 步长和填充:在进行卷积运算时,可以通过设置步长和填充参数来控制输出结果的大小。
matlab卷积实验的内容

matlab卷积实验的内容卷积是数学和信号处理领域中常用的运算方法,可以用于信号滤波、图像处理、模拟电路等方面。
在Matlab中,卷积是一个常见的操作,可以利用卷积函数对信号进行处理。
在Matlab中,可以使用conv函数进行卷积运算。
conv函数的基本语法是:y = conv(x1, x2)其中x1和x2是要进行卷积运算的两个向量,y是卷积运算的结果。
卷积运算的结果长度是两个向量长度之和减1。
在进行卷积运算之前,我们先来了解一下卷积的原理。
数学上,卷积运算可以通过对两个函数进行积分得到。
对于离散信号来说,卷积运算可以通过对两个向量进行逐点相乘然后求和得到。
在Matlab中,我们可以通过创建两个向量来进行卷积运算的实验。
下面是一个简单的示例:x1 = [1 2 3 4];x2 = [0.1 0.2 0.3 0.4];y = conv(x1, x2)运行上述代码得到的结果是:y = [0.1 0.4 0.8 1.3 1.6 1.2]可以看到,卷积运算的结果是一个长度为6的向量。
这个结果的计算过程是:0.1*1 + 0.2*2 + 0.3*3 + 0.4*4 = 0.1 + 0.4 + 0.9 + 1.6 = 1.2。
除了使用conv函数外,Matlab还提供了一个更高级的卷积函数,即conv2函数。
conv2函数可以进行二维卷积运算,常用于图像处理。
假设我们有一个2x2的图像矩阵和一个3x3的卷积核,我们可以使用conv2函数对图像进行卷积运算。
下面是一个简单的示例:image = [1 2; 3 4];kernel = [0.1 0.2 0.3; 0.4 0.5 0.6; 0.7 0.8 0.9];result = conv2(image, kernel)运行上述代码得到的结果是:result = [4.0000 5.8000 7.0000; 7.6000 11.0000 9.8000;7.3000 10.2000 9.2000]可以看到,卷积运算的结果是一个3x3的矩阵。
MATLAB技术卷积运算实例

MATLAB技术卷积运算实例卷积运算是数字图像处理中一种常用的操作,它在信号处理、图像处理、神经网络以及其它许多领域都有广泛的应用。
MATLAB作为一款功能强大的数学软件,提供了各种函数和工具箱,使得卷积运算在MATLAB中变得非常方便和高效。
本文将通过几个实例演示如何使用MATLAB进行卷积运算,并介绍一些常见的卷积运算技巧和应用。
一、一维离散卷积在信号处理中,一维离散卷积是一种将两个离散信号相乘后求和的运算。
在MATLAB中,我们可以使用conv函数来实现一维离散卷积运算。
假设我们有两个长度分别为N和M的一维信号x和h,我们可以通过以下代码实现卷积运算:```matlabx = [1, 5, 2, 3, 4]; % 一维信号xh = [2, 1, 3]; % 一维信号hy = conv(x, h); % 进行卷积运算```在上述代码中,x和h分别表示两个一维信号,y表示卷积运算的结果。
通过运行以上代码,我们可以得到卷积运算的结果。
二、二维离散卷积除了一维信号,MATLAB也支持对二维图像进行卷积运算。
二维离散卷积是一种常见的图像处理操作,它在边缘检测、模糊处理等方面具有广泛的应用。
在MATLAB中,我们可以使用conv2函数来实现二维离散卷积运算。
假设我们有两个大小分别为NxM和PxQ的二维图像A和B,我们可以通过以下代码实现卷积运算:```matlabA = imread('image.jpg'); % 读取图像AB = [1, 2, 1; 0, 0, 0; -1, -2, -1]; % 卷积核BC = conv2(double(A), B, 'same'); % 进行卷积运算```在上述代码中,A表示二维图像,B表示卷积核,C表示卷积运算的结果。
我们首先使用imread函数读取图像A,并将其转换为double类型,以便于计算。
然后,我们定义一个卷积核B,可以根据需求进行设定。
使用MATLAB进行卷积运算的常见错误及解决方法

使用MATLAB进行卷积运算的常见错误及解决方法引言:卷积运算是数字信号处理中常用的一种操作,广泛应用于图像处理、音频处理、通信等领域。
而MATLAB作为一款强大的数学软件,也提供了方便快捷的卷积函数供我们使用。
然而,在实际操作中,由于对卷积运算的理解不够深入或者对MATLAB函数的使用不够熟悉,很容易犯一些常见的错误。
本文将针对使用MATLAB进行卷积运算的常见错误进行介绍,并给出相应的解决方法。
一、错误一:输入信号维度不匹配在进行卷积运算时,输入信号的维度必须相匹配。
一般情况下,MATLAB中的卷积函数conv()要求输入的两个信号长度相等或者至少有一个信号的长度大于另一个信号的长度,即两个信号的维度要满足M>=N(M和N分别为两个信号的长度)。
如果输入信号的维度不匹配,就会产生错误或得到错误的结果。
解决方法:确保要用于卷积运算的两个信号的维度匹配。
可以通过使用MATLAB函数reshape()或者resize()来重新调整信号的维度,使其满足卷积运算的要求。
二、错误二:边界效应处理不当在卷积运算中,边界效应是一个常见的问题。
默认情况下,MATLAB中的卷积函数conv()会采用边界补零(zero padding)的方式处理输入信号的边界,这可能会导致卷积结果出现不符合预期的边界效应。
解决方法:可以通过使用MATLAB函数padarray()来指定合适的填充方式,并对输入信号进行合适的边界处理。
常用的填充方式有:1. 边界复制(replicate):将信号边界的元素复制到填充位置。
2. 对称填充(symmetric):将信号的边界元素按对称方式填充到填充位置。
3. 循环填充(circular):将信号进行循环补充。
三、错误三:卷积核颠倒在进行卷积运算时,常常需要将卷积核(也称为滤波器)进行颠倒操作。
这是因为卷积运算中,卷积核是沿着输入信号进行滑动的,颠倒操作可以保证卷积核与输入信号的顺序一致,得到正确的卷积结果。
matlab 循环递归系统卷积码

MATLAB循环递归系统卷积码概述MATLAB是一种强大的数学计算软件,广泛应用于工程、科学和金融等领域。
在通信领域中,卷积码是一种重要的纠错码,能够有效地提高通信系统的可靠性和性能。
本文将从MATLAB循环递归系统卷积码的原理、实现方法和应用进行详细介绍。
一、卷积码的原理1.1 卷积码的基本概念卷积码是一种线性的纠错码,它利用置换、加法和乘法等运算对信息进行编码。
在通信系统中,卷积码通常采用编码器对输入数据进行编码,接收端则利用译码器对接收到的码字进行译码。
卷积码具有良好的纠错性能和较高的复杂度,广泛应用于数字通信系统中。
1.2 卷积码的特点卷积码是一种具有记忆性的码制,其编码过程是通过产生状态转移图来实现的。
在编码器中,输入的信息比特会依次经过一系列的状态转移,最终输出编码比特。
由于卷积码具有较长的约束长度和较复杂的状态转移图,因此其译码复杂度较高,但能够提供良好的纠错性能。
二、MATLAB实现卷积码的方法2.1 卷积码编码器的实现在MATLAB中,可以利用编程语言对卷积码进行编码器的实现。
首先需要定义卷积码的生成多项式和约束长度,然后利用状态转移图的方法来实现编码器。
在MATLAB中,可以利用有限状态机的方法来实现卷积码的编码器,通过状态转移图的定义和输入比特的移位来生成编码比特。
2.2 卷积码译码器的实现在MATLAB中,可以利用Viterbi算法来实现卷积码的译码器。
Viterbi算法是一种动态规划算法,通过计算每个状态的路径度量来实现译码过程,最终选择路径度量最小的状态作为最优路径。
在MATLAB中,可以利用编程语言编写Viterbi算法的程序来实现卷积码的译码器,从而实现卷积码信号的译码过程。
三、MATLAB循环递归系统卷积码的应用3.1 通信系统中的应用在数字通信系统中,卷积码广泛应用于无线通信、卫星通信和光纤通信等领域。
利用MATLAB实现的卷积码可以提高通信系统的可靠性和性能,降低误码率和提高数据传输速率。
matlab离散循环卷积

matlab离散循环卷积离散循环卷积是信号处理和数字信号处理中的一个重要概念。
在MATLAB中,可以使用内置函数`cconv`来实现离散循环卷积。
这个函数的语法为:matlab.c = cconv(a, b, N)。
其中,`a`和`b`是长度为`N`的向量,表示输入的两个信号;`N`是信号的长度;`c`是长度为`N`的向量,表示输出的卷积结果。
在MATLAB中,离散循环卷积的计算可以使用`cconv`函数,也可以手动编写代码来实现。
一种常见的实现方式是使用循环来计算离散循环卷积的结果。
下面是一个简单的示例代码:matlab.function c = my_cconv(a, b, N)。
c = zeros(1, N);for n = 1:N.for k = 1:N.j = mod(n k, N) + 1;c(n) = c(n) + a(k) b(j);end.end.end.这段代码实现了离散循环卷积的计算过程,首先创建一个长度为`N`的全零向量`c`,然后使用双重循环遍历输入信号`a`和`b`,根据离散循环卷积的定义进行计算,并将结果保存在向量`c`中。
除了使用`cconv`函数和手动编写代码,还可以使用快速傅立叶变换(FFT)来计算离散循环卷积,这种方法通常比直接计算更高效。
MATLAB中提供了`fft`和`ifft`函数来进行快速傅立叶变换和逆变换,可以利用这些函数来实现离散循环卷积的计算。
总之,离散循环卷积在信号处理和数字信号处理中具有重要的应用,MATLAB提供了多种方式来实现离散循环卷积的计算,包括使用`cconv`函数、手动编写计算代码以及利用快速傅立叶变换。
根据具体的应用场景和需求,可以选择合适的方法来实现离散循环卷积。
基于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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、实验目的
1.利用MATLAB 实现循环卷积。
2.比较循环卷积与线性卷积的区别。
二、实验条件
PC 机,MATLAB7.0
三、实验内容
1)循环卷积的定义:两个序列的N 点循环卷积定义为:
)0()()()]()([1
0N n m n x m h n x n h N k N N <≤-=⊗∑-=
利用MATLAB 实现两个序列的循环卷积可以分三个步骤完成:
(1)初始化:确定循环点数N ,测量输入2个序列的长度。
(2)循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V 。
(3)相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。
程序如下:
程序一:
clear;close all ;
N=10;
x1=[6 15 -6 3 5 7 0 1];
x2=[7 1 2 9 4 3 20 6];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(3,1,1);
stem(xxn1,x1);
subplot(3,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(3,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
运行后所得图形如下:
观察所得的循环卷积结果发现并没有呈现周期性的序列,因此将程序做下列改变。
程序二:
clear;close all;
N=40;
x1=[6 15 -6 3 5 7 0 1];
x2=[7 1 2 9 4 3 20 6];
x2=[x2,x2,x2,x2];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(3,1,1);
stem(xxn1,x1);
subplot(3,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(3,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
从图中可以看出循环卷积的结果已经呈循环序列。
将程序进一步改进——在x2序列之间加一些零矩阵;程序如下:
clear;close all;
N=50;
x1=[6 15 -6 3 5 7 0 1];
x2=[7 1 2 9 4 3 20 6];
x2=[x2,zeros(1,7),x2,zeros(1,7),x2,zeros(1,7),x2];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(3,1,1);
stem(xxn1,x1);
subplot(3,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(3,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
2)线性卷积与循环卷积的区别:
从循环卷积的定义公式中可以看出,循环卷积和线性卷积的不同之处在于:①两个N 点序列的N点循环卷积的结果仍为N点序列,而两个N点序列线性卷积的结果的长度则变为为2N-1;②循环卷积对序列的移位采取循环移位,而线性卷积对序列则是
采取线性位移。
而就是这两点不同,导致循环卷积和线性卷积有不同的结果和性质。
然而虽然循环卷积和线性卷积虽然是不同的概念,但是它们之间有一个有意义的
公式联系在一起)()(')]()([)(n G rN n y n x n h n y N r N ⎪⎭
⎫ ⎝⎛-=⊗=∑∞-∞=,其中)(*)()('n x n h n y =;也就是说,两个序列的N 点循环卷积是他们的线性卷积以N 为周期的周期延阔。
设序列h(n)的长度为1N ,序列x(n)的长度为2N ,此时,线性卷积结果的序列的点数为1-'21N N N +=;因此如果循环卷积的点数N 小于121-+N N ,那么上述周期性延阔的结果就会产生混叠,从而两种卷积会有不同的结果。
而如果N 满足'N N =的条件,就会有)0)((')(N n n y n y <≤=。
这就会意味着在时域不会产生混叠。
因此,可以得出结论:若通过在序列的末尾填充适当的零值,使得x(n)和h(n)成为121-+N N 点序 列,并作出这两个序列的121-+N N 循环卷积与线性卷积的结果在N n <≤0范围内相同。
将循环卷积的结果与线性卷积做对比,程序如下:
clear;close all ;
N=50;
x1=[6 15 -6 3 5 7 0 1];
x21=[7 1 2 9 4 3 20 6];
x2=[x21,zeros(1,7),x21,zeros(1,7),x21,zeros(1,7),x21];
xn1=length(x1);
xxn1=0:xn1-1;
xn2=length(x2);
xxn2=0:xn2-1;
subplot(4,1,1);
stem(xxn1,x1);
subplot(4,1,2);
stem(xxn2,x2);
x11=fft(x1,N);
x12=fft(x2,N);
y11=x11.*x12;
y1=ifft(y11,N);
subplot(4,1,3);
n=0:length(y1)-1;
stem(n,y1,'.');
title('循环卷积的结果');
xlabel('n');ylabel('y1(n)');
y2=conv(x1,x21);
subplot(4,1,4)
stem(y2,'.');
title('线性卷积的结果');
xlabel('n');ylabel('y2(n)');
关于循环卷积,需要知道循环卷积仅仅是针对离散傅里叶变换;然而,这里的循环是针对周期序列而言的;而线性卷积是针对有限长序列,要用DFT求线性卷积,必然要求周期序列的一个周期内求卷积能和有限长序列求线性卷积等值。
因此需要求N点长度的循环卷积必然要和线性卷积的长度一致。
至少N要不少于线性卷积的长度。
四、实验结论和讨论
1.学习了与循环卷积相关的概念,知道了有限长序列的循环移位是指)(n))R -y((m N n ,也就是先让序列y(n)以N 为周期进行周期延拓,再进行反折,然后朝右移位,只朝一个方向移位的原因是:对周期序列向右移动一个位置,也就相当于向左移动了N -1个位置,最后取(0,N -1)的N 个值就得到了循环移位后的N 个序列值。
设有
序列x(n)和y(n),其N 点循环卷积为: ∑-=-=1
0)())(()()N k N N n R m n x m h m Y
(由于循环移位的关系最后得到的循环卷积的长度就是N 点,m 取[0,1,2,…,N-1]。
循环卷积的简介表示为:)()()(n x n h m Y ⊗=。
熟知了循环卷积的算法以及如何用MATLAB 实现循环卷积的运算。
一共分为三步分别是初始化:确定循环点数N ,测量输入2个序列的长度,长度小于N 的在后面补0;循环右移函数:将序列x(n)循环右移,一共移N 次(N 为循环卷积的循环次数),最后将每次循环成的新序列组成一个矩阵V ;相乘:将x(n)移位后组成的矩阵V 与第二个序列h(n)对应相乘,即得循环卷积结果。
2.再次复习了一边线性卷积的相关性质,比较了线性卷积与循环卷积之间相同与不同之处。
知道当循环卷积L>=线性卷积的长度时,线性卷积的结果与循环卷积的结果是相等的;但是循环卷积首先长度是不变的,而线性卷积的长度是L1+L2-1,也就是说积分或者求和的上限是不一样的,前者是1:N,而后者是无穷。
3. 通过这次设计我也发现了自身存在的一些问题,程序的逻辑虽然在脑海中能有一个大概的轮廓,但是要将它实现并写出完整的程序却还是有些困难。
虽然这次程序在老师的指导和帮助下写了出来,但是在一些基础的语言结果比如零矩阵的数输写还无法在没有程序的参考下写出来。
这也体现了我对MATLAB 还不熟悉,需要更多的练习来巩固和完善自己。