Я новичок в БПФ, и меня попросили найти способ анализа/обработки определенного набора данных, собранных буровыми установками. В собранных данных много шума из-за движений буровой установки (например, вверх и вниз из-за приливов и волн). Меня попросили очистить собранные данные с помощью FFT=>filtering=>IFFT.
Я использую C++ и библиотеку FFTW 3.3.3.
Пример лучше, чем что-либо еще, так что:
У меня есть БД с, например, селевым потоком (литры в минуту). Селевой поток собирается каждые 5 секунд, для каждого измерения в БД есть временная метка (например, 1387411235).
Таким образом, мои IN_data для моего БПФ представляют собой пару меток времени/селей (например, 1387456630/3955,94, 1387456635/3954,92 и т. д.).
Отображение этих данных действительно выглядит как зашумленный звуковой сигнал, и соответствующие события могут быть замаскированы шумом.
Используя примеры, найденные в Интернете, я могу выполнить БПФ, но недостаток знаний и понимания является большой проблемой, поскольку я никогда не занимался обработкой сигналов и преобразованиями Фурье.
Я действительно не знаю, как приступить к этой работе, какую версию процедуры FFTW использовать (c2c, r2c и т. д.), есть ли какая-либо предварительная обработка данных и / или постобработка. . Есть много примеров и руководств, которые я читал в Интернете, но я француз (извините за мои ошибки здесь), и это не всегда имеет для меня смысл, особенно с единицами OUT_data, типом OUT_data, входными и выходными данными. размер массива, работа с окнами (кстати, что это такое), короче говоря, я потерялся...
Я полагаю, что моя проблема была бы довольно простой для тех, кто привык к FFTW, но для меня сейчас это очень сложно.
Итак, мои вопросы:
- Какую процедуру FFTW использовать в обоих направлениях (FFT и IFFT) (какой вид, тип и размер массива для IN_data и OUT_data).
- Как интерпретировать полученный массив (какие единицы вернет FFTW).
На данный момент краткий пример того, что я сделал:
fftw_plan p;
p = (fftw_plan)fftw_plan_dft_1d(size,in,out,FFTW_FORWARD,FFTW_ESTIMATE);
fftw_execute(p);
fftw_destroy_plan(p);
с «in» и «out» как fftw_complex (сложный элемент моего массива In_data установлен в 1 для каждых данных, действительно не знаю, почему, но в учебнике сказано, чтобы сделать это).
Этот код основан на примере, найденном в Интернете, но мое отсутствие знаний/понимания сильно тормозит, и мне было интересно, есть ли здесь кто-нибудь, кто мог бы дать мне объяснения/рабочий процесс/понимание/ссылки о том, как это сделать.
У меня сейчас пробный период для моей новой работы, и я действительно хочу внедрить эту функцию для своего босса, даже если это означает, что нужно обратиться за помощью, я видел здесь много квалифицированных сообщений FFTW...