Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: БПФ. Дублирование данных при вычислении спектра
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
MSP430F
Уважаемые коллеги!

Прошу вашего совета вот в таком вопросе.

Как известно, для вычисления спектра с шириной линии 1 Гц обработке подвергается массив оцифрованных данных длительностью 1 с.
Например, частота дискретизации равна 4096 Гц. В течении 1 секунды формируем массив из 4096 значений, оцифрованных АЦП, затем
применяем БПФ и находим спектр с шириной линии (разрешением) 1 Гц. Спектр вычисляется достаточно быстро, получается, что период выдачи спектра, в основном, определяется необходимостью накопления данных в течение 1 с.
Поставлена задача - уменьшить период выдачи спектра. Предлагается для этого оцифровывать сигнал 1/4 секунды. При частоте 4096 Гц это означает массив из 1024 выборок. Затем формируем массив из 4096 элементов путем записи в него 4 раза подряд массива из 1024 выборок. При этом получается массив из необходимых 4096 элементов, состоящий из 4-х идентичных отрезков. Применяем БПФ к этому массиву (из 4096 элементов) и получаем спектр с шириной линии 1 Гц.

Насколько такой подход правомерен при условии, что:
1. Сигнал стационарен и, по идее, выборка длительностью 1/4 секунды вполне репрезентативна.
2. Интерес представляют собой линии спектра с частотой 80-100 Гц, то есть гораздо выше 4 Гц, ниже которой, понятно, ничего толкового мы не получим.

(К сожалению, параллельный сбор и обработка на имеющемся "железе" невозможны, поэтому варианты с расчетом спектра 4 раза в секунду на актуальном массиве из 4096 выборок, постоянно обновляемом, просьба не предлагать.)
andyp
повторение буфера ничего не даст. получите по три 0 между отсчетами спектра на выходе - все ваши данные окажутся периодической функцией с периодом 4. Усредняйте спектры по 1024 и интерполируйте между спектральными отсчетами в интервале для того, чтобыувеличить разрешение.

Или добейте буффер 0-ми и посчитайте FFT 4096. Тогда отсчеты спектра интерполируются функцией sync.
tmtlib
Вариант N1 - почитай вот это:
http://stackoverflow.com/questions/4633203...-between-frames
по двум БПФ вытаскивается более точная частота на основании знания того, что
фаза между двумя БПФ меняется как i * 2.0 * PI * FFT_STEP / FFT_N, где
i - отсчёт спектра
FFT_STEP - сдвиг в сэмплах между двумя БПФ
FFT_N - порядок БПФ.

Вариант N2 - погугли Zoom FFT
если участок с исследуемым сигналом не размазан по всем частотам, то можно
1. перенести исследуемый участок в область около 0
2. сделать децимацию так, что исследуемый участок растянется по всему спектру.

Для быстрого отклика системы:
скользящие окна (sliding FFFT)
или скользящее ДПФ (sliding DFT)




MSP430F
Всем спасибо за ответы!
Раз такое дело, решили все-таки организовать непрерывный сбор данных и расчет БПФ каждые полсекунды на буфере, организованном в виде кольца.
Corner
ХМ, набрали 4096 за секунду - посчитали. Сдвинули на 1/4 секунды, взяли еще 1024 новых, 1024 самых старых выкинули - посчитали. Перекрытие в 1/4 выборки самое то.
MSP430F
Цитата(Corner @ Feb 28 2014, 20:28) *
ХМ, набрали 4096 за секунду - посчитали. Сдвинули на 1/4 секунды, взяли еще 1024 новых, 1024 самых старых выкинули - посчитали. Перекрытие в 1/4 выборки самое то.


Не слишком часто ? Вроде, в классике обычно советуют перекрытие в 1/2 ?
Corner
Цитата(MSP430F @ Feb 28 2014, 22:08) *
Не слишком часто ? Вроде, в классике обычно советуют перекрытие в 1/2 ?


Все зависит от того какая равномерность АЧХ требуется.
asoharev
MSP430F, обычно, когда данных не хватает, добивают нулями до нужной длины. Спектр от этого не портится, да и бпф такой последовательности будет дешевле (с точки зрения вычислений).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.