问题标签 [goertzel-algorithm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
773 浏览

java - Android - 使用 goertzel 解调 FSK

我正在使用此代码 https://stackoverflow.com/questions/23432398/audio-recorder-in-android-process-the-audio-bytes来捕获麦克风音频,但我正在将数据写入 ByteArrayOutputStream。完成记录后,我想对使用 Goertzel 算法捕获的信号进行解模块。FSK 信号由 2 个频率组成,“1”为 800Hz,“0”为 400Hz,每个位使用 100 个样本进行模块化。我正在使用此类 Goertzel:http ://courses.cs.washington.edu/courses/cse477/projectwebs04sp/cse477m/code/public/Goertzel.java我正在尝试使用 150 的 bin 大小。

这是我尝试做的事情:完成录制后的代码:

和函数testSpecificFrequency:

我只是想看看会是什么结果,通过向构造函数发送 800Hz,然后发送 400Hz,真的不知道如何从这一点开始 =\

有任何想法吗?

0 投票
1 回答
163 浏览

windows-phone-8 - 沿时间检测缓冲区中的频率

如果我将一系列频率蜂鸣声记录到缓冲区中,例如:

15kHz 持续 50ms,17k 持续 50ms 并继续,有没有办法沿着时间“走”并解码这个频率(用 goertzel 或其他东西)?

嘿,这是一个更新,我添加了一个代码,显示如何在我检查的声音缓冲区中找到第一个分隔符。如果我记录 5 秒的缓冲区(我记录到流缓冲区而不是文件中)第一个片段需要大约 30 秒来分析起始分隔符开始的索引。我认为这是非常新手......必须找到更好的解决方案。谢谢(每个定界符的持续时间为 0.2 秒),就像这样 - 开始定界符 = 12KHz,1 的 = 13k,0 的 = 14k,结束定界符 = 15k

我的 Goertzel 是这样的:

0 投票
0 回答
167 浏览

c# - Goertzel 滤波器返回与缓冲区平均能量相关的幅度

我将一片缓冲区传递给我的 Goertzel 过滤器。缓冲区包含 18Khz 的频率和静音。每个的持续时间为 75 毫秒。采样率 = 44.1。它像 FSK 一样工作。

我正在尝试检测 18KHz 的 Goertzel 滤波器的阈值。我想通过下一个公式来测量缓冲区的平均能量:

现在,我的问题是能量与 Goertel 滤波器的返回值有什么关系。我注意到,随着我测量的频率越低,Goertel 的幅度就越小。例如:如果我的 Goertel 被调整为检测 13K,我会得到大约 50 到 100;因为,18k 我得到的数字更小:0.00001 到 0.005。我传递的数组是 float[] 并且所有数字都在 +-1 的范围内。有什么好的解决方案吗?谢谢

0 投票
1 回答
981 浏览

c# - 在 C# 中检测近乎实时的音频音调

我尝试近乎实时地检测一些音频信号(纯正弦)。我知道我会得到一些延迟。一开始,我尝试在 75 毫秒的时间内检测到一些 10Khz 的音调。这是通过 Goertzel 滤波器实现的。该问题的首选技术是什么?我想制作一个始终被 Goertzel 检测到的小缓冲区,但这听起来很糟糕,因为我不知道信号何时开始。你能给我一些帮助或想法吗?谢谢

0 投票
1 回答
600 浏览

fft - gnuRadio 双音检测

我试图想出一种有效的方法来表征两个相隔约 900kHz 的窄带音调(一个在 100kHZ 左右,一个在 1MHz 左右,一旦转换为基带)。随着时间的推移,它们的频率变化不大,但可能有我们想要监控的幅度变化。

每个音调的宽度大约为 100Hz,我们需要在很长一段时间内对这两种野兽进行表征,分辨率低至约 0.1Hz。样本以超过 2M 样本/秒 (TBD) 的速度进入,以充分获取最高音调。

我试图避免(如果可能)每秒一次对数据进行 >2MSample FFT 的蛮力分析以提取频域数据。有没有有效的方法?类似于在感兴趣的频带周围执行两个(很多)更小的 FFT 吗?我看过 Goertzel 和 chirp z 方法,但我不确定它是否有助于节省处理。

0 投票
1 回答
5505 浏览

c# - Decoding DTMF from a WAV file

Following on from my earlier question, my goal is to detect DTMF tones in a WAV file from C#. However, I'm really struggling to understand how this can be done.

I understand the DTMF uses a combination of frequencies, and a Goertzel algorithm can be used ... somehow. I've grabbed a Goertzel code snippet and I've tried shoving a .WAV file into it (using NAudio to read the file, which is a 8KHz mono 16-bit PCM WAV):

I know what I'm doing is wrong: I assume that I should iterate through the buffer, and only calculate the Goertzel value for a small chunk at a time - is this correct?

Secondly, I don't really understand what the output of the Goertzel method is telling me: I get a double (example: 210.985812) returned, but I don't know to equate that to the presence and value of a DTMF tone in the audio file.

I've searched everywhere for an answer, including the libraries referenced in this answer; unfortunately, the code here doesn't appear to work (as noted in the comments on the site). There is a commercial library offered by TAPIEx; I've tried their evaluation library and it does exactly what I need - but they're not responding to emails, which makes me wary about actually purchasing their product.

I'm very conscious that I'm looking for an answer when perhaps I don't know the exact question, but ultimately all I need is a way to find DTMF tones in a .WAV file. Am I on the right lines, and if not, can anyone point me in the right direction?

EDIT: Using @Abbondanza 's code as a basis, and on the (probably fundamentally wrong) assumption that I need to drip-feed small sections of the audio file in, I now have this (very rough, proof-of-concept only) code:

This is the sample file as viewed in Audacity; I've added in the DTMF keypresses that were pressed-

enter image description here

and ... it almost works. From the file above, I shouldn't see any DTMF until almost exactly 3 seconds in, however, my code reports:

... until it gets to 3 seconds, and THEN it starts to settle down to the correct answer: that 1 was pressed:

If I bump up the AdjustmentFactor beyond 1.2, I get very little detection at all.

I sense that I'm almost there, but can anyone see what it is I'm missing?

EDIT2: The test file above is available here. The adjustedMeanPower in the example above is 47.6660450354638, and the powers are:

enter image description here

0 投票
1 回答
678 浏览

c# - NAudio WaspiLoopback Goertzel

更新#2:

我一直在弄乱代码,我唯一的问题是当声音通过麦克风出现时它正在检测频率,但算法根本不起作用。我要求它为 500Hz,它会输出一个功率电平,即使在那个频率下没有声音下面的代码(我看到这篇文章没有引起太多关注,所以我一直在更新)


更新#1:

我一直在搞乱代码,终于设法得到一些可以正常工作但没有任何错误的东西,但它非常不准确,谁能告诉我一个更好的方法(“工作”版本的代码如下)?


我正在尝试创建一个解决方案,该解决方案可以通过麦克风获得在计算机上播放的频率功率(这类似于 DTMF,因为我的项目也计划有多个频率)。

您将在下面找到我正在尝试的代码,它给出了错误消息:

数组的偏移量和长度超出范围或计数大于从索引到源集合末尾的元素数。

我似乎无法弄清楚为什么它会出现越界错误——可能是因为我对 DSP 和 NAudio 很陌生(我已经尝试了几个小时——我也尝试过谷歌搜索和搜索其他 stackoverflow 帖子,我我找到了一个有点帮助的人,这就是我现在所处的位置)。

要从 Audacity 的 WASPI 播放选项下载我正在播放到默认麦克风的 525Hz 50 秒音调文件,请单击此处

任何帮助使其工作的帮助将不胜感激。

0 投票
3 回答
91 浏览

neural-network - 修改声音输入以确定频率

我正在做一个项目,但遇到了一个超出我理解的障碍。我的目标是创建一个人工神经网络,它从声音文件中获取信息,然后通过系统移植,从而对和弦进行标记。我希望这有助于音乐转录——不是实际进行转录本身,而是帮助协调方面。我跑题了。

我已经尽可能多地阅读了 Goertzel 和 FFT 函数,但我不确定这些函数是否是我正在寻找的。我不是在声音样本中寻找任何特定的频率,而是希望找到样本的较高、中间和低频范围的频率。

我知道如果找到特定频率,Goertzel 算法会返回一个高数字,但是为给定样本中的所有可能音调运行该算法似乎是计算上的浪费。关于使用什么的任何想法?

或者,如果这是不可能的,我也很想知道这一点,然后再花太多时间在这个项目上。

感谢您的时间!

0 投票
1 回答
848 浏览

c# - 使用 C# 和 NAudio 检测钢琴音符

我正在尝试编写一个程序来识别我在钢琴上弹奏的音符,我发现 Goertzel 滤波器是一种易于实现的算法,但我不知道如何使用它。

这是代码:

代码无法正常工作,但我应该如何在控制台中写入:每次我向麦克风播放 C4 音符时,我应该怎么做?

0 投票
0 回答
1799 浏览

java - 使用 Goertzel 算法检测频率

我正在尝试为 android 编写一个程序来使用 Goertzel 算法检测频率。但是,当我将算法应用于从 AudioRecord read() 方法获得的数据时,幅度不会在目标频率上达到峰值(即:它通常在低频上达到峰值)。我有什么误解吗?

Goertzel.java

}