使用Goertzel算法的DTMF检测
如果波格格式为以下:我该如何使用goertzel算法: -2个通道 -32位 -48 kHz 我已经搜索过有关Goertzel算法的搜索,但是我在Internet上看到的只是以2个通道,16位和8 kHz的波形格式检测DTMF.我不知道我应该修改代码的哪一部分以满足我的要求. Private Function Goertzel(ByVal sample As Byte(), ByVal N As Long, _ ByVal freq As Double, ByVal sampr As Long) As Double Dim Skn As Double = 0 Dim Skn1 As Double = 0 Dim Skn2 As Double Dim c As Double Dim c2 As Double Dim i As Integer c = 2 * Math.P
12 2024-04-14
编程技术问答社区
录音WaspiLoopback Goertzel
更新#2: 我一直在代码上更多地混乱,我唯一的问题是它在通过麦克风中存在声音时检测到频率,但该算法根本无法正常工作.我要求它提供500Hz,并且它会输出功率水平,即使在该频率下 no 声音也很强.下面的代码(我已经看到这篇文章没有得到太多关注,因此为什么我会不断更新) private void button3_Click(object sender, EventArgs e) { waveIn = new WasapiLoopbackCapture(); waveIn.DataAvailable += OnDtAvailable; waveIn.StartRecording(); } void OnDtAvailable(object sender, WaveInEventArgs e) { byte[] buffer = e.Buffer; int by
68 2023-09-03
编程技术问答社区
用C语言实现Goertzel算法
我正在DSP处理器上实现BFSK频率跳跃通信系统.一些论坛成员建议使用Goertzel算法来解调特定频率的频率跳跃.我尝试在C中实现Goertzel算法. float goertzel(int numSamples,int TARGET_FREQUENCY,int SAMPLING_RATE, float* data) { int k,i; float floatnumSamples; float omega,sine,cosine,coeff,q0,q1,q2,result,real,imag; floatnumSamples = (float) numSamples; k = (int) (0.5 + ((floatnumSamples * TARGET_FREQUENCY) / SAMPLING_RATE)); omega = (2.0 * M_PI * k) / floatnumSamples; sine
56 2023-09-03
编程技术问答社区
用Goertzel算法处理音频信号的结果
我做了一点信号处理应用程序.它在具有Goerztel算法的某些频率上处理音频信号(摩尔斯码).应用程序将临时文件保存到文件系统,并在录制完成后,开始检测信号.现在我得到了一堆大小的结果. 我真的不知道从这些大小读取什么.如何从这些幅度解码摩尔斯电码码?我该怎么读它们?试图找到引用,但是不可能解释结果以及如何阅读它. 编辑: 我的摩尔斯代码应用程序是用德尔福制作的,并使用Windows Beep函数来发送带有某些频率的信号.我正在使用1200 Hz进行信号.还暂停了信号和单词,莫尔斯蜂鸣声就像被描述的维基百科一样.一切都是准确的. goertzel.java: public class Goertzel { private float samplingRate; private float targetFrequency; private int n; private double coef
130 2022-10-31
编程技术问答社区
从WAV文件中解码DTMF
继我的早期问题之后,我的目标是从 C# 检测 WAV 文件中的 DTMF 音调.但是,我真的很难理解如何做到这一点. 我了解 DTMF 使用频率组合,并且可以使用 Goertzel 算法......不知何故.我抓取了一个 Goertzel 代码片段,并尝试将 .WAV 文件推入其中(使用 NAudio 读取文件,这是一个 8KHz 单声道 16 位 PCM WAV): using (WaveFileReader reader = new WaveFileReader(@"dtmftest_w.wav")) { byte[] buffer = new byte[reader.Length]; int read = reader.Read(buffer, 0, buffer.Length); short[] sampleBuffer = new short[read/2]; Buffer.BlockCopy(buffer, 0,
3072 2022-07-17
编程技术问答社区