代码之家  ›  专栏  ›  技术社区  ›  James

FFT音频噪声去除技术

  •  0
  • James  · 技术社区  · 12 年前

    我正在尝试使用matlab中的频域从音频记录中去除静态噪声,但无法获得以下内容以生成我期望的音频:

    signalsamples = [...]; % n noisey signal samples
    noisesamples = [...]; % isolated noise samples
    
    signalfft = fft(signalsamples);
    noisefft = fft(noisesamples, n);
    
    reducednoisefft = signalfft ./ (noisefft * removalfactor); % Decrease the amount of noise frequencies in the signal in the frequency domain
    reducednoisesamples = ifft(reducednoisefft); % Create new samples
    

    当我运行这个时,生成的音频(减少了噪声样本)有一个新的、响亮的呜呜声,比音频中的任何其他声音都要大得多,但是你只能听到原始音频在背景中播放。

    1. 这种方法有效吗(或者我遗漏了什么)?
    2. 如果它在理论上可行,我做错了什么?
    1 回复  |  直到 12 年前
        1
  •  3
  •   japreiss Jim Ingham    12 年前

    假设信号的FFT如下所示:

    signal FFT

    如果你的噪音是呜呜声,基本上是固定频率的正弦波, noisefft 将如下所示:

    noise FFT

    所以 signalfft -这是真的 signalPlusNoiseFFT -将如下所示:

    signal plus noise ffT

    除以 噪声fft 是错误的,因为你将基本上被零除 噪声fft 很弱。。。

    您希望乘以如下函数:

    desired multiplier

    由下式给出:

    max_noise = max(noisefft)
    multiplier = (max_noise - noisefft) / max_noise