Я хотел бы преобразовать сигнал в частотную область. Желаемый диапазон частот , 0.1 Hz
чтобы 1 Hz
и разрешение по частоте 0.01 Hz
.
При частоте дискретизации 30 Hz
FFT дает частотные составляющие до 15 Гц. Повышение частоты дискретизации дает лучшее разрешение по частоте. Однако БПФ дает более широкий частотный диапазон. В моем случае, я просто хочу, 0.1 Hz
чтобы 1 Hz
FFT отказался от 15 Hz
(дополнительных вычислений).
Мой вопрос заключается в том, существует ли в любом случае стандартный способ вычисления частотной области сигнала с определенным частотным диапазоном и высоким разрешением?
Ответы:
Я думаю, что лучшее решение вашей проблемы - использовать chirp-DFT. Это как увеличительное стекло для определенного частотного диапазона. Это более эффективно, чем прямая реализация DFT (без FFT), потому что алгоритм FFT может использоваться с некоторой соответствующей предварительной и последующей обработкой. В основном вам необходимо модулировать ваш сигнал с помощью ЛЧМ-сигнала, затем фильтровать с помощью БПФ, а затем снова ЛЧМ-модулировать ваш сигнал, чтобы получить желаемую частотную характеристику. Смотрите здесь и здесь для получения подробной информации о том, как реализовать chirp-DFT.
источник
Существует также возможность использования частотного деформирования (также работайте как увеличительное стекло, так как вы получаете улучшенное разрешение в интересующем диапазоне частот для БПФ того же размера за счет более низкого разрешения на более высоких частотах). Однако вы не сохраняете MIPS, поскольку размер FFT не уменьшается, а искажение частоты далеко не дешево.
Если вы хотите вычислить только определенные элементы в FFT (и, следовательно, сохранить MIPS), есть несколько способов сделать это. Например скользящий ДПФ. Ссылки в этой статье дают очень хорошее объяснение http://www.comm.utoronto.ca/~dimitris/ece431/slidingdft.pdf . Я также думаю, что goertzel algo делает нечто подобное, но я этого не знаю.
Тогда есть опция понижающей дискретизации перед FFT'ом. Это, вероятно, также сэкономит немного MIPS.
Изменить: просто чтобы уточнить комментарий о бесполезности алгоритма Гертцеля. При непосредственном подключении значений к выражению, найденному в нижней части этой вики-страницы http://en.wikipedia.org/wiki/Goertzel_algorithm, подход Гертцеля будет более сложным, чем БПФ, когда размер требуемого БПФ больше 128 (при условии, что размер FFT является фактором 2, а реализация radix-2).
Однако есть и другие факторы, которые следует принять во внимание, что идет в пользу Гёртцеля. Просто процитирую вики-страницу: «Реализации FFT и платформы обработки оказывают существенное влияние на относительную производительность. Некоторые реализации FFT [9] выполняют внутренние вычисления комплексных чисел для генерации коэффициентов на лету, значительно увеличивая их» стоимость K на единицу. единица работы. "Алгоритмы FFT и DFT могут использовать таблицы предварительно вычисленных значений коэффициентов для лучшей числовой эффективности, но это требует большего доступа к значениям коэффициентов, буферизованным во внешней памяти, что может привести к увеличению конкуренции за кэш, что противостоит некоторым из численных преимуществ «.
«Оба алгоритма получают эффективность примерно в 2 раза при использовании реальных, а не комплексных входных данных. Однако эти усиления естественны для алгоритма Гёртцеля, но не будут достигнуты для БПФ без использования определенных вариантов алгоритма, предназначенных для преобразования реального оцененные данные. "
источник
Разрешение по частоте равно где - частота выборки, а - размер БПФ. Таким образом, увеличение частоты дискретизации фактически увеличивает разрешение по частоте (я полагаю, под словом «лучше» вы подразумеваете меньшее). Поэтому вы должны увеличить размер FFT , то есть количество выборок, которые обрабатываются FFT в одном блоке данных, чтобы уменьшить разрешение по частоте. В вашем примере вам потребуется не менее 300 сэмплов для достижения желаемого частотного разрешения.
Если не может быть увеличено из-за сложности вычислений, сигнал с ограниченной полосой частот может быть сдвинут по частоте до FFT. Пусть - непрерывный сигнал, его центральная частота, а его ширина полосы. является выборочной версией , а именно . Тогда сдвиг частоты может быть достигнут с помощью где . Частота дискретизации теперь может быть уменьшена, поскольку сигнал имеет частоту среза в отличие от частоты срезаN s(t) fc fb x(n) s(t) x(n)=s(n/fs)
Этот метод работает, только если строго ограничен. Если это не так, полосовая фильтрация для фильтрации желаемой полосы частот должна применяться заранее. Также отметим, что понижающая дискретизация на дробное число также привнесет дополнительную вычислительную сложность.Мs(t) M
источник