Давайте рассмотрим такой пример:
Пусть у нас входной сигнал идет в виде непрерывного очень длинного (в пределе бесконечного) потока цифровых отсчетов и мы хотим произвести расчет его преобразования Гильберта при помощи обнуления спектральных отсчетов в отрицательной области.
Тогда мы должны ограничить выборку FFT для расчета преобразования и реализовать обработку с перекрытием для исключения краевых эффектов. Например ограничим FFT выборку длиной NFFT = 64 точки. Обработка с перекрытием подразумевает следующую процедуру:
1) берем первую выборку x(0:63) --> FFT c обнулением (и умножением на 2) --> IFFT --> получаем комплексный y(0:63), реальная часть которого это х(0:63) а мнимая - ортогональное дополнение.
2) Для исключения краевого эффекта выбираем из y(0:63) только точки с индексами y(16:47). Результат z(16:47) = y(16:47).
3) Следующая выборка исходного сигнала будет смещена не на 64 отсчета на 32. Тогда
x(32:95) --> FFT c обнулением (и умножением на 2) --> IFFT --> y(0:63).
4) Снова выбираем половину центральных отсчетов z(48:79) = y(16:47)
Продолжаем сдвигать на 32 точки входной сигнал, делать 64 точечное преобразование и выбирать только 32 центральных отсчетов.
В результате мы будет иметь поток выходного аналитического сигнала с блочным преобразованием.
И если мы оценим спектральную плотность мощности этого потока то обнаружим боковые лепестки в отрицательной области частот (На рисунке ниже результ при входном сигнала в вииде гауссовского белого шума, NFFT = 64, СПМ построена по 2048 точкам).
Почему мы видим такую картину? Ответ в свойствах дискретного сигнала. Дело в том что при обнулении FFT мы обнуляем лишь фиксированные точки в спектре, в то время как спектр дискретного сигнала есть непрерывная функция. Таким образом мы не контролируем поведение спектра между точками в которых мы обнулили спектр. Это классический эффект Гиббса.
Я подготовил пример программы которая рассчитывает данный график с использованием DSPL.
Исходный код программы
DSPL проект для MINGW
Быстрый старт
PS Запускать надо под 32 битной версией Windows.
PPS Буду благодарен за помощь в сборке 64 битной DSPL (все исходники предоставлю от вас лишь настроить MINGW по ссылке выше).
Итак в сухом остатке. Использование FFT для преобразования Гильберта это не очень хороший путь.Гораздо лучше делать через фильтрацию, потому что в этом случае мы можем контролировать эффект Гиббса за счет весовой обработки.