Уточнения по использованию БПФ в ПЛИС

Ответить
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

Уточнения по использованию БПФ в ПЛИС

Сообщение pavel_urkaev »

Добрый день. Приветствую всех участников Портала. Мне требуется ваша помощь в изучении выполнения БПФ в ПЛИС ("FFT.vi" + "FFT To Spectrum.vi").

Задача в 2х словах: на Цели (Клиент) необходимо снимать показания вибродатчика, вычислять по ним параметры (на основе БПФ) и складывать их в локальное хранилище. К Цели подключен GSM-модем, передающий данные на Сервер по GPRS-каналу. При установлении связи Клиент-Сервер, в глобальное хранилище Сервера поступают значения параметров из локального хранилища Цели.

В качестве целевого устройства используется cRIO-9075.
Логика в ПЛИС:
1)Поток, получающий с указанной частотой показания вибродатчика (модуль NI cRIO 9024). Показания заносятся в "очередь Показаний"(ПЛИС->Контроллер).
Логика в Контроллере:
1)Поток, получающий показания из ПЛИС из "очереди Показаний" фрагментами определенного размера. Далее, фрагменты делятся на порции, на основе которых рассчитываются параметры. Полученные порции через "очередь Порций" передаются в поток 2 для вычисления параметров.
2)Поток, получающий данные из "очереди Порций показаний". По каждой порции вычисляется БПФ, далее получаем требуемые параметры и заносим их в "очередь Параметров".
3)Поток, периодически записывающий параметры из "очереди Параметров" на жесткий диск Цели (локальное хранилище) в бинарном формате (собственная реализация, а не TDMS).
4)Поток связи с Сервером. Периодически устанавливается соединение с Сервером, и Сервер забирает частями Параметры с жесткого диска Цели (локальное хранилище) и заносит их в БД (глобальное хранилище).

При необходимой нам частоте дискретизации, размере порции для параметров и др. настройках ЦП контроллера загружается на 100%, через некоторое время кончается ОЗУ (очереди в Контроллере не успевают опустошаться) и все...Для снижения нагрузки можно изменить параметры измерений. Однако, в первую очередь необходимо оптимизировать узкие места. Помимо обращения к жесткому диску, есть БПФ. В связи с этим встала необходимость перенести вычисление БПФ из Контроллера в ПЛИС.

Касательно вычисления БПФ в ПЛИС была изучена следующая справочная информация:
http://www.ni.com/white-paper/7088/en/
http://zone.ni.com/reference/en-XX/help ... /fpga_fft/
http://zone.ni.com/reference/en-XX/help ... fft2power/

После прочтения материала стало ясно, что выполнение БПФ в Контроллере и в ПЛИС не совсем одно и то же. Поэтому хотелось бы уточнить, верно ли Я понимаю принцип действия ВП ("FFT.vi" + "FFT To Spectrum.vi"). Я изложу сложившееся понимание выполнения БПФ в ПЛИС. Будьте добры, поправьте если ошибаюсь.


Пусть частота дискретизации (измерения) показаний вибродатчика F = 40000кГц, параметры нужно рассчитывать с интервалом dT = 0,1c. Тогда объем выборки БПФ для вычисления параметров n = F*dT = 40000*0,1 = 4000 элементов, показаний. Для вычисления БПФ в ПЛИС нужно использовать ВП "FFT.vi".

Первым делом, конфигурируем этот ВП.
Изображение
Главный параметр диалогового окна настроек в данном случае - "Transform Parameters/Length" (N), он и определяет n - размер порции данных, для которой вычисляется БПФ. Остальные не меняем, данный ВП будет выполняться однотактовом цикле (Single Cicle Loop). Значение N - степень 2ки, то есть задать требуемые 4000 элементов, показаний для вычисления БПФ не удастся - только 4096. Следовательно, БПФ будет рассчитываться для порций размера N 4096 элементов с частотой дискретизации 40000кГц. Нельзя ли выполнять БПФ все же для порции размера n в 4000 элементов? Например, передать 4000 элементом и сбросить ВП?

Изображение
На вход ВП "FFT.vi" reset подается ИСТИНА только на первой итерации цикла, далее ВП сбрасывать не нужно. На вход real data in подаются показания вибродатчика при значении на input valid - ИСТИНА, а вход imaginary data in оставляем неподключенным. Как только на выходе output valid устанавливается ИСТИНА, необходимо получать данные с выхода real data out. Эти данные (результат БПФ в ПЛИС) передаются в Контроллер, где накапливаются для дальнейшей обработки в ВП "FFT To Spectrum.vi".

Изображение
Как только в Контроллере накопится N = 4096 элементов результата БПФ из ПЛИС, то мы передает этот массив в ВП "FFT To Spectrum.vi", на вход real FFT data. Также укажем тип спектра в spectrum type и частоту дискретизации F = 40000 в samle rate (S/s). На выходе spectrum out получим спектр - массив гармоник с шагом df (Hz).

Примерно такое представление сложилось. Поправьте пожалуйста, если ошибаюсь где-то? И укажите, возможно ли работать с порциями размера не 2^m?
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Уточнения по использованию БПФ в ПЛИС

Сообщение Andrew Lunev »

FFT Fast Fourier Transforms - Быстрое преобразование Фурье - алгоритм, многократно уменьшающий кол-во выполняемых математических операций и ресурсов памяти, необходимых для вычисления Дискретного преобразования Фурье. Работает только в случае, когда кол-во точек кратно степени двойки. Если кол-во точек не кратно, то используется обычный алгоритм вычисления ДПФ, но его реализации нет на ПЛИС.
На практике обычно добавляют недостающие точки до кратности двойке и вычисляют БПФ. То есть при получении 4000 точек, вы должны добавить еще 96 точек (скорее всего с нулевыми значениями) и вычислить БПФ. Потом учесть это при обработке результата.
Или же вычислять спектр по 4096 точкам, не думаю, что это слишком исказит результат. Неужели надо получать спектр точно за 0,1 секунды? В этом случае частота выдачи результата будет отличаться всего на 2,5% от необходимой.
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

Re: Уточнения по использованию БПФ в ПЛИС

Сообщение pavel_urkaev »

Добрый вечер, Андрей! Благодарю Вас за уточнения по Моему вопросу. Разница, между 4000 и 4096 точками не принципиальна, требовалось прояснить ситуацию в целом.

Тогда, возник следующий вопрос: ВП "Spectral Measurements Express VI" позволяет обрабатывать выборку сигнала размером, отличным от степени 2ки. Что происходит внутри - дополнение нулями до степени 2ки или дополнительные преобразования? Отражается ли это на скорости выполнения БПФ (ВП "Spectral Measurements Express VI")?
Аватара пользователя
Andrew Lunev

Activity Professionalism
VIP
VIP
Сообщения: 957
Зарегистрирован: 11 дек 2010, 12:31
Награды: 2
Версия LabVIEW: 2014-2021
Откуда: Москва
Благодарил (а): 4 раза
Поблагодарили: 10 раз

Re: Уточнения по использованию БПФ в ПЛИС

Сообщение Andrew Lunev »

Как именно работает "Spectral Measurements Express VI" я не знаю, но скорее всего добавляют точки до ближайшего числа кратного двойке в целой степени и вычисляют БПФ. На сколько это влияет на результат и как именно я не знаю, тут надо глубоко в теорию вникать. Думаю, что никак не влияет, иначе бы вместо БПФ использовали обычное ДПФ, но раз быстродействие VI не изменяется при кратных и не кратных двойке точках, то всегда используют БПФ.
pavel_urkaev
beginner
beginner
Сообщения: 22
Зарегистрирован: 23 июн 2011, 12:15
Версия LabVIEW: NI LabVIEW 2012(x86)
Контактная информация:

Re: Уточнения по использованию БПФ в ПЛИС

Сообщение pavel_urkaev »

Andrew Lunev писал(а):Как именно работает "Spectral Measurements Express VI" я не знаю, но скорее всего добавляют точки до ближайшего числа кратного двойке в целой степени и вычисляют БПФ. На сколько это влияет на результат и как именно я не знаю, тут надо глубоко в теорию вникать. Думаю, что никак не влияет, иначе бы вместо БПФ использовали обычное ДПФ, но раз быстродействие VI не изменяется при кратных и не кратных двойке точках, то всегда используют БПФ.
Благодарю Вас за разъяснения по Моему вопросу, теперь все на местах!
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: Уточнения по использованию БПФ в ПЛИС

Сообщение IORIK »

Есть книжечка "Р. Блейхут. быстрые алгоритмы цифровой обработки сигналов" от 1985 г. издания за бугром. В ней, в частности, описываются некоторые алгоритмы БПФ. Известный всем способ по основанию 2 - алгоритм Кули-Тьюки. Но есть и другие, например, когда длину выборки можно разложить на простые числа. Возможно есть и более эффективные алгоритмы.
В Labview, как и в Matlab преобразование Фурье засунуто в dll-библиотеку, какой алгоритм используется - мне не известно. Но точно не дополнение нулями. Ведь тогда количество гармоник в спектре будет 2^(n-1), да и шаг по частоте тоже немного изменится.
Ответить

Вернуться в «Real Time / FPGA / Embedded»