【語音增強】基於matlab iir帶阻濾波器語音增強【含Matlab原始碼 613期】
阿新 • • 發佈:2021-06-25
一、簡介
語音增強是指當語音訊號被各種各樣的噪聲干擾、甚至淹沒後,從噪聲背景中提取有用的語音訊號,抑制、降低噪聲干擾的技術。一句話,從含噪語音中提取儘可能純淨的原始語音。
實際語音遇到的干擾可以分以下幾類:①週期性噪聲,例如電氣干擾,發動機旋轉部分引起的干擾等,這類干擾表現為一些離散的窄頻峰;②衝激噪聲,例如-些電火花、放電產生的噪聲干擾;③寬頻噪聲,這是指高斯噪聲或白噪聲一類的噪聲,它們的特點是頻頻寬,幾乎覆蓋整個語音訊帶;④語音干擾,例如話筒中拾入其它人的說話,或者傳輸時遇到串音引起的語音。對付上述各種不同型別的噪聲,增強技術亦是不一樣的。
語音增強的一個主要目標是從帶噪語音訊號中提取儘可能純淨的原始語音。然而,由於干擾通常都是隨機的,從帶噪語音中提取完全純淨的語音幾乎不可能。在這種情況下,語音增強的目的主要有兩個:一是改進語音質量,消除背景噪音,使聽者樂於接受,不感覺疲勞,這是一種主觀度量;二是,這是一種客觀度量。這兩個目的往往不能兼得。目前有一些對低信噪比帶噪語音進行語音增強的方法,可以顯著地降低背景噪聲,改進語音質量,但並不能提高語音的可懂度,甚至略有下降。
語音增強不但與語音訊號數字處理理論有關,而且涉及到人的聽覺感知和語音學範疇。再者,噪聲的來源眾多,因應用場合而異,它們的特性也各不相同。所以必須針對不同噪聲,採用不同的語音增強對策。某些語音增強演算法在實際應用中己經證明是有效的,它們大體上可分為四類:噪聲對消法、諧波增強法、基於引數估計的語音再合成法和基於語音短時譜估計的增強演算法。
二、原始碼
%% P2_2_1 語音訊號取樣,畫出時域和頻域的圖 [y,fs] = audioread('myname.wav');% y為取樣資料;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); % 幅度響應 Yf = Yf(1:length(Yf)/2);% 由於幅度響應是偶函式,所以擷取一半 % 畫圖 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)); % 生成高斯噪聲 %設計BPF得到4KHZ到5KHZ的噪音 fp1 = 4000;fp2 = 5000; % BPF指標 WP1 = 2*pi*fp1/fs;WP2 = 2*pi*fp2/fs;% 將模擬指標轉換為數字指標 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); % 由於幅度響應是偶函式,所以擷取一半 % 畫圖 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 設計濾波器,並濾波 %設計帶阻濾波器濾除噪聲 FP1 = 3500;FS1 = 3600;FP2 = 5600;FS2 = 5500; rp2 = 1;rs2 = 40; FP = [FP1 FP2];FS = [FS1 FS2]; wp = 2*pi*FP/fs; % 將模擬指標轉換為數字指標 ws = 2*pi*FS/fs; % 用切比雪夫IIR濾波器 [n,wn] = cheb1ord(wp,ws,rp2,rs2); % 濾波器的最小階數為n,wn為系統頻帶 [bz,az] = cheby1(n,rp2,wp,'stop'); sound(yfilt,fs); % 播放濾波後的語音訊號 Yfil = abs(fft(yfilt,N)); Yf = Yfil(1:length(Yfil)/2);
三、執行結果
四、備註
版本:2014a
完整程式碼或代寫加1564658423