【語音增強】使用RIR_Generator從近場音頻產生遠場音頻|混響

這裏介紹一種使用近場的乾淨的音頻生成(模擬)遠場音頻的方法。GitHub項目地址:RIR_Generator

只介紹方法,要了解原理的請參考項目裏的rir_generator.pdf文檔。

1.首先把這個項目git clone到本地。

2.將cpp文件編譯成matlab可執行的文件

(參考這裏

方法是,在終端打開matlab,在matlab命令行輸入以下代碼並回車

mex rir_generator.cpp

得到rir_generator.mexa64文件,在matlab中可以直接調用這個文件。

3.從近場音頻產生遠場音頻

example_1.m爲例產生遠場音頻。

example_1.m的代碼爲

c = 340;                    % Sound velocity (m/s)
fs = 16000;                 % Sample frequency (samples/s)
r = [2 1.5 2];              % Receiver position [x y z] (m)
s = [2 3.5 2];              % Source position [x y z] (m)
L = [5 4 6];                % Room dimensions [x y z] (m)
beta = 0.4;                 % Reverberation time (s)
n = 4096;                   % Number of samples

h = rir_generator(c, fs, r, s, L, beta, n);

參數的解讀請參考rir_generator.pdf文檔的p11

修改一下代碼,將乾淨的近場音頻close_clean.wav生成遠場音頻。

c = 340;                    % Sound velocity (m/s)
fs = 16000;                 % Sample frequency (samples/s)
r = [2 1.5 2];              % Receiver position [x y z] (m)
s = [2 3.5 2];              % Source position [x y z] (m)
L = [5 4 6];                % Room dimensions [x y z] (m)
beta = 0.4;                 % Reverberation time (s)
n = 4096;                   % Number of samples

h = rir_generator(c, fs, r, s, L, beta, n);			% 計算轉換矩陣
close_clean_wav = audioread('close_clean.wav');		% 讀取近場乾淨音頻
far_field_wav = fftfilt(h, close_clean_wav); 		% 產生遠場音頻
audiowrite('far_field.wav', far_field_wav, 16000);	% 保存爲.wav文件

4.效果

近場音頻:close_clean.wav
在這裏插入圖片描述

產生的遠場音頻:far_field.wav
在這裏插入圖片描述
這種方法可以用於語音增強。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章