我有一个正常运行的 DTMF 程序。它需要一个较大的信号并将其分解为许多小分量,然后使用 FFT 分析每个片段以确定是否存在对应于特定频率的特定“bin”的响应幅度,从而表明数量以该频率为代表的频率已被按下,直截了当,但我想实现库 jmathstudio 的 Goertzel 算法,但我不太清楚如何搜索我想要的频率。文档是这样说的:

我像这样构建 bin,术语“200”是由我的 FFT 当前大小为 400 的事实决定的,而 2000 是由采样率为 4000 的事实决定的。
int sixNineSeven = (int)(697.0*200/2000);
int sevenSevenZero = (int)(770.0*200/2000);
int eightFiveTwo = (int)(852.0*200/2000);
int nineFourOne = (int)(941.0*200/2000);
int twelveZeroNine = (int)(1209.0*200/2000);
int thirteenThirtySix = (int)(1336.0*200/2000);
int fourteenSeventySeven = (int)(1477.0*200/2000);
我想我需要做的主要事情是这一步:
[0,1) 范围内的归一化频率
但这是否意味着我可以完全忽略采样频率?
我想我会做这个 Geortzel 操作来代替 FFT,所以我应该只在每个小段中搜索这个归一化频率吗?
但是当我这样做时:
Complex coeff = su.goertzelFrequencyAnalysis(new Vector(c), (float)(1/697));
System.out.println("coeff "+coeff);
我的输出只是一堆像这样的垃圾:
coeff org.JMathStudio.DataStructure.Complex@5e228a02
coeff org.JMathStudio.DataStructure.Complex@7bd63e39
coeff org.JMathStudio.DataStructure.Complex@2e8f4fb3
coeff org.JMathStudio.DataStructure.Complex@42b988a6