В python, если я выполняю fft для сложных данных, а затем только положительные частоты, как это влияет на данные?
Поэтому я пытаюсь выполнить сдвиг частоты набора реальных ценностей. Чтобы добиться сдвига частоты, нужно умножить данные на сложную экспоненту, что делает результирующие данные сложными. Если я умножу только на косинус, то получу результаты как на сумме, так и на разности частот. Я хочу только сумму или разницу.
Что я сделал, так это умножил данные на сложную экспоненту, использовал fft.fft() для вычисления fft, затем использовал fft.irfft() только на положительных частотах, чтобы получить реальный набор данных, который имеет только сдвиг суммы или разности по частоте. Кажется, это прекрасно работает, но я хочу знать, есть ли какие-либо недостатки в этом или, возможно, более подходящий способ достижения той же цели. Заранее благодарим за любую помощь, которую вы можете предоставить!
1 ответ
То, что вы делаете, прекрасно. Вы генерируете аналитический сигнал для согласования отрицательных частот таким же образом, как и дискретное преобразование Гильберта. У вас будут проблемы с масштабированием - вам нужно удвоить все сигналы не-DC и не-Найквиста в реальной частоте результатов FFT.
Некоторые практические проблемы заключаются в том, что этот метод вызывает задержку размера окна, поэтому, если вы пытаетесь сделать это в режиме реального времени, вам, вероятно, следует проверить с использованием преобразователя Гильберта КИХ и соответствующих сумм. В этом случае задержка будет групповой задержкой трансформатора Гильберта.
Еще одна проблема, вызывающая беспокойство, заключается в том, что вам нужно помнить, что компонент постоянного тока вашего сигнала также будет сдвигаться вместе со всеми другими частотами. Таким образом, я бы порекомендовал вам обесценить данные (сохранить значение) перед сдвигом, обнулить ячейку постоянного тока после того, как вы БПФ данные (чтобы удалить любой частотный компонент, попавший в ячейку постоянного тока), а затем добавить среднее значение обратно, чтобы сохранить уровни сигнала в конце.