[信号与系统&Matlab] 从离散序列的卷积函数 conv 开始

conv 卷积函数的一般用法
首先直接上手试一下:

%# 复制下面的代码,粘贴在命令行中运行;或者复制到m文件中,按F9运行。
x = [1];       %# 序列x,可理解为代表离散的输入信号
h = [1 2 3];   %# 序列h,可理解为系统的冲激信号
y = conv(x,h)    %# 对x,h进行卷积
stem(y,'fill')   %# 绘制离散序列数据
axis([0 5 -4 8]) %# 设置图像的横坐标区间为[0,5],纵坐标区间为[-4,8]

%# 输出如下
>> y =
     1     2     3
[信号与系统&Matlab] 从离散序列的卷积函数 conv 开始_第1张图片

上面的例子就是单一脉冲信号x经过h后的响应序列。如果x序列包含多个脉冲信号,就如下面的例子:

h = [1 2 3];   %# 序列h,系统的冲激响应 

%# 分别观察离散输入信号为 x1,x2,x3时,系统的响应
x1 = [1 0];
y1 = conv(x1,h)
subplot(4,1,1);
stem(y1)
title('x1的响应序列')

x2 = [0 1];
y2 = conv(x2,h)
subplot(4,1,2); 
stem(y2)
title('x2的响应序列')

x3 = [1 1];
y3 = conv(x3,h)
subplot(4,1,3); 
stem(y3)
title('x3的响应序列')

%# 将x1,x2两个信号的响应相加,得到的响应和x3的响应一致。
subplot(4,1,4); 
y4 = y1+y2   
stem(y4,'fill')  
title('x1与x2响应序列的叠加')
 
%# 输出如下
>>y1 =
     1     2     3     0
y2 =
     0     1     2     3
y3 =
     1     3     5     3
y4 =
     1     3     5     3
[信号与系统&Matlab] 从离散序列的卷积函数 conv 开始_第2张图片

对于序列x[n]和h[n]卷积时,我们还要关心响应序列的起始位置和序列长度。例如,如果n不是从0开始的,而是从-1开始,以 x[n] = {3,1,2}, h[n] = {3,7} ,n从-1开始举例,即:

x[-1] = 3;
x[ 0] = 1; 
x[ 1] = 2;

h[-1] = 3;
h[ 0] = 7;

那么求卷积:

n  = -1;
x  = [3,1,2];
nx = [n:n+length(x)-1];
h  = [3,7];   
nh = [n:n+length(h)-1];

y  = conv(x,h) %#对x和h进行卷积
ny = [(nx(1)+nh(1)):(nx(length(nx))+nh(length(nh)))] 
stem(ny,y,'fill')
axis([-3 2 0 25]);

%# 输出如下
>> y =
     9    24    13    14
ny =
    -2    -1     0     1 %# 响应序列的起始位置为-2,即 y[-2]=9
[信号与系统&Matlab] 从离散序列的卷积函数 conv 开始_第3张图片

另外说明一下:
conv() 函数用于多项式乘法和离散序列的卷积;
conv2() 函数用于矩阵卷积,可用于图像处理。

你可能感兴趣的:(信号与系统,matlab,信号与系统)