首页 文章

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

提问于
浏览
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 .

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

1 回答

  • 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
    

    希望能帮助到你!

相关问题