给定每秒 44 个样本的 LPCM 阵列消除噪声

Posted

技术标签:

【中文标题】给定每秒 44 个样本的 LPCM 阵列消除噪声【英文标题】:Canceling noise given a LPCM array of 44 samples per second 【发布时间】:2012-04-21 16:34:40 【问题描述】:

我有一个每秒 44100 个样本的 LPCM 数据数组。实际上我有两个渠道的数据。

每 11.61 毫秒,我得到大约 512 个样本。

现在我想按照How to cancel noise from audio上的指示进行操作

但是,该解释假设输入是正弦波。

我应该将我的 LPCM 转换为正弦波以消除噪音吗?也就是说,我是否需要在 LPCM 上运行 FFT 才能应用此技术?

如果是这样,我如何将生成的波形转换回 LPCM 以便播放?

【问题讨论】:

【参考方案1】:

如果您需要从频域转换回时域,您可以使用傅里叶逆变换。否则,我认为还有很多降噪算法。

【讨论】:

我认为答案是考虑噪声过滤,而不是噪声消除。【参考方案2】:

你想消除噪音在哪里?要消除检测器(有麦克风的地方)的噪音,您只需反转信号(交换 + 和 - 电缆),匹配幅度,并调整频率以校正您的设备。要在连接源和麦克风的线路上的某个其他点消除噪音,您还需要添加延迟(如果取消更远)或以某种方式“提前”声音(如果在源和麦克风之间取消)。如果取消离轴,那么事情会变得更加复杂(并且您需要两个信号)。

在复杂的情况下(离轴或麦克风之前),您需要进行某种更高级的信号处理。一种方法是使用 ffts,但找到使用数字滤波器的近似值可能更有效

我猜想 bose 耳机之类的产品使用信号反转、放大和一些相当简单的频率整形,可能还加上某种反馈检测(如果出现问题,可以避免震耳欲聋的人)。

更新:here is a really good paper 了解耳机的工作原理。他们有各种方法,包括训练白噪声滤波器。它比我上面猜的要复杂。

【讨论】:

以上是关于给定每秒 44 个样本的 LPCM 阵列消除噪声的主要内容,如果未能解决你的问题,请参考以下文章

音频采样频率依赖于通道?

从线性 PCM 中提取音频通道

matlab 实现中值滤波

3D 阵列(1D 平面)索引

中值滤波

Last Audio QueueBuffer 有夸大的量级