- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料匯出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - if 語句
- MATLAB - if else 語句
- MATLAB - if…elseif else 語句
- MATLAB - 巢狀 if 語句
- MATLAB - switch 語句
- MATLAB - 巢狀 switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - for 迴圈
- MATLAB - while 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - break 語句
- MATLAB - continue 語句
- MATLAB - end 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - 返回語句
- MATLAB - 空函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - map 函式
- MATLAB - mean 函式
- MATLAB - end 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - try…catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 格式化繪圖
- MATLAB - 對數座標軸圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等高線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換函式
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 為座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者自定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消去法
- MATLAB - 高斯-約旦消去法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
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 中執行程式碼後的輸出為:
示例 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 中的輸出如下: