у меня есть 2 сигнала, один из которых содержит аудиоданные, которые воспроизводятся на динамиках. второй содержит данные микрофона, записывающие динамики одновременно.
что я сделал до сих пор: выравнивание сигналов во временной области с помощью корреляции. примените БПФ к перекрывающейся части обоих сигналов и разделите один на другой, чтобы добиться деконволюции.
что я делаю неправильно, поскольку полученные аудиоданные бесполезны.
вот мой код:
//put both signals in split complex vectors
vDSP_ctoz((DSPComplex *)file, 2, &fftFileData, 1, nOver2);
vDSP_ctoz((DSPComplex *)mic, 2, &fftMicData, 1, nOver2);
//fft of both file and mic data
vDSP_fft_zrip(fftSetup, &fftFileData, 1, log2n, FFT_FORWARD);
vDSP_fft_zrip(fftSetup, &fftMicData, 1, log2n, FFT_FORWARD);
//divide file data by mic data for deconvolution???
vDSP_zvdiv(&fftFileData, 1, &fftMicData, 1, &fftMicData, 1, nOver2);
//inverse fft of mic-fft-data
vDSP_fft_zrip(fftSetup, &fftMicData, 1, log2n, FFT_INVERSE);
//scale back signal
vDSP_vsmul(fftMicData.realp, 1, &scale, fftMicData.realp, 1, nOver2);
vDSP_vsmul(fftMicData.imagp, 1, &scale, fftMicData.imagp, 1, nOver2);
//copy back to float array
vDSP_ztoc(&fftMicData, 1, (COMPLEX *) result, 2, nOver2);
edit для небольшого пояснения: благодаря @Sammio2 теперь я знаю, что деконволюция очень хорошо описывает мою проблему:
f*g=h
h — мой записанный сигнал, состоящий из
f, мой сигнал, который я хочу восстановить и
г, мой сигнал воспроизведения записан дополнительно, что я знаю, но, скорее всего, он был изменен динамиком-> микрофоном туда и обратно
теперь мне нужно каким-либо образом восстановить f, который является всем звуком, записанным в дополнение к g.
важно: в конце концов мне не нужен четкий сигнал f, просто информация о его громкости или уровне присутствия. в основном уровень шума помимо записанного двустороннего сигнала g.
как мне приступить к сбору информации о желаемом уровне шума?
Я надеюсь, что это поможет понять мою проблему. спасибо пока!