matlab中的數字濾波器

在進行數字信號處理的時候經常需要對時間序列進行濾波。工具箱中常用的函數是filter

常見形式: y = filter(b,a,x)
其中x是輸入序列,向量b&a是濾波器的參數。y是輸出序列。
下面舉一個例子說明一下實際的計算過程。
比如要對一段語音信號做預加重處理,其實就是要讓響應的數字序列通過一個高通濾波器。濾波器的傳遞函數模型爲——H(z)=1-μ*z^(-1)。實際計算的時候可以這麼處理:y(i) = x(i) - μ*x(i-1),當index小於1的時候按照 x(index) = 0 處理。
代碼如下:

[y fs]=audioread('anger_03a01Wa.wav');
yy = filter([1 -0.9],1,y);
yyy = zeros(length(y),1);
yyy(1) = y(1);
for k = 2:length(y)
    yyy(k) = y(k) - 0.9*y(k-1);
end
%yy = 5*yy;
figure(1)
subplot(3,1,1);plot((1:length(y)),y);title('原始');xlabel('序號');ylabel('幅值'); grid;
subplot(3,1,2);plot((1:length(yy)),yy);title('調用濾波器函數');xlabel('序號');ylabel('幅值'); grid;
subplot(3,1,3);plot((1:length(yyy)),yyy);title('按照原理做序列運算');xlabel('序號');ylabel('幅值'); grid;
di = yyy - yy;%兩個結果的差別
figure(2)
plot((1:length(di)),di);title('兩個結果的計算差別');xlabel('序號');ylabel('幅值'); grid;

結果如下圖所示:
原始信號與兩種計算方法所得到的鋁箔之後的信號:
這裏寫圖片描述
兩種計算方法的差別(實際上是沒有差別的):
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章