Уточнения по использованию БПФ в ПЛИС
Добавлено: 15 сен 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".
Первым делом, конфигурируем этот ВП.
Главный параметр диалогового окна настроек в данном случае - "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?
Задача в 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?