c++ - 这里有人可以提供 PCM 音频数据的高通滤波器样本吗?

标签 c++ c filter signal-processing pcm

美好的一天。 我的DSP很差。我很难理解算法。 我有一个 c# 应用程序,一个记录声波的录音机功能 但是这个声音是所有声音的混合体。具体来说,当我收到 数据我将过滤此数据以仅保存过滤后的高频音频数据, 例如截止频率为 15khz。 对于这个过滤器,给定的是 具有大小的数据样本, 和截止频率

C/C++ 没问题

当我收到数据样本时,应用高通滤波器然后将结果保存到 wav。

-丁字裤

最佳答案

在设计合适的滤波器之前,您需要了解采样率并对滤波器规范有一个合理的了解。仅指定 15 kHz 的截止频率是不够的,例如你可能想要这样的东西:

Sample rate: 44.1 kHz
Stop-band: < 12 kHz
Stop-band rejection: > 80 dB
Pass-band: > 15 kHz
Passband ripple: +/- 1 dB

然后您可以将这些参数输入滤波器设计包,这将为您提供所有滤波器系数等。

请注意,滤波器的复杂性(即滤波器阶数 = 级数或“抽头”)将高度依赖于滤波器规范,因此理想情况下,您希望使用一个滤波器设计包,它可以让您玩弄规范轻松地让您可以权衡您的设计要求与所需的计算带宽。

您还需要确定相位和/或群延迟对您是否重要 - 使用线性相位 FIR 来获得恒定的群延迟(成本更高),或者如果相位/延迟不重要则使用递归 IIR(成本更低)实现)。

请注意,有免费的在线滤波器设计包可用,例如http://www-users.cs.york.ac.uk/~fisher/mkfilter/看起来很不错(它甚至可以为您生成 C 代码滤波器实现),尽管在选择滤波器类型等方面可能至少需要初学者级的信号处理知识。


为了帮助理解基本的滤波器设计参数,这里有一张来自 http://dspguru.com 的有用图表。 .请注意,这是针对低通滤波器的,但相同的参数适用于高通情况。

enter image description here

关于c++ - 这里有人可以提供 PCM 音频数据的高通滤波器样本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7062671/

相关文章:

c++ - 使用 cin 获取多个带空格的输入

java - 谁在 ubuntu 服务器上神秘地向我的进程发送了 SIGKILL

c - *** 检测到堆栈粉碎 *** : <unknown> terminated Aborted (core dumped)

filter - 如何获得angular2中过滤(管道)集的大小

c++ - 尝试使用静态类变量为对象创建新 ID

c++ - 堆栈问题

c++ - 如何使用 KCachegrind 和 Callgrind 来测量我的部分代码?

c++ - OpenCV:访问并求像素的平方根

swift - 使用 NSFetchedResultsController 如何以编程方式设置要显示的 5 个部分以及过滤它们以获取适当的行

c# - Rails ActionController 类中的 around_filter 等价于 C# 的东西是什么?