|
ДПФ на ПЛИС |
|
|
|
 |
Ответов
(1 - 9)
|
Feb 15 2016, 09:05
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(enzaime @ Feb 15 2016, 11:49)  Хочу написать ДПФ. Чтобы оно выполнялось как можно быстрее. Определяться частоты будут например, от 0 до 100 МГц. Частота дискретизации 230 МГц. Количество определяемых частот 500, отсчётов сигнала 2000. Какой темп выдачи Вы ожидаете на выходе при таком подходе? Какой кристалл? Цитата Т.е. для каждого модуля своя таблица (Нпример для 100 модулей 100 одинаковых таблиц (будет храниться в rom ПЛИС), чтобы можно было одновременно считывать 100 значений) Одновременно из памяти можно считать только два значения за один такт. Так что Ваша логика реализуется на рассыпухе и все коэффициенты займут уйму логики да еще и работать это будет все медленно при таком подходе. Какая задача перед Вами стоит, почему именно ДПФ?
|
|
|
|
|
Feb 15 2016, 09:41
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 22-08-14
Пользователь №: 82 609

|
Задача: определить частоту сигнала в диапазоне 0 до 100 МГц за время <10 мкс (в идеале, но пока что хоть за какое-нибудь время) ДПФ это я сам так взял. ПЛИС 5csema5f31c6 (Cyclone V). Насчёт определения частоты я так понял есть 2 основных алгоритма: в лоб (ДПФ) и оптимизированное (БПФ и все его разновидности (по онованию 2,4, алгоритм Винограда и т.д.)) ДПФ потому что нет ограничения что-то вроде на количество выборок сигнала (Например для БПФ по основанию 2 можно рассчитать накопления на частотах в количестве 2,4,8,16,32 ... и отсчётов должно быть столько же, а в ДПФ можно взять для примера 321 частоту и 1567 отсчётов для каждой частоты. Как-то так) Цитата Одновременно из памяти можно считать только два значения за один такт. Так что Ваша логика реализуется на рассыпухе и все коэффициенты займут уйму логики да еще и работать это будет все медленно при таком подходе. Внутри ПЛИС вроде достаточно ресурсов (именно блоков памяти), чтобы организовать 100 компонентов rom размером 1024х12 слов (т.е. будет 100 компонентов rom со своими входами и выходами (100 входов тактовых, 100 входов адрес чтения, 100 выходов значения памяти по адресу). Но да в логике 100 входов адресов и 100 выходов значений по адресам займут наверно много.
Сообщение отредактировал enzaime - Feb 15 2016, 09:45
|
|
|
|
|
Feb 15 2016, 10:14
|
Профессионал
    
Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082

|
Цитата(enzaime @ Feb 15 2016, 12:41)  Внутри ПЛИС вроде достаточно ресурсов (именно блоков памяти). Еще раз - встроенная память максимум двухпортовая, т.е. Вы сможете из нее считать одновременно только два значения и практическая реализуемость описанного Вами метода, с моей точки зрения, стремится к нулю. Цитата Задача: определить частоту сигнала в диапазоне 0 до 100 МГц за время <10 мкс (в идеале, но пока что хоть за какое-нибудь время) Если использовать на практике, то можно использовать метод параллельный - например, готовую корку поточного БПФ. Тогда время на рассчет спектра составит 1/Fs(частота дискретизации)*N(кол-во точек)*(~2,5-набрать выборку+сделать вычисления+сформировать обычный порядок данных на выдачу)=(1/230000000)*2048*2,5=~22мкс. Либо последовательный (типа ДПФ) - вставить корку NCO и перемножать с сигналом на заданном произвольном временном интервале - и так последовательно для каждого бина. В этом случае на вход NCO будет подавать разный фазовый инкремент и не потребуется хранить все коэффициенты - но расчет будет очень медленным и не поточным (хотя тут можно и конвейер написать). PS\частота 230МГц для Вашего чипа серьезная, так что следите за выполнением временных ограничений.
|
|
|
|
|
Feb 15 2016, 17:25
|
Профессионал
    
Группа: Свой
Сообщений: 1 214
Регистрация: 23-12-04
Пользователь №: 1 643

|
Приветствую! Цитата(enzaime @ Feb 15 2016, 11:41)  .. Внутри ПЛИС вроде достаточно ресурсов (именно блоков памяти), чтобы организовать 100 компонентов rom размером 1024х12 слов (т.е. будет 100 компонентов rom со своими входами и выходами (100 входов тактовых, 100 входов адрес чтения, 100 выходов значения памяти по адресу). Но да в логике 100 входов адресов и 100 выходов значений по адресам займут наверно много. Есть жирный чип и хотите считать лоб - тогда для каждого умножителя своя отдельная таблица. Будет просто - регулярно и быстро. Да и управление будет простое - одни счетчики  Можно с экономит память если получать sin и cos на лету из одной таблицы и хранить только часть периода но это если таблица симметричная получится. Удачи! Rob.
|
|
|
|
|
Feb 16 2016, 06:55
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 22-08-14
Пользователь №: 82 609

|
Цитата Еще раз - встроенная память максимум двухпортовая, т.е. Вы сможете из нее считать одновременно только два значения и практическая реализуемость описанного Вами метода, с моей точки зрения, стремится к нулю. В общем набросал я схемку
вот здесь видно что можно сделать несколько блоков rom памяти с таблицей синусов, а дальше чтобы получить нужный коэффициент надо просто выбрать его из таблицы. И для каждого канала хранить такую таблицу (например 100 каналов и 100 одинаковых таблиц, чтобы за 1 такт можно было получать больше 2 значений, а если бы все каналы обращались бы к 1 таблице, то действительно за 1 такт я бы больше 2 значений из памяти не получил бы). Цитата Есть жирный чип и хотите считать лоб - тогда для каждого умножителя своя отдельная таблица. Будет просто - регулярно и быстро. Да и управление будет простое - одни счетчики sm.gif Можно с экономит память если получать sin и cos на лету из одной таблицы и хранить только часть периода но это если таблица симметричная получится. Это то что мне первое в голову пришло. Дальше да можно уменьшить количество хранимых значений таблицы (используя свойства функций sin, cos) Но может есть ещё какие варианты? Помимо тех что выше описаны? Мне просто интересно какой вариант самый правильный ( я понимаю, что есть много вариантов, вот какой будет реализован такой и будет правильным)
Сообщение отредактировал enzaime - Feb 16 2016, 07:03
|
|
|
|
|
Feb 16 2016, 07:11
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(enzaime @ Feb 16 2016, 10:55)  Но может есть ещё какие варианты? Помимо тех что выше описаны? Мне просто интересно какой вариант самый правильный.. Ответ зависит от того, что вы собираетесь делать с найденной частотой: Цитата(enzaime @ Feb 15 2016, 13:41)  Задача: определить частоту сигнала в диапазоне 0 до 100 МГц за время <10 мкс.. И от того, с какой точностью вам нужно "определить частоту сигнала в диапазоне 0 до 100 МГц"..
|
|
|
|
|
Feb 16 2016, 07:39
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 22-08-14
Пользователь №: 82 609

|
Цитата Ответ зависит от того, что вы собираетесь делать с найденной частотой: Предполагается что в сигнале будет от 1 частоты до 7-8. Эти частоты нужны для того чтобы определять из каких сигналов состоит исходный. Цитата И от того, с какой точностью вам нужно "определить частоту сигнала в диапазоне 0 до 100 МГц".. Ну точность к примеру +- 200 КГц. Т.е. ответ может быть такой 5МГц +- 200 КГц. Вот как-то так.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|