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