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”。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP