如何在 C 中对 .wav 文件进行下采样并应用带通滤波器?
How do I downsample a .wav file in C and apply bandpass filter?
我需要获取一个 44.1k 的 .wav 文件并将其下采样到 11.25k(将样本除以 4)。
我还需要对 .wav 文件应用 300 Hz -> 3,200 Hz 的带通滤波器。
我是音频编程的新手,我一直在尝试研究如何具体地完成这项任务,但每次搜索都指向一个库或工具,它们可以简单地为我进行转换。这是我获得的新职位的培训练习(让我自己熟悉 C 编程和音频编程)所以我必须手动完成它。
谢谢
将处理 .wav 文件细节的代码与处理音频样本的细节分开。网上有很多关于读写 .WAV 文件的方法,尤其是 PCM 示例。
一旦您将样本存储在内存中,下采样就变得微不足道了。你真的拿走了每个 _n_th 个样本,然后扔掉剩下的。还有其他方法可能会更好地保持保真度。例如,您可以先使用低通滤波器,然后对滤波后的波形重新采样。可以通过最近样本的加权平均来实现低通滤波器。
带通滤波可以通过几种方式完成。最直接的是将样本从时域变换到频域,在频率space中对信号进行操作,然后再变换回来。用于此的变换称为傅立叶变换。在软件中执行此操作的最常见方法是使用称为快速傅里叶变换 (FFT) 的算法。是"fast"因为省去了很多多余的计算
阅读有关如何实现数字滤波器的信息可能是第一步。我建议查找 FIR 和 IIR 滤波器。
或者如果你很懒,可能有几个第三方库可以使用。
我需要获取一个 44.1k 的 .wav 文件并将其下采样到 11.25k(将样本除以 4)。
我还需要对 .wav 文件应用 300 Hz -> 3,200 Hz 的带通滤波器。
我是音频编程的新手,我一直在尝试研究如何具体地完成这项任务,但每次搜索都指向一个库或工具,它们可以简单地为我进行转换。这是我获得的新职位的培训练习(让我自己熟悉 C 编程和音频编程)所以我必须手动完成它。
谢谢
将处理 .wav 文件细节的代码与处理音频样本的细节分开。网上有很多关于读写 .WAV 文件的方法,尤其是 PCM 示例。
一旦您将样本存储在内存中,下采样就变得微不足道了。你真的拿走了每个 _n_th 个样本,然后扔掉剩下的。还有其他方法可能会更好地保持保真度。例如,您可以先使用低通滤波器,然后对滤波后的波形重新采样。可以通过最近样本的加权平均来实现低通滤波器。
带通滤波可以通过几种方式完成。最直接的是将样本从时域变换到频域,在频率space中对信号进行操作,然后再变换回来。用于此的变换称为傅立叶变换。在软件中执行此操作的最常见方法是使用称为快速傅里叶变换 (FFT) 的算法。是"fast"因为省去了很多多余的计算
阅读有关如何实现数字滤波器的信息可能是第一步。我建议查找 FIR 和 IIR 滤波器。
或者如果你很懒,可能有几个第三方库可以使用。