【问题标题】:What is 'Normalized frequency in the range [0,1)', à la DTMF & Goertzel algorithm什么是“[0,1) 范围内的归一化频率”,à la DTMF & Goertzel 算法
【发布时间】:2014-05-04 07:19:47
【问题描述】:

我有一个正常运行的 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

【问题讨论】:

  • w=1 对应的是采样频率还是它的二分之一?您可能需要检查整数除法(结果为 0)并改用 float(1)/697

标签: math signal-processing fft dtmf


【解决方案1】:

'coeff' 是 Complex 类型的对象,因此要获得实部和虚部,请执行以下操作:

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

【讨论】:

  • 嗨,Bhavya!那么,为了清楚起见,我将如何使用 goertzel 函数来检查 697 频率的输入信号?
猜你喜欢
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多