天天看點

【濾波器】基于matlab時變維納濾波器設計【含Matlab源碼 1870期】

一、語音處理簡介

語言是人們獲得各類有效資訊的主要途徑, 而語音是語言的表現形式。語音在一定程度上可影響人們的生活, 是以, 語音信号的研究對科學領域和人們日常生活具有一定的研究價值和意義。噪聲廣泛存在于生活, 信号在傳輸過程中不可避免會受到各類噪聲的幹擾, 降低了信号的可讀性, 是以對攜帶噪聲的信号進行去噪處理十分必要。語音信号是一種特殊的信号, 其在傳輸過程中, 由于外界環境和裝置的影響不可避免會被噪聲幹擾, 一定程度上影響了人們所接收資訊的準确性。人們提出了各種語音去噪方法, 其中, 常用的有濾波器去噪法、小波分析去噪法以及小波包分析去噪法。

MATLAB是一種功能強大, 具有很好的互動性的數值計算和可視化計算進階語言, 其強大的矩陣運算, 數值分析以及信号處理功能使其廣泛應用于衆多科學領域中。是以作者使用MATLAB作為設計工具軟體來進行語音信号去噪處理。

作者在MATLAB環境下應用濾波器去噪方法對加噪聲的語音信号進行時域、頻域的分析和濾波。通過MATLAB程式設計對語音信号被噪聲污染進行仿真處理, 并對加噪聲前後的頻譜圖進行對比;然後根據語音信号特點設計各類濾波器;最後将所設計的濾波器分别應用于含噪聲的語音信号, 并對其頻譜圖進行對比分析, 确定最優化方法。

1 總體設計

利用MATLAB作為平台實作濾波和頻譜分析, 主要分為語音信号采集、語音信号分析、語音信号加噪、濾波分析以及GUI設計五個子產品, 系統框圖如圖1所示。

【濾波器】基于matlab時變維納濾波器設計【含Matlab源碼 1870期】

首先對采集的語音信号進行頻譜分析, 然後對其進行加噪并對加噪後的信号進行頻譜分析。而濾除噪聲的方法選擇了噪性能較好的濾波器方法, 即通過設計無限脈沖相應IIR濾波器來完成, 并利用這兩種方法對加噪後的語音信号進行去噪處理, 然後從頻域角度對結果進行了對比分析。最後為了加強程式的友好性和可視性, 采用GUI程式設計的方法來設計語音信号去噪系統使用者界面。

2 語音信号采集和加噪

2.1 語音信号采集

文章利用PC機聲霸卡對語音信号進行采集。PC機的聲霸卡采樣率一般在64 KHz以上, 即一秒鐘可以采集64 000個聲音樣本。而人們正常的語音信号一般在300 Hz至34 000 Hz之間, 根據奈奎斯特采樣定理, 一般的正常的語音信号均可以利用聲霸卡采集并且保證其不失真。在安靜環境下的正常交流可以近似為純語音信号, 聲音信号的長度最好控制在10 s内以便後期分析處理。

2.2 語音信号加噪

對已經獲得的純語音信号進行加噪處理來模拟在實際生活中語音信号被噪聲污染的情況。利用MATLAB中的audioread函數把語音信号轉換成序列, 得到信号資訊;sound函數可以将采樣序列通過聲霸卡轉換成聲音, 可直覺聽出加噪前後的差別。高斯白噪聲可用具體的數學表達式表示, 且可以貼近反映實際信道中的加性噪聲的情況。

文章選擇對語音信号加入高斯白噪聲來模拟聲音被污染的情況。利用MATLAB中的随機函數 (rand或randn) 産生符合高斯分布序列的噪聲序列并将其加到語音信号中, 用來模拟語音信号被污染。通過對其頻譜分析, 聲音的回放可以很清楚的聽出加噪前後的差別。也可以通過sound函數便可以聽到加噪後的語音信号, 與原始語音信号相比, 聲音刺耳根本不能分辨出原始語音信号。

3 語音信号去噪方法

對于語音去噪現在已經有一些比較成熟的方法, 如小波變換法, 小波包變換法, 以及濾波器法。利用小波的方法去噪設計過程相對繁瑣, 是以, 選用濾波器方法來實作去噪功能。

3.1 IIR濾波器語音去噪

IIR濾波器一般有三種設計方法, 分别為:零極點位置累試法、利用模拟濾波器設計數字濾波器和最優化設計法。本文選用濾波器方法, 在設計IIR濾波器的時候可以借鑒經典的成熟的模拟濾波器, 如巴特沃斯濾波器、切比雪夫濾波器和橢圓濾波器等。文章将使用巴特沃斯低通濾波器來設計數字濾波器。

由原始語音信号及其加噪前後的頻譜分析可知, 所設計濾波器應該要實作的功能是濾除掉出語音信号之外的噪聲部分的頻率, 根據要求給出技術名額如下:

低通濾波器的性能名額:fp=1 000 Hz, fs=1200 Hz, αs=50 db, αp=1 d B

高通濾波器的性能名額:fp=3 500 Hz, fs=4000 Hz, αs=50 d B, αp=1 d B

帶通濾波器的性能名額:fp1=1 200 Hz, fp2=3 000 HZ, fs1=1 000 Hz, fs2=3 200 Hz, αs=100d B, αp=1 d B

其中fp表示通帶截止頻率;fs為阻帶截止頻率;αp表示最大通帶衰減;αs表示最小阻帶衰減。

當得出相關的技術名額後便可以利用經典濾波器來設計低通濾波器, 這裡采用巴特沃斯濾波器來設計模拟低通濾波器, 并得到低通濾波器的系統函數, 即H (s) 。得到一個可以實作相關功能的模拟低通濾波器後将會采用頻率變換的方法通過低通濾波器的系統函數變換出相關的高通、帶通或帶阻濾波器的系統函數。

二、部分源代碼

% 時變維納濾波器函數示例
%需要譜圖matlab函數!
clear all
clc
close all
% 合成信号
% 采樣頻率 1 kHz
% 啁啾:從 50 Hz 開始,并在 10 秒時穿過 450 Hz,具有強 Gussian 背景噪聲 (SNR -18 dB)

fs = 1000;
T = 10;
t=0:1/fs:T;
r=chirp(t,50,T,450);
L = length(r);
wnoise = 6 .* randn(size(r));
x = wnoise + r;

figure
spectrogram(r,256,250,256,1E3);
view(-45,65)
colormap bone
title('參考信号')


figure
subplot(1,2,1)
spectrogram(x,256,250,256,1E3);
view(-45,65)
colormap bone
title('噪聲信号')

Lw = 256;
[xest,B,Nblocks] = ADwienerFilt(x,r,Lw);

subplot(1,2,2)
spectrogram(xest,256,250,256,1E3);
view(-45,65)
colormap bone
title('估計信号')      

三、運作結果

【濾波器】基于matlab時變維納濾波器設計【含Matlab源碼 1870期】
【濾波器】基于matlab時變維納濾波器設計【含Matlab源碼 1870期】

四、matlab版本及參考文獻

1 matlab版本

2014a

繼續閱讀