У меня есть работающая программа DTMF. Он берет больший сигнал и разбивает его на множество мелких компонентов, затем анализирует каждый сегмент с помощью БПФ, чтобы определить, присутствует ли величина отклика для конкретного «бина», соответствующего определенной частоте, тем самым указывая, что число который представлен этой частотой, был нажат, достаточно прямолинейно, но я хочу реализовать алгоритм Герцеля библиотеки jmathstudio, и я не могу понять, как искать нужную мне частоту. в документации сказано следующее:
Я строю бины так, термин «200» продиктован тем фактом, что мое БПФ в настоящее время имеет размер 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 вместо БПФ, поэтому должен ли я просто искать эту нормализованную частоту в каждом из небольших сегментов?
Но когда я делаю это:
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
float(1)/697
. - person Lutz Lehmann   schedule 04.05.2014