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

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

Postby pavel_urkaev on 15 Sep 2013, 17:28

Добрый день. Приветствую всех участников Портала. Мне требуется ваша помощь в изучении выполнения БПФ в ПЛИС ("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".

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

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

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

Примерно такое представление сложилось. Поправьте пожалуйста, если ошибаюсь где-то? И укажите, возможно ли работать с порциями размера не 2^m?
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

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

Postby Andrew Lunev on 15 Sep 2013, 18:19

FFT Fast Fourier Transforms - Быстрое преобразование Фурье - алгоритм, многократно уменьшающий кол-во выполняемых математических операций и ресурсов памяти, необходимых для вычисления Дискретного преобразования Фурье. Работает только в случае, когда кол-во точек кратно степени двойки. Если кол-во точек не кратно, то используется обычный алгоритм вычисления ДПФ, но его реализации нет на ПЛИС.
На практике обычно добавляют недостающие точки до кратности двойке и вычисляют БПФ. То есть при получении 4000 точек, вы должны добавить еще 96 точек (скорее всего с нулевыми значениями) и вычислить БПФ. Потом учесть это при обработке результата.
Или же вычислять спектр по 4096 точкам, не думаю, что это слишком исказит результат. Неужели надо получать спектр точно за 0,1 секунды? В этом случае частота выдачи результата будет отличаться всего на 2,5% от необходимой.
User avatar
Andrew Lunev
leader
leader
 
Posts: 880
Joined: 11 Dec 2010, 12:31
Location: Москва
Medals: 2
Activity (1) Professionalism (1)
LabVIEW Version: 2018
Karma: 251
hardware I/O VIP teachers

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

Postby pavel_urkaev on 15 Sep 2013, 19:22

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

Тогда, возник следующий вопрос: ВП "Spectral Measurements Express VI" позволяет обрабатывать выборку сигнала размером, отличным от степени 2ки. Что происходит внутри - дополнение нулями до степени 2ки или дополнительные преобразования? Отражается ли это на скорости выполнения БПФ (ВП "Spectral Measurements Express VI")?
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

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

Postby Andrew Lunev on 15 Sep 2013, 22:25

Как именно работает "Spectral Measurements Express VI" я не знаю, но скорее всего добавляют точки до ближайшего числа кратного двойке в целой степени и вычисляют БПФ. На сколько это влияет на результат и как именно я не знаю, тут надо глубоко в теорию вникать. Думаю, что никак не влияет, иначе бы вместо БПФ использовали обычное ДПФ, но раз быстродействие VI не изменяется при кратных и не кратных двойке точках, то всегда используют БПФ.
User avatar
Andrew Lunev
leader
leader
 
Posts: 880
Joined: 11 Dec 2010, 12:31
Location: Москва
Medals: 2
Activity (1) Professionalism (1)
LabVIEW Version: 2018
Karma: 251
hardware I/O VIP teachers

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

Postby pavel_urkaev on 16 Sep 2013, 13:07

Andrew Lunev wrote:Как именно работает "Spectral Measurements Express VI" я не знаю, но скорее всего добавляют точки до ближайшего числа кратного двойке в целой степени и вычисляют БПФ. На сколько это влияет на результат и как именно я не знаю, тут надо глубоко в теорию вникать. Думаю, что никак не влияет, иначе бы вместо БПФ использовали обычное ДПФ, но раз быстродействие VI не изменяется при кратных и не кратных двойке точках, то всегда используют БПФ.

Благодарю Вас за разъяснения по Моему вопросу, теперь все на местах!
pavel_urkaev
beginner
beginner
 
Posts: 22
Joined: 23 Jun 2011, 12:15
LabVIEW Version: NI LabVIEW 2012(x86)
Karma: 0

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

Postby IORIK on 16 Sep 2013, 14:30

Есть книжечка "Р. Блейхут. быстрые алгоритмы цифровой обработки сигналов" от 1985 г. издания за бугром. В ней, в частности, описываются некоторые алгоритмы БПФ. Известный всем способ по основанию 2 - алгоритм Кули-Тьюки. Но есть и другие, например, когда длину выборки можно разложить на простые числа. Возможно есть и более эффективные алгоритмы.
В Labview, как и в Matlab преобразование Фурье засунуто в dll-библиотеку, какой алгоритм используется - мне не известно. Но точно не дополнение нулями. Ведь тогда количество гармоник в спектре будет 2^(n-1), да и шаг по частоте тоже немного изменится.
IORIK
adviser
adviser
 
Posts: 240
Joined: 14 Dec 2010, 20:46
LabVIEW Version: 7.0; 8.2
Karma: 45


Return to Real Time / FPGA / Embedded

Who is online

Users browsing this forum: No registered users and 1 guest

cron