MATLAB 卷积形状(full/same/valid)

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’选项作为形状参数来计算的。

在相同卷积的情况下,输出信号的长度与输入信号相同。然而,输出信号相对于输入信号是居中的。

使用‘conv()’函数以‘same’选项执行相同卷积的语法如下所示:

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’。然后,我们使用’same’选项作为形状参数,使用’conv()’函数对’x’和’h’进行卷积运算。最后,我们使用’disp()’函数显示输出信号。

从输出信号可以观察到,输出信号的长度与输入信号相同。

有效卷积

在MATLAB中,使用’valid’选项作为形状参数,在’conv()’函数中执行两个信号的有效卷积。

带有’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’。接下来,我们使用 ‘valid’ 选项作为形状参数,使用 ‘conv()’ 函数对 ‘x’ 和 ‘h’ 进行有效卷积。最后,我们使用 ‘disp()’ 函数显示输出信号。

从输出信号可以看出,输出信号的长度比输入信号短。

结论

这就是我们可以对具有不同形状的信号执行不同类型的卷积的方法。本文的上述部分通过示例MATLAB程序解释了三种卷积形状,即 ‘full’、’same’ 和 ‘valid’。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程