Добавление нулей как мнимых является концептуально первым шагом в том, что вы хотите сделать. Изначально у вас есть реальный единственный сигнал, который выглядит в частотной области следующим образом:
[r0, r1, r2, r3, ...]
/-~--------\
DC +Fs/2
Если вы введете его в нули для мнимого значения, вы увидите, что у вас действительно есть как положительные, так и отрицательные частоты в качестве зеркальных изображений:
[r0 + 0i, r1 + 0i, r2 + 0i, r3 + 0i, ...]
/--------~-\ /-~--------\
-Fs/2 DC +Fs/2
Затем вы умножаете этот сигнал во временной области на сложный тон в -Fs / 4 (настройка сигнала). Ваш сигнал будет выглядеть как
----~-\ /-~--------\ /------
DC
Итак, теперь вы отфильтровываете центральную половину и получаете:
________/-~--------\________
DC
Затем вы уничтожаете на два и в итоге получаете:
/-~--------\
Что ты и хочешь.
Все эти шаги могут быть эффективно выполнены во временной области. Если вы обратите внимание на все промежуточные шаги, вы заметите, что есть много мест, где вы умножаете на 0, +1, -1, + i или -i. Кроме того, полуполосный фильтр нижних частот будет иметь много нулей и некоторую симметрию для использования. Поскольку вы знаете, что вы хотите уменьшить число на 2, вам нужно только рассчитать образцы, которые вы намереваетесь сохранить. Если вы работаете с алгеброй, вы найдете много мест, где ее можно упростить для простой и быстрой реализации.
В конечном счете, все это эквивалентно преобразованию Гильберта, но я думаю, что гораздо легче понять, когда вы разложите его на такие части, как этот.
Преобразование обратно в реальное из сложного аналогично. Вы будете заполнять его нулями для каждого другого образца, чтобы отменить децимацию. Вы отфильтруете сложный сигнал, чтобы удалить только что введенный псевдоним. Вы настроите его с помощью Fs / 4, а затем выбросите мнимый компонент. (Извините, я весь ascii-arted вне ...: -)
Обратите внимание, что это преобразование с потерями вблизи границ. Вы должны использовать фильтр бесконечной длины, чтобы сделать это идеально.