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”。

更新于: 2023年8月7日

311 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告