基于MATLAB语音信号的处理与滤波
摘要:MATLAB是十分強大的用于數據分析和處理的工程實用軟件,利用其來進行語音信號的分析、處理和可視化十分便捷。文中介紹了在MATLAB環境中如何驅動聲卡采集語音信號和語音信號采集后的文檔處理方法,并介紹了FFT頻譜分析原理及其顯示、MATLAB中相關函數的功能、濾波器的設計和使用。在此基礎上,對實際采集的一段含噪聲語音信號進行了相關分析處理,包括對語音信號的錄取和導入,信號時域和頻域方面的分析,添加噪聲前后的差異對比,濾波分析,語音特效處理。結果表明利用MATLAB處理語音信號十分簡單、方便且易于實現。
關鍵詞:語音信號; MATLAB; 數字濾波; 濾波器;
?
一、設計內容:
語音信號處理技術的發展體現在生活中的各個方面,其重要性和現實意義也早已超乎大眾的想象,早期的BB機到 電話、大哥大到手機和智能機的這一系列發展表明語音信號 處理技術正迅速發展。目前,在語音信號處理方面已經取得 了非常大的進展,語音信號處理技術在計算機接口與人機交 互方面應用得最為廣泛。語音信號處理技術涵蓋得非常廣泛,包括語音識別、說話人的識別和確定、語種的識別和確認、關鍵詞的檢測和確認、語音的合成和語音編碼等。目前,最富前景和挑戰性的就是語音識別的技術,該技術在現實生活中已經有了具體的實際應用,其在車載導航、視頻監控、網絡視 訊等人機交互領域有著非常廣泛的應用。而其中高性能的 連續語音、大詞匯量語音識別系統是當前語音識別技術的前沿代表;同時語音信號的準確性識別也是亟待解決的主要任務。本文選用語音處理技術作為研究項目,是一次非同尋常的嘗試。另外,采用 MATLAB來進行一系列的研究處理。MATLAB是一個功能強大的計算軟件,在 MATLAB中 可以非常方便、快捷地處理很多技術。此次在MATLAB中完成相關濾波器的設計,因為 MATLAB在參數調整上非常簡便快捷,這在很大程度上減輕了研究者的工作量,對濾波器的優化也非常有利。下列是本次項目的任務:
1.熟悉并掌握MATLAB中有關聲音(wave)錄制、播放、存儲和讀取的函數。
2.在MATLAB環境中,使用聲音相關函數錄制2秒左右自己的聲音,抽樣率是8000Hz/s,以及如何排除對這些無效點的采樣。
3.分別取8000個和16000個數據進行頻譜分析,得到幅度和相位譜,比較二者異同并分析原因,利用窗函數和雙線性變換法設計。
4.針對電話信道(最高3500Hz),設計一個FIR或IIR濾波器進行濾波,把抽樣率轉變為7000Hz/s,并進行頻譜分析,得到幅度和相位譜。
5.對聲音進行背景噪聲濾除,把處理后的所有數據儲存為聲音文件,與原始聲音進行比較。
二、設計原理
1.語音信號的采集
為了將原始的模擬語音信號轉變為數字信號,必須進行采樣和量化,進而得到時間和幅度上均為離散的數字語音信號。又因為 MATLAB只能處理“.wav”結尾的音頻信號,所以在錄制聲音的時候,格式不匹配就需要利用格式工廠軟件進行格式轉化。而且通過程序[x,fs,bits]=wavread(‘bishe.wav’)來讀取語音信號時,MATLAB默認的fs=44100Hz,故調整頻率為8000Hz。
2.語音信號的頻譜分析
首先畫出語音信號的時域波形,然后對語音號進行快速傅里葉變換,得到信號的頻譜特性,從而加深對頻譜特性的理解。
3.設計數字濾波器并得出其頻率響應
各濾波器的性能指標:
(1)低通濾波器性能指標:fb=1000 Hz,fc=1200 Hz,As=100dB,Ap=1dB。
(2)高通濾波器性能指標:fc=4800 Hz,fb=5000 Hz As=100dB,Ap=1dB。
(3)帶通濾波器性能指標:fp1=1200 Hz,fp2=3000 Hz,fsc1=1000 Hz,fsc2=3200Hz,As=100dB,Ap=1dB。
用窗函數法和雙線性變換法設計上面要求的3種濾波器。在Matlab中,使用函數butter,cheby1等函數設計IIR濾波器;利用Matlab中的函數freqz得出各濾波器的頻率響應。
4.用濾波器對信號進行濾波
用自己設計的各種濾波器分別對采集的信號進行濾波,在Matlab中,FIR濾波器利用函數fftfilt對信號進行濾波,IIR濾波器利用函數filter對信號進行濾波。在將語音信號進行數字化前,必須先進行防混疊預濾波,預濾波的目的有兩個,一是抑制輸入信導各領域分量中頻率超出1/2的所有分量(為采樣頻率),以防止混疊干擾;二是抑制50Hz的電源工頻干擾。預濾波器必須是一個帶通濾波器,設其上、下截止顏率分別是和。
5.比較濾波前后語音信號的波形及頻譜
然后在一個窗口同時畫出濾波前后的波形及頻譜。
6.回放語音信號
在Matlab中,使用相關聲音函數對聲音進行回放。辨別濾波前后的聲音有何變化。優先構造回聲的模型,以前輸入的延遲和當前輸入的疊加得到輸出,而回聲的明顯程度就和Delay有關系
7. 背景噪聲濾除
再錄制一段同樣長時間的背景噪聲(頻譜能量集中在某個小范圍內)疊加到你的語音信號中,分析疊加前后信號頻譜的變化,設計一個合適的濾波器,能夠把該噪聲濾除。
三、設計過程
1.語音信號采集 fs = 8000; % 采樣頻率 duration = 2; % 時間長度(秒) n = duration*fs; % 采樣點數 t = (1:n)/fs; %創建一個錄音文件:fs =8000 recObject = audiorecorder(fs, 16, 1); fprintf('開始錄音:\n');pause(0); recordblocking(recObject, duration); stop(recObject); fprintf('錄制結束\n'); play(recObject); % 播放錄制的音頻 y = getaudiodata(recObject); ymax = max(abs(y)); % 歸一化 y = y/ymax;2.繪制波形圖,見圖1 audiowrite('audio1.wav', y, fs); % 寫入音頻 figure(1); plot(t, y); xlabel('時間/s'); ylabel('幅度'); title('(a)fs = 8000'); Grid;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1.原聲 波形圖
通過觀察圖形,發現在錄音過程中出現了這樣一個現象:錄制剛開始時,出現一些無效的點,后面也出現一些無效的點。出現這種現象的原因主要是錄音開始時,人的反應相對電腦開始錄制慢了,導致出現了一些無效點,而后面出現的無效的點,主要是已經沒有聲音的動作。所以解決無效點出現,只需要將有效點位置單獨截取出來然后重新繪制時域圖形就能解決。
先對語音信號預處理結果及分析,如圖2所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2 語音信號預處理結果分析
對采集到的語音信號分別做傅里葉變換進行頻譜分析,并顯示頻譜圖,觀察各自的幅頻譜特性。該頻譜圖橫坐標并未進行對應關系處理,但仍不失其頻譜特性的本質,由頻譜圖可清楚地看到樣本聲音主要以低頻為主。人的語音信號頻率一般集中在1kHz之前,從聲音頻譜的包絡來看, 根據采樣定理,信號寬度近似取為1kHz,重放語音后仍可較清晰的聽出原聲, 不存在聲音混疊現象。
對8000個數據進行分析,如圖3所示。
y=audioread('C:\Users\Lenovo\Desktop\audio project\audio1.wav'); d=fft(y,8000); %對語音信號8000點進行FFT變換 subplot(2,2,1); plot(abs(d)); xlabel('頻率'); ylabel('幅度'); title('8000點幅度譜'); grid; subplot(2,2,2); plot(angle(d)); xlabel('頻率'); ylabel('angle(d)'); title('8000點相位譜'); grid;圖3.8000點的FFT變換
對16000個數據進行分析,如圖4所示。 y=audioread('C:\Users\Lenovo\Desktop\audio project\audio1.wav'); d=fft(y,16000); %對語音信號進行FFT變換 subplot(2,2,1); plot(abs(d)); xlabel('頻率'); ylabel('幅度'); title('16000幅度譜'); grid; subplot(2,2,2); plot(angle(d)); xlabel('頻率'); ylabel('angle(d)'); title('16000相位譜'); grid;圖4 16000點的FFT變換
由圖4可得8000點和16000點的幅度譜和相位譜基本相同,但8000比16000的圖形線有點稀疏,故,點數越多,線條越密集。
設計一個針對電話信道的IIR型低通濾波器,如圖5所示。
%利用buttord設計IIR低通濾波器 rp=0.5;rs=60; %通帶波紋系數rp,最小阻帶衰減rs Ft=7000; Fp=1200; Fs=2000; wp=2*pi*Fp/Ft; ws=2*pi*Fs/Ft; %求出待設計的模擬濾波器的邊界頻率 [n,wn]=buttord(wp,ws,rp,rs,'s') %低通濾波器的階數和截止頻率 [b,a]=butter(n,wn,'s'); %濾波器的傳輸函數 [bz,az]=bilinear(b,a,0.5); %利用雙線性變換實現頻率響應S域到Z域的變換 %低通濾波器特性 figure(3); [h,w]=freqz(bz,az); %利用freqz函數求頻率響應 subplot(2,1,1); plot(w*fs/(2*pi),abs(h)); %二維連續圖形 grid; title('IIR低通濾波器'); xlabel('\omega/\pi'); ylabel('振幅'); subplot(2,1,2); plot(w/pi,20*log10(abs(h))); grid; title('IIR低通濾波器'); xlabel('\omega/\pi'); ylabel('振幅');圖5 IIR低通濾波器的幅頻特性
%利用ellipord設計IIR低通濾波器,如圖6所示。 Fp=1200; Fs=2000; Ft=7000; As=60; Ap=0.5; wp=2*pi*Fp/Ft; ws=2*pi*Fs/Ft; [n,wn]=ellipord(wp,ws,Ap,As,'s'); [b,a]=ellip(n,Ap,As,wn,'s'); [B,A]=bilinear(b,a,1); [h,w]=freqz(B,A); %利用freqz函數求頻率響應 figure(2); plot(w*Ft/pi/2,abs(h)); title('IIR低通濾波器'); xlabel('頻率'); ylabel('幅度'); grid;圖6?利用ellipord設計IIR低通濾波器的幅頻特性
5.對錄制的聲音進行濾波處理,如圖7所示。 fs=8000; y=audioread('C:\Users\Lenovo\Desktop\audio project\audio1.wav'); f=filter(bz,az,y); %濾波 f1=fft(f,1024); subplot(2,1,1) plot(abs(f1)); %濾波后的時域圖 title('濾波后的幅度譜'); grid; subplot(2,1,2) plot(angle(f1)); %濾波后的時域圖 title('濾波后的相位譜'); grid; audiowriter('C:\Users\Lenovo\Desktop\audio project\audio2.wav',f,fs); %對濾波后的聲音進行儲存。圖7 對錄制的聲音進行濾波處理
聲音濾波完成,進行下一步。
6.將處理后的聲音與原聲音進行對比,如圖8所示。 fs=8000; y=audioread('C:\Users\Lenovo\Desktop\audio project\audio1.wav'); y1=audioread('C:\Users\Lenovo\Desktop\audio project\audio2.wav'); yx=fft(y); yx1=fft(y1); subplot(2,1,1) plot(20*log10(abs(yx))); title('濾波前的相對幅度譜'); subplot(2,1,2); plot(20*log10(abs(yx1))); title('濾波后的相對幅度譜');圖8 濾波前后的相對幅度譜
通過濾波前后兩種信號的對比,它們的幅度基本一致,但原聲比濾波后的聲音清晰和自然,因原聲經過低通濾波器后,其將信號高頻部分濾掉,只余低頻。
7.回放語音信號 clear clc [audio1,fs]=audioread('audio1.wav'); sound(audio1,fs); Pause; [audio2,fs]=audioread('audio2.wav'); sound(audio2,fs);聲音變化:原聲傾向于自然清晰,濾波后的聲音則偏向低沉和憂郁。
通過sound函數重放濾波后的語音可以發現,噪聲已經比較微弱,可以清晰地 聽到“XX科技大學”這幾個字。
四、結論
MATLAB提供了許多專用工具箱,靈活利用這些工具箱和函數,可以實現很多信號處理任務。同時,MATLAB還支持用戶對其函數進行二次開發,以滿足不同要求。在信號處理過程中,MATLAB兼顧了專用工具軟件的簡單性和計算機程序語言的靈活性,特別是處理效果的可視性和可感知,有利于理解信號處理的本質,有利于激發學習和研究興趣,也有利于培養MATLAB軟件的操作技能。
本文首先利用MATLAB完成語音的錄制、讀取,設置適當的采樣頻率對信號進行采樣,并繪制出原始語音信號在時間域上的波形,利用快速傅里葉變換得到語音信號在頻率域上的波形圖;其次,對采集的語音信號進行加噪處理,繪制出添加噪聲之后的語音信號的時域波形和頻域波形圖;
最后,通過設計濾波器來對加噪后的語音信號進行濾波,對比其濾波前后的波形變化。在整個研究過程中,MATLAB軟件用于實現聲音的回放、時域上的波形和頻域上的波形顯示。采樣時需要設置合適的采樣頻率來滿足采樣定理,以便能恢復原始音頻;再通過設置合理的性能參數,利用窗函數法和雙 線性變換法的設計方法,完成IIR數字濾波器的設計。
總結
以上是生活随笔為你收集整理的基于MATLAB语音信号的处理与滤波的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rslinx连接linux教程,RSLi
- 下一篇: 天宝DINI03/莱卡DNA03等电子水