2014-10-11 60 views
0

我希望獲取一些音頻信號,最有可能是立體聲,並使用卷積函數對其應用一些傳遞函數。我在這裏看到了關於如何在從兩個信號中獲得一個tfest後應用傳遞函數的例子,但是tfest數據與原始音頻尺寸相同。從數據創建傳遞函數並應用於音頻信號

我試圖通過在MATLAB基礎上觀看單獨的Lynda視頻來瀏覽MATLAB並熟悉它的接口和語法。我有使用C#編程的經驗,並且在Visual Studio中感覺很舒服,但MATLAB對我來說是新的。

傳遞函數是以前獲得的,目前在Excel中。數據採用倍頻帶(63 Hz,125 Hz,250 Hz,...,8 kHz),並將外推到輸入信號的頻譜(20 Hz - 20 kHz)。這將採用以下形式:(f1,-x1),(f2,-x2),...,(fn,-xn),採樣音頻中的每個數據點都與傳輸函數匹配。

該功能隨時間而變化。本質上,我正在模擬通過分區後聽起來像什麼。

我的思考過程告訴我這將遵循:輸入音頻,轉換到頻域,應用傳遞函數,轉換回時域,並寫爲WAV。

我該怎麼做呢?我知道我沒有提供任何代碼,對此我很抱歉。關於該主題的任何資源都非常感謝。我不期待交鑰匙解決方案,只是一些指導,所以我可以找到一種正確的方法。

回答

0

我會做這樣的:

function [ out_wav_file ] = TransformSignal(in_waw_file) 

% Read input signal 
[in_sgn, FS, N] = wavread(in_waw_file); 

% If audio file is multiple channel, selec one channel 
in_chn = in_sgn(:, 1); 

% Transform to frequency domain 
% You could use a smaller FFT length but it would cost you quality when 
% converting back 
fft_in_sgn = abs(fft(in_sgn, length(in_sgn))); 

fft_out_sgn = SomeFunction(fft_in_sgn); 

out_sgn = ifft(fft_out_sgn); 

wavwrite(out_sgn, FS, N, out_wav_file); 

end 

希望它能幫助!

相關問題