MATLAB 中的卷积形状(full/same/valid)
在数字信号处理和图像处理中,卷积是一种至关重要的数学运算。卷积的主要功能是将两个信号组合起来产生一个结果信号。结果信号指定了我们组合的两个信号之间的交互作用。
在 MATLAB 中,我们可以使用内置函数“conv()”来执行两个信号的卷积。此 MATLAB 函数通过使用积分的离散近似来执行卷积。为此,它使用输入信号的离散样本。
语法
以下是“conv()”函数的一般语法:
a = conv(x, y, shape);
这里,“x”和“y”是要执行卷积的两个输入信号,“a”存储卷积的结果,即结果信号,参数“shape”指定卷积输出信号的形状。
在 MATLAB 中,我们可以指定三种**卷积形状**,即“**full**”、“**same**”和“**valid**”。
现在让我们详细讨论这三种输出信号的卷积形状。
卷积形状
完全卷积
要执行完全卷积,将“full”指定为形状参数。当我们想要找到整个信号的卷积时,使用此选项。
关于通过完全卷积获得的输出信号需要注意的重要一点是,它通常比两个输入信号都长。
通常,输出信号的长度由下式给出:
$$\mathrm{l_{out}\:=\:(l_1+l_2)− 1}$$
其中,lout是输出信号的长度,l1和l2是输入信号的长度。
执行完全卷积的“conv”函数的一般语法如下所示
a = conv(x, y, 'full');
以下 MATLAB 程序演示了完全卷积(“full”选项)的实现。
示例
% MATLAB program to demonstrate the full convolution % Define two input signals x = [2 4 6 8]; % Input signal h = [0.7 0.7]; % Impulse response of a system “y = h” % Perform full convolution C = conv(x, h, 'full'); % Display the result disp('Full Convolution of Signals x and h is:'); disp(C);
输出
Full Convolution of Signals x and h is: 1.4000 4.2000 7.0000 9.8000 5.6000
解释
在此 MATLAB 代码中,我们首先定义两个输入信号,即输入信号“x”和系统“h”的脉冲响应。然后,我们使用“conv()”函数和“full”选项执行“x”和“h”的完全卷积。最后,我们使用“disp()”函数显示输出信号。
从输出信号可以看出,输出信号的长度比输入信号的长度长。
相同卷积
两个信号的相同卷积是通过在“conv”函数中使用“same”选项作为形状参数来计算的。
在相同卷积的情况下,输出信号的长度保持与输入信号相同。但是,输出信号相对于输入信号居中。
使用“same”选项执行相同卷积的“conv()”函数的语法如下所示
a = conv(x, y, 'same');
现在,让我们考虑一个 MATLAB 示例来了解相同卷积的实现。
示例
% MATLAB program to demonstrate the same convolution % Define two input signals x = [2 4 6 8]; % Input signal h = [0.7 0.7]; % Impulse response of a system % Perform the same convolution C = conv(x, h, 'same'); % Display the result disp('Same Convolution of Signals x and h is:'); disp(C);
输出
Same Convolution of Signals x and h is: 4.2000 7.0000 9.8000 5.6000
解释
在上面的 MATLAB 程序中,我们首先定义两个输入信号,即输入信号“x”和系统“h”的脉冲响应。然后,我们使用“conv()”函数和“same”选项作为形状参数执行“x”和“h”的相同卷积。最后,我们使用“disp()”函数显示输出信号。
从输出信号可以看出,输出信号的长度与输入信号的长度相同。
有效卷积
在 MATLAB 中,两个信号的有效卷积是通过在“conv()”函数中使用“valid”选项作为形状参数来执行的。
带有“valid”选项的 conv() 函数仅在两个输入信号完全重叠时(即没有零填充)才执行这两个输入信号的卷积。
在这种情况下,输出信号的长度通常比输入信号的长度短。
以下是使用“valid”选项执行有效卷积的“conv()”函数的一般语法
a = conv(x, y, 'valid');
以下 MATLAB 程序说明了执行信号有效卷积的代码的实现。
示例
% MATLAB program to demonstrate the valid convolution % Define two input signals x = [2 4 6 8]; % Input signal h = [0.7 0.7]; % Impulse response of a system % Perform the valid convolution C = conv(x, h, 'valid'); % Display the result disp('Valid Convolution of Signals x and h is:'); disp(C);
输出
Valid Convolution of Signals x and h is: 4.2000 7.0000 9.8000
解释
在此 MATLAB 程序中,我们首先定义两个输入信号,即输入信号“x”和系统“h”的脉冲响应。接下来,我们使用“conv()”函数和“valid”选项作为形状参数执行“x”和“h”的有效卷积。最后,我们使用“disp()”函数显示输出信号。
从输出信号可以看出,输出信号的长度比输入信号的长度短。
结论
这就是我们如何使用不同形状对信号执行不同类型的卷积。本文的上述部分借助示例 MATLAB 程序解释了三种卷积形状,即“full”、“same”和“valid”。