卷积运算
一般来说,在使用MATLAB的conv函数进行卷积运算时,我们的输入序列都是从n=0时刻开始的,设两个序列的长度为N1和N2,则得到的卷积序列的长度为N1+N2-1,其对应的横坐标范围就是0:1:N1+N2-1-1。
当两个序列的起始位置不为0时,得到的卷积结果坐标需要专门去确定。这里自编一个函数get_bound来解决这个问题,和conv一起使用效果很好。
代码实现
function [ bound ] = get_bound( n1, n2 )
%GET_BOUND 获得序列卷积的横坐标范围
% 输入:两个序列的横坐标范围
% 输出:卷积之后的横坐标范围
leftbound = n1(1) + n2(1);
Len = length(n1)+length(n2)-1;
rightbound = Len - 1 + leftbound;
bound = leftbound:1:rightbound;
end
使用举例
% 例子:
% 计算sin(n/2)与0.5^n的卷积(3<=n<4*pi)
n = -3:1:4*pi;
f1n = sin(n/2);
f2n = power(0.5, n);
yn = conv(f1n, f2n);
n_ = get_bound(n, n);
stem(n_, yn); title('卷积图像');
axis([-inf, inf, min(yn)*1.2, max(yn)*1.2]);