Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: FFT
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
NikSave
Вставил в проект корку FFT, принял данные (Im, Re). Построил спектр. Вроде все нормально, но спектр постоянно "прыгает". Что бы его угомонить приходиться очень сильно усреднять. Может есть какие тонкости в этом вопросе? Подскажите пожалуйста. И еще: как выявить гармонику символьной скорости и несущей частоты? Заранее спасибо за ответы.
NahaL
Цитата(NikSave @ Jan 26 2014, 11:17) *
Вставил в проект корку FFT, принял данные (Im, Re). Построил спектр. Вроде все нормально, но спектр постоянно "прыгает". Что бы его угомонить приходиться очень сильно усреднять. Может есть какие тонкости в этом вопросе? Подскажите пожалуйста.

под "прыгает" я так понимаю резкое увеличение уровня шума. Такое часто случается в проектах , когда сигнал в окне "рвётся" (исказили/потеряли отсчёт). Какие настройки IP ядра используете? С округлением или без?
Цитата
И еще: как выявить гармонику символьной скорости и несущей частоты? Заранее спасибо за ответы.

А что за сигнал то на входе?
NikSave
Цитата(NahaL @ Jan 26 2014, 07:36) *
под "прыгает" я так понимаю резкое увеличение уровня шума. Такое часто случается в проектах , когда сигнал в окне "рвётся" (исказили/потеряли отсчёт). Какие настройки IP ядра используете? С округлением или без?

А что за сигнал то на входе?


Про уровень шума примерно Вы правы. IP работает без округления (кажется, сейчас не помню), radix-4 на переменное число точек (мах 32767), сигнал полосовой с оцифровокой почти 200 МГц, перед БПФ смешается в ноль, и фильтруется. Отсчеты идут в БПФ непрерывно на 100 МГц (I, Q). Так что на входе теряться нечему. На выходе все отсчеты подбираю (неоднократно проверял). Может это такая особенность данной корки?
NahaL
radix-4 на сколько я помню не может работать непрерывно, ему надо время на обработку...
Попробуйте использовать Piplend. Может в этом проблема. А окно накладываете?
NikSave
Цитата(NahaL @ Jan 26 2014, 08:14) *
radix-4 на сколько я помню не может работать непрерывно, ему надо время на обработку...
Попробуйте использовать Piplend. Может в этом проблема. А окно накладываете?


Ну да непрерывно он работать не может. Но насколько я понимаю корка берет нужно число отсчетов и сама прекращает их принимать на время обработки. А данные на вход как подавались так и подаются. Или я неправ? И что значит накладываю окно. В смысле применяю оконную функцию? Тогда да. Но только к готовобу БПФ, уже в компютере перед выводом на экран спектра. Как это делается написано у Лайноса. И что насчет гармоник символьной и несущей - есть идеи?
NahaL
Цитата(NikSave @ Jan 26 2014, 13:09) *
Ну да непрерывно он работать не может. Но насколько я понимаю корка берет нужно число отсчетов и сама прекращает их принимать на время обработки. А данные на вход как подавались так и подаются. Или я неправ?

Я когда переходил с Piplend на Radix, то данные набирал, выдерживал сигналы старта преобразования, плюс там еще сигнал выгрузки выходных данных. Сейчас уже точно не вспомню. Но что блок данных набирал точно для окна - это факт.
Цитата
И что значит накладываю окно. В смысле применяю оконную функцию? Тогда да.

Окно накладывал Blackman-farris'а, на входные данные. Хотел сначала без него, но получилсь некрасиво.
Цитата
Но только к готовобу БПФ, уже в компьтере перед выводом на экран спектра. Как это делается написано у Лайноса.

Можно ссылку на литературу?
Цитата
И что насчет гармоник символьной и несущей - есть идеи?

Если у вас во входном сигнале присутствует узкополосный, то его несущую определить можно, но с некоторой точностью, в зависимости от размерности FFT.(Так иногда и делал) Так же можно оценить занимаемую полосу. Но это всё "как вижу" метод.
Определение символьной скорости - это уже анализ сигнала.

Могу исходный код поискать, но это только завтра.
NikSave
Цитата(NahaL @ Jan 26 2014, 09:32) *
Я когда переходил с Piplend на Radix, то данные набирал, выдерживал сигналы старта преобразования, плюс там еще сигнал выгрузки выходных данных. Сейчас уже точно не вспомню. Но что блок данных набирал точно для окна - это факт.

Окно накладывал Blackman-farris'а, на входные данные. Хотел сначала без него, но получилсь некрасиво.

Можно ссылку на литературу?

Если у вас во входном сигнале присутствует узкополосный, то его несущую определить можно, но с некоторой точностью, в зависимости от размерности FFT.(Так иногда и делал) Так же можно оценить занимаемую полосу. Но это всё "как вижу" метод.
Определение символьной скорости - это уже анализ сигнала.

Могу исходный код поискать, но это только завтра.

сигнал старта я повесил на еденицу (возможно зря и следует его все-таки формировать, попробую). Данные выгружал разумеется по соответсвующему сигналу.
Литература "Цифровая обработка сигналов Р.Лайонс" - мне, кажется эту книжку все знают. :-)
NahaL
Цитата(NikSave @ Jan 26 2014, 14:19) *
сигнал старта я повесил на еденицу (возможно зря и следует его все-таки формировать, попробую). Данные выгружал разумеется по соответсвующему сигналу.
Литература "Цифровая обработка сигналов Р.Лайонс" - мне, кажется эту книжку все знают. :-)

Интересно узнать про оконную функцию после БПФ, а не до...
Serg76
Цитата(NikSave @ Jan 26 2014, 10:09) *
И что насчет гармоник символьной и несущей - есть идеи?

для цифровых АФМ сигналов самый простой способ определить символьную скорость - это пропустить его через амплитудный детектор, на выходе будет присутствовать гармоника символьной скорости, берете FFT сигнала с выхода АД и получаете искомую скорость. Для определения отстройки по несущей необходимо снять модуляцию с сигнала путем соответствующего возведения в нужную степень - в квадрат для BPSK, в четвертую для QPSK и различных "квадратных" КАМ, в восьмую для 8PSK. кстати, при этом можно также определить и символьную скорость по разнице гармоник. если в сигнале содержаться какие-нибудь известные последовательности достаточной длины в виде синхровставок или пилотов, то манипуляцию можно снять путем перемножения сигнала с комплексно-сопряженной известной последовательностью.

P.S. поищите по форуме, было уже неоднократно
Lmx2315
QUOTE (NikSave @ Jan 26 2014, 10:09) *
Или я неправ? И что значит накладываю окно. В смысле применяю оконную функцию? Тогда да. Но только к готовобу БПФ, уже в компютере перед выводом на экран спектра.

..если вы не применяете окно перед БПФ то применяется то что по умолчанию - прямоугольное окно. Оно выдаёт красивую картинку только если у вас в спектре одна большая гармоника и она при этом кратна частоте оцифровки, в моменты когда эта гармоника не кратна - её энергия размазывается по всему спектру что проявляется в визуальном подпрыгивании шумов. Чтобы шумы не скакали - применяйте окно перед обработкой БПФ http://www.dsplib.ru/content/win/win.html .
NikSave
Цитата(NahaL @ Jan 26 2014, 11:13) *
Интересно узнать про оконную функцию после БПФ, а не до...

стр. 479 указанной книги

Цитата(Lmx2315 @ Jan 26 2014, 14:47) *
..если вы не применяете окно перед БПФ то применяется то что по умолчанию - прямоугольное окно. Оно выдаёт красивую картинку только если у вас в спектре одна большая гармоника и она при этом кратна частоте оцифровки, в моменты когда эта гармоника не кратна - её энергия размазывается по всему спектру что проявляется в визуальном подпрыгивании шумов. Чтобы шумы не скакали - применяйте окно перед обработкой БПФ http://www.dsplib.ru/content/win/win.html .


Примерно так я и предпологал. Теперь придеться попробовать.
gibson1980
Цитата(NikSave @ Jan 26 2014, 13:09) *
Ну да непрерывно он работать не может. Но насколько я понимаю корка берет нужно число отсчетов и сама прекращает их принимать на время обработки. А данные на вход как подавались так и подаются. Или я неправ?

Я делаю так, сбрасываю сигнал в 0, фильтрую CIC фильтром с децимацией 180, накапливаю в ОЗУ (2048 отсчетов) и запускаю FFT. Пока копится следующая пачка 2048, FFT успевает сам считать накопленные данные, просчитать, выдать результат, я его обрабатываю и так до следующей пачки, то есть сигнал у меня обрабатывается непрерывно...
NikSave
Цитата(gibson1980 @ Jan 28 2014, 08:07) *
Я делаю так, сбрасываю сигнал в 0, фильтрую CIC фильтром с децимацией 180, накапливаю в ОЗУ (2048 отсчетов) и запускаю FFT. Пока копится следующая пачка 2048, FFT успевает сам считать накопленные данные, просчитать, выдать результат, я его обрабатываю и так до следующей пачки, то есть сигнал у меня обрабатывается непрерывно...


А зачем на входе ставить память? если после накопления нужного числа отсчетов он сам прекращает их принимать и начинает обработку. Если внимательно посмотреть описание FFT, то там есть возможность start повесить на еденицу и данные качать на вход непрерывно без буферной памяти. А вот память стоит повесить на выход что бы в нее записать на скорости обработки (высокой), а вот считать их уже на низкой (на скорости интерфейса. например PCI). Ну у меня так все реализовано.
gibson1980
Интересно, надо поразбираться. Но у меня накапливается не ровно 2048, а то больше то меньше (это сделано для подстройки по тактам, ДАПФ, БПФ надо стартовать с границы информации, за 1 такт инфы накапливается 4 БПФа), а вот на выходе да, инфа накапливается в ОЗУ для дальнейшего усреднения и обработки, всего 200 БПФов.
п.с. Кстати, во время работы БПФа, в твоем случае, может пропасть несколько следующих тактов, может это и отразится на спектре, тоже надо проверять, отчасти для этого я и ставил вх. буферное ОЗУ.
У меня после конвертора данные идут на тактовой 73 МГц, после СИСа с децимацией соответственно тактовая уже в 180 раз меньше, а пока БПФ будет их обрабатывать да еще на выход отправлять, пройдет уже не мало информации до старта следующего БПФа, может в этом у тебя и косяк, у меня это не заметно так как у меня инфа в виде ЧТ манипуляции, это обычные синусоидальные сигналы разнесенные на 20кГц, у меня просто вылазит маленькая палка, отстоящая на 20 кГц, но она мне и не мешает...
NikSave
Цитата(gibson1980 @ Jan 28 2014, 18:07) *
Интересно, надо поразбираться. Но у меня накапливается не ровно 2048, а то больше то меньше (это сделано для подстройки по тактам, ДАПФ, БПФ надо стартовать с границы информации, за 1 такт инфы накапливается 4 БПФа), а вот на выходе да, инфа накапливается в ОЗУ для дальнейшего усреднения и обработки, всего 200 БПФов.
п.с. Кстати, во время работы БПФа, в твоем случае, может пропасть несколько следующих тактов, может это и отразится на спектре, тоже надо проверять, отчасти для этого я и ставил вх. буферное ОЗУ.
У меня после конвертора данные идут на тактовой 73 МГц, после СИСа с децимацией соответственно тактовая уже в 180 раз меньше, а пока БПФ будет их обрабатывать да еще на выход отправлять, пройдет уже не мало информации до старта следующего БПФа, может в этом у тебя и косяк, у меня это не заметно так как у меня инфа в виде ЧТ манипуляции, это обычные синусоидальные сигналы разнесенные на 20кГц, у меня просто вылазит маленькая палка, отстоящая на 20 кГц, но она мне и не мешает...

Так что Вы усредняете БПФ по 200 выборкам БПФов? Если так то неслабо. Я усредняю примерно по 10-15 и при этом на экране спектр не очень живой. Правда я усреднение делаю уже программно на компьютере перед выводом на экран.
gibson1980
Цитата(NikSave @ Jan 29 2014, 22:20) *
Так что Вы усредняете БПФ по 200 выборкам БПФов? Если так то неслабо. Я усредняю примерно по 10-15 и при этом на экране спектр не очень живой. Правда я усреднение делаю уже программно на компьютере перед выводом на экран.

Ну да, просто у меня скорость инфы маленькая 50 Гц, а посылка 1с. и 4 БПФа на каждый символ инфы, получается 4*50=200, но это не усреднение а накопление. А однажды делал анализатор спектра на 50 МГц с разрешением 1 кГц, вот там была жесть выводить на экран 50000 отсчетов, а когда включал усреднение на 20 так вообще wacko.gif rolleyes.gif

Так вы пробовали входное буферное ОЗУ перед БПФ ставить? Кстати, усреднение лучше все таки делать в ПЛИС, у него скорость обработки гораздо выше нежели пачки 2048 (или сколько у вас) слать в комп и там еще обрабатывать...
NikSave
Цитата(gibson1980 @ Jan 30 2014, 03:47) *
Ну да, просто у меня скорость инфы маленькая 50 Гц, а посылка 1с. и 4 БПФа на каждый символ инфы, получается 4*50=200, но это не усреднение а накопление. А однажды делал анализатор спектра на 50 МГц с разрешением 1 кГц, вот там была жесть выводить на экран 50000 отсчетов, а когда включал усреднение на 20 так вообще wacko.gif rolleyes.gif

Так вы пробовали входное буферное ОЗУ перед БПФ ставить? Кстати, усреднение лучше все таки делать в ПЛИС, у него скорость обработки гораздо выше нежели пачки 2048 (или сколько у вас) слать в комп и там еще обрабатывать...

Нет пока не пробовал. Устройство уже серийное и нужно дождаться этапа модернизации. А размер пачки у меня 32767 отсчетов. А смысл делать усреднение в ПЛИС. Я же делаю БПФ, качаю в ПК, самый старый БПФ отбрасываю, усредняю, выважу на экран, снова качаю новый БПФ, старый отбрасываю, и т.д. Объем перекачаный данных не уменьшается.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.