- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在学习实现 Goertzel 的算法来从录制的波形文件中检测 DTMF 音调。我从 here 中用 python 实现了一个.它支持以 8 kHz 和 16 kHz 采样的音频。我想扩展它以支持以 24 kHz、32 kHz 和 48 kHz 采样的音频文件。
从我从上面的链接得到的代码,我看到作者设置了以下前置条件参数/常量:
self.MAX_BINS = 8
if pfreq == 16000:
self.GOERTZEL_N = 210
self.SAMPLING_RATE = 16000
else:
self.GOERTZEL_N = 92
self.SAMPLING_RATE = 8000
根据 this文章中,在进行实际的 Goertzel 之前,有两个初步计算是:
因此,作者明确将 block 大小设置为 16k 采样输入的 block 大小为 210,8k 采样输入的 block 大小为 92。现在,我想了解:
最佳答案
block 大小决定了频率分辨率/选择性以及收集样本 block 所需的时间。
你的检测器的带宽大约是Fs/N,当然收集一个 block 所需的时间是N/Fs。
对于同等性能,您应该使 Fs 和 N 之间的比率大致相同,以便这两个测量值保持不变。
不过,将 block 大小调整为尽可能接近要检测的波长的倍数也很重要。 Goertzel 算法基本上是一种计算几个选定 DFT bin 的快速方法,这种调整将您想要查看的频率放在这些 bin 的中心附近。
根据最后一点优化 block 大小可能是 Fs/N 在代码中针对 8KHz 和 16Khz 采样率不完全相同的原因。
您可以为您想要支持的其他采样率重做此优化,但如果您只使用 N = 210 * Fs/16000,性能实际上将等同于您已有的性能
您可以在此处找到 block 大小选择的详细说明:http://www.telfor.rs/telfor2006/Radovi/10_S_18.pdf
关于algorithm - 在 python 中将 Goertzel 算法扩展到 24 kHz、32 kHz 和 48 kHz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53985857/
所以我打开了一个我在 audacity 中生成的 DTMF 音调的 .raw 文件。我抓取了一个类似于维基百科文章中的 jar 装 goertzel 算法。虽然它似乎没有解码正确的数字。 解码后的数字
所以我打开了一个我在 audacity 中生成的 DTMF 音调的 .raw 文件。我抓取了一个类似于维基百科文章中的 jar 装 goertzel 算法。虽然它似乎没有解码正确的数字。 解码后的数字
我使用了这段代码: public double goertzel(List sngData, long N, float frequency, int samplerate) { double
我制作了一个小的信号处理应用程序。它使用 Goerztel 算法处理一定频率的音频信号(摩尔斯电码)。应用程序将临时文件保存到文件系统,录制完成后,开始检测信号。现在我得到了很多数量级的结果。 我真的
我只是一名没有数字信号处理经验的大四学生,我想制作一个 Android 应用程序来记录音频并检测大学作业的特定目标频率。我是在 Goertzel 算法的帮助下这样做的。所以这是与我用作引用的问题完全相
我目前正在创建一个应用程序,它可以通过 iPhone 的麦克风实时计算预定义频率 (16780Hz) 的幅度。 我的缓冲区中有声音数据,我尝试使用专为该任务设计的算法 Goertzel 来处理它。 G
我真的很难弄明白这一点。本质上,我试图找出通过麦克风播放的频率。据我了解,我需要暴力破解 Goertzel 算法。所以基本上我只是使用 Goertzel 算法尝试每个频率,直到找到正确的频率。但是,我
有人知道我在哪里可以获得代码或库来执行具有复杂输出的 Goertzel 算法吗?(或任何其他 1-bin-DFT 算法?) 最佳答案 以下是我几年前为此编写的代码。随意使用它,并附上适当的归属。 go
我正在学习实现 Goertzel 的算法来从录制的波形文件中检测 DTMF 音调。我从 here 中用 python 实现了一个.它支持以 8 kHz 和 16 kHz 采样的音频。我想扩展它以支持以
我是一名优秀的程序员,十分优秀!