从数据创建传递函数并应用于音频信号

时间:2014-10-11 19:38:10

标签: matlab function audio transfer convolution

我想拍摄一些音频信号,最有可能是立体声,并使用卷积功能对其应用一些传递函数。我在这里看到了如何在从两个信号中获取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。

我该怎么做呢?我知道我没有提供任何代码,为此我很抱歉。关于该主题的任何资源都非常感谢。我不期待一个交钥匙解决方案,只是一些指导,所以我可以找到正确的方法。

1 个答案:

答案 0 :(得分: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

希望它有所帮助!