什么是'范围[0,1)'中的归一化频率,即DTMF& Goertzel算法

时间:2014-05-04 07:19:48

标签: math signal-processing fft dtmf

我有一个正常运作的DTMF计划。它需要一个更大的信号并将其分解成许多小分量,然后用FFT分析每个分段,以确定是否存在对应于特定频率的特定“分档”的响应幅度,从而指示该数字这个频率已经被压缩,直截了当,但我想实现jmathstudio库的Goertzel算法,我不知道如何去搜索我想要的频率。文件说明了这一点:

enter image description here

我构造这样的箱子,术语'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

1 个答案:

答案 0 :(得分:0)

'系数_'是Complex类型的对象,因此要获得实际和想象的部分:

System.out.println(" coeff =" + coeff.getRealPart()+" i" + coeff.getImaginaryPart());

相关问题