Я пытался реализовать алгоритм автокорреляции на iPhone с помощью библиотек vDSP, поставляемых Apple (Accelerate framework).Понимание автокорреляции с использованием FFT и ускорения рамки - iPhone
До сих пор я создал аудиоустройство после примера яблочного яблока, но я хочу использовать рамку ускорения для выполнения автокорреляции вместо старой реализации в примере кода auriotouch.
Аудиоблок IORemote направляется корыто мой метод renderCallBack следующим образом:
{
AudioGraphController *controller = (AudioGraphController *) inRefCon;
// Remove DC component
for(UInt32 i = 0; i < ioData->mNumberBuffers; ++i)
controller.dcFilter[i].InplaceFilter((SInt32*)(ioData->mBuffers[i].mData), inNumberFrames, 1);
OSStatus result = AudioUnitRender(controller.inputUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
if (result) { printf("InputRenderCallback: error %d\n", (int)result); return result; }
controller.manager->ProcessAudioData(inNumberFrames, ioData);
return noErr;
}
Входные данные от микрофона посылается к способу ProcessAudioData, который выполняет автокорреляцию, в соответствии с принципами C++ фрагмент кода в этом посте: Using the Apple FFT and Accelerate Framework
Однако у меня есть некоторые проблемы с пониманием информации в массиве displaydata.
Когда я пытаюсь получить доступ к информации, все это я получаю нан, единственный раз, когда я получаю представление информации, когда я кастовал displaydata массив следующим образом:
SInt16 * ЬиЕ = (SInt16 *) displayData ;
Этапы расчета автокорреляции i выполняют следующие шаги: - Разделить реальный вход (ioData-> mBuffers [0] .mData) на четные и нечетные входы. - Выполнение БПФ (вперед) - Возьмите абсолютный квадрат значений, генерируемых БПФ. - Возьмите IFFT (обратный/обратный) - Преобразуйте комплексный раздел в реальный.
Может ли кто-нибудь дать мне несколько указателей/советов, как интерпретировать информацию в массиве displaydata, также, когда я просматриваю данные отображения, подобные этим, кажется, все одинаковые значения, хотя они различаются в зависимости от входа микрофона ,
Ввод микрофона, как ожидается, будет сигналом с некоторыми эхосигналами исходного сигнала, целью автокорреляции является определение задержки, когда автокорреляция достигает пика, так что я могу определить смещение эха на оригинальный сигнал.
Должен ли я сначала создать эхо-версию сигнала (с некоторым смещением) и использовать это в нескольких значениях БПФ?
Я ценю любой вход, также если вы можете вести меня к информации, которая объясняет это более четко, так как я довольно новичок в технике vDSP, особенно на iPhone. У меня есть математический опыт с сверткой и преобразованием Фурье, но на самом деле упаковка Apple заставляет меня гадать, где я могу найти информацию, которую я ожидаю получить от этого расчета.
Спасибо за ваш вклад.Прежде чем я прочитал ваше предложение об отладке, я понял, что NAN, вероятно, вызван входными значениями до того, как я сделал преобразование вперед. Отладка типов данных C показала, что входной сигнал от микрофона был «SInt16», и я проверял поплавки. Преобразование этого входа в значения с плавающей точкой разрешило проблему. Благодаря! – Dacatri