MATLAB - 濾波器函式



MATLAB 中的 filter 函式是一個強大的工具,用於處理一維 (1-D) 數字訊號。它使您可以將數字濾波器應用於您的資料,從而實現噪聲減少、平滑和特徵提取等任務。

語法

filter 函式的語法為 **y = filter(b, a, x)**,它使用由分子係數 b 和分母系數 a 來表徵的有理傳遞函式對輸入資料 x 應用濾波。

根據輸入資料型別:

  • 如果 x 是向量,則 filter 函式將生成向量形式的濾波資料,大小與原始 x 相同。
  • 當 x 是矩陣時,filter 沿第一維(列)操作,並返回矩陣每一列的濾波資料。
  • 如果 x 是多維陣列,filter 將沿大小不等於 1 的陣列的第一維操作。

MATLAB 濾波器函式示例

以下是關於 matlab 濾波器函式的一些示例:

示例 1:移動平均濾波器

移動平均濾波器是一種常用的數字訊號處理技術,用於平滑或減少時間序列資料中的噪聲。

假設您有一個嘈雜的一維訊號,並且想要應用一個簡單的移動平均濾波器來平滑它。以下是如何為此目的使用 filter 函式:

% Define the moving average filter coefficients
b = [1/3, 1/3, 1/3]; % Numerator coefficients
a = 1; % Denominator coefficients

% Generate a noisy signal
t = 0:0.1:10;
x = sin(t) + 0.3 * randn(size(t));

% Apply the filter
y = filter(b, a, x);

% Plot the original and filtered signals
subplot(2, 1, 1);
plot(t, x, 'b', 'LineWidth', 2);
title('Original Noisy Signal');
xlabel('Time');
ylabel('Amplitude');

subplot(2, 1, 2);
plot(t, y, 'r', 'LineWidth', 2);
title('Filtered Signal (Moving Average)');
xlabel('Time');
ylabel('Amplitude');

在這個例子中,我們定義了一個具有係數 **b** 和 **a** 的移動平均濾波器。

係數根據移動平均濾波器定義。在這種情況下,**b** 表示分子係數,即 [1/3, 1/3, 1/3],表示視窗中的每個資料點對平均值的貢獻相同。**a** 表示分母系數,對於移動平均濾波器,它通常設定為 1。

噪聲訊號是透過使用從 0 到 10 且步長為 0.1 的時間向量 t 建立的。然後,透過向正弦波訊號新增隨機噪聲 (使用 randn 生成) 來生成噪聲訊號 x。這模擬了一個添加了噪聲的訊號。

filter 函式用於將移動平均濾波器 (b 和 a) 應用於噪聲訊號 x,從而產生濾波訊號 y。

一個包含兩個子圖(兩行一列)的圖形。在第一個子圖中,您使用藍色粗線繪製原始噪聲訊號 x,並標記座標軸。在第二個子圖中,您使用紅色粗線繪製濾波訊號 y,並標記座標軸。

在 matlab 中執行程式碼後的輸出為:

filtered_signal.jpg

示例 2:濾波矩陣行

我們將使用有理傳遞函式對矩陣行進行濾波。有理傳遞函式描述了控制理論和訊號處理中輸入和輸出之間的關係。它是用於建模和分析隨時間響應輸入的系統行為的基本概念。

讓我們首先定義有理傳遞函式的分子和分母系數。

b = 1;
a = [1 -0.2];

**b = 1;** - 在這一行中,b 設定為 1。這對應於濾波器傳遞函式的分子係數,表示濾波器不修改輸入。

**a = [1 -0.2];** - a 表示濾波器傳遞函式的分母系數。係數 [1 -0.2] 定義了一個簡單的無限脈衝響應 (IIR) 濾波器,其在 0.2 處有一個單極點。此濾波器將具有平滑效果。

讓我們生成值為 2 到 15 的隨機矩陣 x。

% Initialize the random number generator with the default seed
rng default;

% Generate a random matrix x with 2 rows and 15 columns
x = rand(2, 15)

**rng default;** - 此命令使用其預設種子初始化 MATLAB 隨機數生成器。將隨機數生成器設定為其預設狀態可確保您獲得可重複的隨機數。

**x = rand(2, 15);** - 在這裡,生成一個 2x15 矩陣 x,其中包含從 0 到 1 之間的均勻分佈中抽取的隨機值。此矩陣表示您的輸入資料。

讓我們在輸入 x 上使用 filter 函式

y = filter(b, a, x, [], 2);

**y = filter(b, a, x, [], 2);** - filter 函式用於使用指定的係數 b 和 a 沿第二維(列)對輸入矩陣 x 進行濾波。空括號 [] 表示未提供初始條件。結果儲存在 y 中,表示濾波後的資料。

讓我們建立一個索引向量來繪製圖形

t = 0:length(x) - 1;

**t = 0:length(x) - 1;** - 此行建立一個索引向量 t,其範圍從 0 到輸入資料長度減 1。

現在讓我們編寫資料繪圖程式碼:

plot(t,x(1,:))
hold on
plot(t,y(1,:))
legend('Input Data','Filtered Data')
title('First Row')

完整的程式碼如下:

rng default  %initialize random number generator
x = rand(2,15);

b = 1;
a = [1 -0.2];

y = filter(b,a,x,[],2);

t = 0:length(x)-1;  %index vector

plot(t,x(1,:))
hold on
plot(t,y(1,:))
legend('Input Data','Filtered Data')
title('First Row')

plot(t,x(1,:))
hold on
plot(t,y(1,:))
legend('Input Data','Filtered Data')
title('First Row')

matlab 中的輸出如下:

first row
廣告
© . All rights reserved.