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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.