一、信号处理 ——3.维纳滤波(含matlab代码)
本文適合快速了解維納濾波,并能夠進行實際數據的處理。
一. 維納濾波的原理
* 有蠻多視頻進行了詳細的講解,這里不在贅述。參考如下:
語音增強-維納濾波1_嗶哩嗶哩_bilibili
語音增強-維納濾波2_嗶哩嗶哩_bilibili
二. 應用維納濾波注意事項
1. 維納濾波是根據全部過去觀測值和當前觀測值來估計信號的當前值;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
2. 維納濾波只適用于平穩隨機過程;
3.設計維納濾波器要求已知信號與噪聲的相關函數。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
三. 維納濾波實現
1. 構建一維信號并混合噪聲信號:
(1) 原始一維信號:Signal_Original =?sin(2 * pi * 10 * t) + sin(2 * pi * 20 * t) + sin(2 * pi * 30 * t)
Fs = 1000; # 采樣率 N = 1000; # 采樣點數 n = 0:N - 1; t = 0:1 / Fs:1 - 1 / Fs; # 時間序列 ##期望信號 Signal_Original = sin(2 * pi * 10 * t) + sin(2 * pi * 20 * t) + sin(2 * pi * 30 * t); plot(Signal_Original) title('期望信號'); axis([0 1000 -4 4]); # 設置坐標軸在指定的區間 xlabel('Time(n)'); ylabel('Amplitude');(2) 噪聲信號:Noise_White
##噪聲信號 ##前500點高斯分布白噪聲,后500點均勻分布白噪聲 Noise_White = [0.3 * randn(1, 500), rand(1, 500)]; plot(Noise_White) title('噪聲信號'); xlabel('Time(n)'); ylabel('Amplitude');(3) 混合信號:Signal_Original +?Noise_White
##噪聲干擾后信號 Mix_Signal = Signal_Original + Noise_White; # 構造的混合信號 subplot(2,2,3) plot(Mix_Signal) title('噪聲干擾后混合信號'); axis([0 1000 -4 4]); # 設置坐標軸在指定的區間 xlabel('Time(n)'); ylabel('Amplitude');2. 維納濾波器設計:
* 結合下面整體結構框架的關鍵點,再學習維納濾波原理,會更有幫助~
* 主要步驟如下:
(1) 混合信號的自相關系數Rxx?(維納濾波原理中有提及);
(2) 混合信號與原始信號的互相關系數Rxy?(維納濾波原理中有提及);?
xcorr函數:用于計算兩數據的相關系數
(3)設定階數M = 100 (可調參數,影響濾波效果);
(4)通過循環構建混合信號自相關矩陣rxx(i,j) (維納濾波原理中有提及);
(5)得到混合信號與原始信號的互相關向量rxy(i) (維納濾波原理中有提及);
(6)得到設計的Wiener濾波器系數(關鍵數據,用于后續對信號進行維納濾波操作):
h = inv(rxx)*rxy'
inv函數:用于求逆矩陣;若出現報錯可采用pinv函數,求偽逆矩陣。
##維納濾波 Rxx = xcorr(Mix_Signal,Mix_Signal);# 得到混合信號的自相關函數 Rxy = xcorr(Mix_Signal,Signal_Original);# 得到混合信號和原始信號的互相關函數 M = 100;# 維納濾波階數 for i = 1:M # 得到混合信號的自相關矩陣for j = 1:Mrxx(i,j) = Rxx(N-i+j);end end for i = 1:M # 得到混合信號和原信號的互相關向量rxy(i) = Rxy(i+N-1); end # 得到所要設計的Wiener濾波器系數 h = pinv(rxx)*rxy';3. 含噪信號維納濾波處理
filter函數:用于根據所設計濾波器對信號進行濾波處理。
##維納濾波后的信號 Signal_Filter = filter(h,1,Mix_Signal);# 將輸入信號通過維納濾波器 plot(Signal_Filter); title('維納濾波后的信號'); axis([0 1000 -4 4]); # 設置坐標軸在指定的區間 xlabel('Time(n)'); ylabel('Amplitude');應用subplot函數,將四幅圖同時顯示,最終效果如下:
4. 均方誤差
*均方誤差常用于評價濾波前后的信號差異
(通過數值方式評價濾波效果,而不是通過圖像顯示直接觀察,更有說服力)
*通常根據不同的實際情況,可采用不同的評價指標。
fprintf('引入噪聲后信號相對原信號的統計均方誤差:\n'); mse1 = mean((Mix_Signal-Signal_Original).^2); # 濾波后的信號相對原信號的統計均方誤差 mse1 fprintf('濾波后的信號相對原信號的統計均方誤差:\n'); mse2 = mean((Signal_Filter-Signal_Original).^2); # 濾波后的信號相對原信號的統計均方誤差 mse2mean函數:平均值計算。
* 引入噪聲后信號相對原信號的統計均方誤差:
mse1 =?0.2172
* 濾波后的信號相對原信號的統計均方誤差:
mse2 = 0.0306
應用維納濾波后,信號更接近于原始信號。
總結
以上是生活随笔為你收集整理的一、信号处理 ——3.维纳滤波(含matlab代码)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: instantclient php,Or
- 下一篇: 数字图像处理实验九维纳滤波