我有一个正常运作的DTMF计划。它需要一个更大的信号并将其分解成许多小分量,然后用FFT分析每个分段,以确定是否存在对应于特定频率的特定“分档”的响应幅度,从而指示该数字这个频率已经被压缩,直截了当,但我想实现jmathstudio库的Goertzel算法,我不知道如何去搜索我想要的频率。文件说明了这一点:
我构造这样的箱子,术语'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
答案 0 :(得分:0)
'系数_'是Complex类型的对象,因此要获得实际和想象的部分:
System.out.println(" coeff =" + coeff.getRealPart()+" i" + coeff.getImaginaryPart());