【語音增強】基于 iir帶阻濾波器語音增強matlab源碼
?一、簡介
語音增強是指當語音信號被各種各樣的噪聲干擾、甚至淹沒后,從噪聲背景中提取有用的語音信號,抑制、降低噪聲干擾的技術(shù)。一句話,從含噪語音中提取盡可能純凈的原始語音。
實際語音遇到的干擾可以分以下幾類:①周期性噪聲,例如電氣干擾,發(fā)動機旋轉(zhuǎn)部分引起的干擾等,這類干擾表現(xiàn)為一些離散的窄頻峰;②沖激噪聲,例如-些電火花、放電產(chǎn)生的噪聲干擾;③寬帶噪聲,這是指高斯噪聲或白噪聲一類的噪聲,它們的特點是頻帶寬,幾乎覆蓋整個語音頻帶;④語音干擾,例如話筒中拾入其它人的說話,或者傳輸時遇到串音引起的語音。對付上述各種不同類型的噪聲,增強技術(shù)亦是不一樣的。
語音增強的一個主要目標是從帶噪語音信號中提取盡可能純凈的原始語音。然而,由于干擾通常都是隨機的,從帶噪語音中提取完全純凈的語音幾乎不可能。在這種情況下,語音增強的目的主要有兩個:一是改進語音質(zhì)量,消除背景噪音,使聽者樂于接受,不感覺疲勞,這是一種主觀度量;二是,這是一種客觀度量。這兩個目的往往不能兼得。目前有一些對低信噪比帶噪語音進行語音增強的方法,可以顯著地降低背景噪聲,改進語音質(zhì)量,但并不能提高語音的可懂度,甚至略有下降。
語音增強不但與語音信號數(shù)字處理理論有關(guān),而且涉及到人的聽覺感知和語音學范疇。再者,噪聲的來源眾多,因應(yīng)用場合而異,它們的特性也各不相同。所以必須針對不同噪聲,采用不同的語音增強對策。某些語音增強算法在實際應(yīng)用中己經(jīng)證明是有效的,它們大體上可分為四類:噪聲對消法、諧波增強法、基于參數(shù)估計的語音再合成法和基于語音短時譜估計的增強算法。
二、源代碼
%% P2_2_1 語音信號采樣,畫出時域和頻域的圖
[y,fs] = audioread('myname.wav');% y為采樣數(shù)據(jù);fs為采樣頻率
sound(y,fs); ? ? ? ? ?% 播放語言信號myname
N = length(y); ? ? ? ?% 信號的長度
t = (0:N-1)/fs; ? ? ? % 時域范圍
figure(1);subplot(211);plot(t,y); title('音頻時域圖');%音頻信號時域圖
xlabel('Time');ylabel('Amplitude');
Y = fft(y,N); ? ? ? ? ? % FFT分析頻譜
df = fs/length(Y); ? ? ?% 計算譜線間隔
f = 0:df:(fs/2-df); ? ? % 頻譜范圍,截取前半段(抽樣頻率高于最大頻率的2倍)
Yf = abs(Y); ? ? ? ? ? ?% 幅度響應(yīng)
Yf = Yf(1:length(Yf)/2);% 由于幅度響應(yīng)是偶函數(shù),所以截取一半
% 畫圖
figure(1);
subplot(212);axis([0,fs/5,0,5000]);plot(f,Yf);title('音頻頻譜圖');
%% P2_2_2 加入噪聲之后的時域和頻域圖
y = y(:,1); y = y';
nt = randn(1,length(y)); ? ? ? ? ? ?% 生成高斯噪聲
%設(shè)計BPF得到4KHZ到5KHZ的噪音
fp1 = 4000;fp2 = 5000; ? ? ? ? ? ? ?% BPF指標
WP1 = 2*pi*fp1/fs;WP2 = 2*pi*fp2/fs;% 將模擬指標轉(zhuǎn)換為數(shù)字指標
wn1 = [WP1 WP2];
b = fir1(34,wn1,'bandpass');
yn = filter(b,1,nt); ? % 噪聲的信號
s = y+yn; ? ? ? ? ? ? ?% 將帶限噪音和原來的音頻混合
%sound(s,fs);
S = fft(s,N);
Sf = abs(S); ? ? ? ? ? ? ? ?% 幅度
DF = fs/length(S); ? ? ? ? ?% 計算譜線間隔
f = 0:DF:(fs/2-DF); ? ? ? ? % 頻譜范圍,截取前半段(抽樣頻率高于最大頻率的2倍)
Sf = Sf(1:length(Sf)/2); ? ?% 由于幅度響應(yīng)是偶函數(shù),所以截取一半
% 畫圖
figure(2);
subplot(211);plot(t,s); title('加入噪聲的音頻時域圖');
xlabel('Time');ylabel('Amplitude');grid on;
subplot(212);axis([0,fs/5,0,10000]);plot(f,Sf);title('加入噪聲的音頻頻譜圖');
xlabel('Frequency');ylabel('Amplitude');grid on;
%% P2_2_3 設(shè)計濾波器,并濾波
%設(shè)計帶阻濾波器濾除噪聲
FP1 = 3500;FS1 = 3600;FP2 = 5600;FS2 = 5500;
rp2 = 1;rs2 = 40;
FP = [FP1 FP2];FS = [FS1 FS2];
wp = 2*pi*FP/fs; ? ? ? ? ? ? ? ? ? ?% 將模擬指標轉(zhuǎn)換為數(shù)字指標
ws = 2*pi*FS/fs; ? ? ? ? ? ? ? ? ? ?% 用切比雪夫IIR濾波器
[n,wn] = cheb1ord(wp,ws,rp2,rs2); ? % 濾波器的最小階數(shù)為n,wn為系統(tǒng)頻帶
[bz,az] = cheby1(n,rp2,wp,'stop');
sound(yfilt,fs); ? ? ? ? ? ? ? ? ? ?% 播放濾波后的語音信號
Yfil = abs(fft(yfilt,N));
Yf = Yfil(1:length(Yfil)/2);
三、運行結(jié)果



