В настоящее время я потерял попытку выяснить, как реализовать эквивалентную версию функции MATLAB hilbert()
в C++. Я очень новичок в обработке сигналов, но, в конечном счете, я хотел бы выяснить способ фазового сдвига любого заданного сигнала на 90 градусов. Я пытался следовать методу, предложенному в this question on MATLAB central, который, по-видимому, работает на основе тестов с использованием GNU Octave.Вычислительный аналитический сигнал с использованием FFT в C++
У меня есть то, что я считаю рабочим выполнением как БПФ, так и обратного БПФ, и я попытался реализовать метод, описанный в ответе this post, чтобы вычислить аналитический сигнал. Я попытался сделать это, применив БПФ, установив верхнюю половину массива в ноль, а затем применив обратный БПФ, но, основываясь на графиках, которые я сделал на выходе из теста, должна быть проблема с тем, как я осуществил поиск аналитического сигнала.
Что было бы подходящим способом реализации функции hilbert()
от MATLAB в C++ с учетом рабочей реализации БПФ и обратного БПФ? Есть ли лучший способ добиться сдвига фазы на 90 градусов?
Я не уверен, о функции Гильберта в MATLAB, но учитывая комплексный коэффициент в вашем FFT 'а + я * b', вы можете выполнить фазовый сдвиг 90 градусов, заменив его на' -b + я * a' – jodag
Также, если у вас есть MATLAB, вы можете набрать 'edit hilbert', чтобы увидеть реализацию, которую они используют. Он выглядит довольно прямо, как только вы выполняете FFT и обратный FFT. – jodag
@jodag К сожалению, замена 'a + i * b' на' -b + i * a', похоже, не имеет желаемого эффекта. Может быть, реализация БПФ или обратного БПФ я использую неправильно? На самом деле я возвращаю те же данные до применения FFT. Кроме того, у меня нет MATLAB. – fakedad