【问题标题】:noise removal in AudioRecorderAudioRecorder 中的噪声消除
【发布时间】:2014-07-24 11:46:43
【问题描述】:

我使用 AudioRecorder 录制了 50 毫秒(10-12KHz 频率)的啁啾信号。 在一个安静的房间里,在 50/60 厘米的距离处,信号频谱图是这样的

背景中有很多噪音,还有一些回声。 我想知道是否有办法使用 Android 降低背景噪音?

编辑

我试过 Android NoiseSuppressor 但它说我的设备不支持这个功能,虽然我有一部 4.4 的 Android 手机 (Nexus 4)

互相关输出:

【问题讨论】:

  • 对我来说看起来不错——也许是麦克风发出的嘶嘶声;扬声器中的一些非线性,一些混响。为什么要消除噪音?如果你想让它看起来像一个干净的啁啾,也许只是阈值能量(将低能谱图单元设置为零)? “很多”背景噪声可能是频谱图中使用的颜色图比例的函数。
  • 我不认为这是由于颜色图比例,因为当我像这样交叉关联两个信号时,我可以清楚地看到噪声峰值,并且很难选择相关峰值。
  • 在我看来,互相关应该在这个信号上工作得很好。我们可以看到互相关输出吗?您是否以正确的时间顺序获得参考信号?采样率是否匹配?
  • 我添加了互相关。最高峰对应于真正的延迟,但我想知道的是如何“过滤”周围的其他峰值,(在录制时)。
  • “过滤”最终归结为实施一个规则来区分“你想要什么”和“你不想要什么” - 但首先你必须编写该规则。那么想要的数据和不需要的数据有什么不同呢?如果它们是相同频率范围内的声学回声,那么它们的区别可能是所需的峰值最强 - 在这种情况下,您无法在相关之前真正在频域中进行过滤,而是运行相关性并选择峰值结果,忽略其他结果。

标签: android audio signal-processing


【解决方案1】:

要去除噪音,您可以尝试构建降噪算法,主要步骤是:

  1. 选择您的帧大小(2048 不错)
  2. 选择重叠/跳跃大小(256、512、1024)
  3. 选择降噪阈值(1、50、100 等)
  4. 构建升余弦窗(Hann 窗)
  5. 在框架中应用窗口
  6. 将零频率移至频谱中心(循环移位)
  7. 应用 FFT
  8. 获取幅度
  9. 应用去噪denoised=(FFT * (magnitude / (magnitude+sqrt(denoise_threshold)))
  10. 将信号返回到时域Tdomain=real(ifft(denoised))
  11. 将零频率移至频谱中心
  12. 应用窗口
  13. 应用重叠和添加

【讨论】:

  • 谢谢。我应该根据什么来选择降噪阈值?
  • 你需要测试不同的阈值,看看什么更适合你:-),我在这里测试随机噪声和白噪声,阈值 = 50 效果很好...
  • ok :) 对不起,我问的太多了,但这也包括回声吗?
猜你喜欢
  • 2017-04-14
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 2023-04-05
相关资源
最近更新 更多