реклама на сайте
подробности

 
 
> Генератор синуса на FPGA Altera
Porty
сообщение Aug 29 2011, 12:07
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893



Добрый день

Для проверки 18 ультразвуковых трактов нужен любой точный (побочные гармоники не более -110дб) генератор отсчётов синусов произвольной частоты внутри ПЛИС с периодом не кратным целому числу и степени двойки. Поэтому заранее рассчитанная таблица в памяти не пригодна. Частота дискретизации от 100кГц до 500кГц. Как проще сделать?
Теорию прямого цифрового синтеза я знаю, и примерно представляю как реализовать, но вряд ли я сделаю чистый синус сразу затратив минимум времени и хотелось бы сразу получить результат т.к. это нужно исключительно для отладки (Подставить вместо АЦП в качестве источника сигнала).

ПЛИС - Аltera Cyclon II 20k
Разрядность 16 бит целые.
Частота дискр. от 100 до 500кГц.

Какие есть готовые решения для создания такого генератора?
Или как самому быстро накидать достаточно точный генератор?
Есть готовые компоненты в Квартусе для генерации синуса или реализующую функцию синуса?

Заранее спасибо.

Сообщение отредактировал Porty - Aug 29 2011, 12:34
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Hoodwin
сообщение Aug 30 2011, 08:37
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



1. Вообще, насколько я себе представляю, 16 разрядов мало для 110 дБ. Вот вроде бы по науке соотношение сигнал/ошибка будет, если правильно помню, порядка 2 дБ + 6 дБ * N, где N - число разрядов. Как следствие, 16 разрядов дадут что-то около 98 дБ, а для 110 нужно не менее 18 разрядов. Я бы сделал для подстраховки разрядов 20, чтобы иметь небольшой запас на точность вычислений.

2. Так частота "плавает" или просто неточно задается? Как я уже написал, нужно так выбрать частоту дискретизации, чтобы у сигнала был ощутимый набег фазы, порядка 45-60 градусов. В этом случае округление значения косинуса не приведет к заметным изменениям задающей частоты. Чтобы было понятнее, поясню на примере. Вот есть частота синусоиды 200 Гц. А частота дискретизации, скажем, 56000 Гц.
cos(2*pi*200/56000) будет 0,999748235. Приведение к Q0.16 даст 65519,50033. Обрезание до целого даст 65519, что эквивалентно значению косинуса 0,999740601, или исходной частоте 203,0098173 Гц.

Если все то же самое проделать с частотой дискретизации 1600 Гц, на которой 200 Гц дает набег фазы в 1/8 периода, то частота составит 200,0052204 Гц. Если же взять частоту под набег фазы в 1/6 периода, 1200 Гц, то косинус будет равен половинке и вообще не даст погрешности.

так как у Вас достаточно широкий диапазон синтезируемых частот, то целесообразно сделать несколько кратных частот дискретизации, близких к синтезируемым, исходя из указанного соображения.

Go to the top of the page
 
+Quote Post
Porty
сообщение Aug 30 2011, 09:02
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 246
Регистрация: 28-05-08
Из: г. Ижевск
Пользователь №: 37 893



Цитата(Hoodwin @ Aug 30 2011, 12:37) *
1. Вообще, насколько я себе представляю, 16 разрядов мало для 110 дБ. Вот вроде бы по науке соотношение сигнал/ошибка будет, если правильно помню, порядка 2 дБ + 6 дБ * N, где N - число разрядов. Как следствие, 16 разрядов дадут что-то около 98 дБ, а для 110 нужно не менее 18 разрядов. Я бы сделал для подстраховки разрядов 20, чтобы иметь небольшой запас на точность вычислений.

2. Так частота "плавает" или просто неточно задается? Как я уже написал, нужно так выбрать частоту дискретизации, чтобы у сигнала был ощутимый набег фазы, порядка 45-60 градусов. В этом случае округление значения косинуса не приведет к заметным изменениям задающей частоты. Чтобы было понятнее, поясню на примере. Вот есть частота синусоиды 200 Гц. А частота дискретизации, скажем, 56000 Гц.
cos(2*pi*200/56000) будет 0,999748235. Приведение к Q0.16 даст 65519,50033. Обрезание до целого даст 65519, что эквивалентно значению косинуса 0,999740601, или исходной частоте 203,0098173 Гц.

Если все то же самое проделать с частотой дискретизации 1600 Гц, на которой 200 Гц дает набег фазы в 1/8 периода, то частота составит 200,0052204 Гц. Если же взять частоту под набег фазы в 1/6 периода, 1200 Гц, то косинус будет равен половинке и вообще не даст погрешности.

так как у Вас достаточно широкий диапазон синтезируемых частот, то целесообразно сделать несколько кратных частот дискретизации, близких к синтезируемым, исходя из указанного соображения.


1. Нормально вышло. Точность достаточная для наших практических целей. Хоть и реально меньше, но соответствует 16 разрядам.
2. Частота задаётся статически не правильно, но я с этим разобрался, был формат Q16.16 на предыдущее значение синуса и Q16.16 на коэффициент умножения, сделал коэффициент в Q1.31 стало гораздо точнее.
Но частота по времени плавает чуток - на доли герца, примерно плавает на 0.5Гц с периодом в 0.5-1 секунду при 12345.567Гц требуемой на 192кГц дискретизации. Но это уже не критично, просил для саморазвития. Просто, интересно стало почему плавает. =)


NСО не приемлем из за большого потребления ресурсов (по памяти не влезло). Всё-таки нужно 18 каналов сделать с разными частотами и фазами каждый. На канал 15-25кбит требуется, в 200кбитный Циклон никак не влазило.

Сообщение отредактировал Porty - Aug 30 2011, 09:02
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Porty   Генератор синуса на FPGA Altera   Aug 29 2011, 12:07
- - soldat_shveyk   Тут квартус с его компонентами не важны. Вы заяви...   Aug 29 2011, 12:17
- - Porty   Мне нужно получить внутри ПЛИС цифровые отсчёты як...   Aug 29 2011, 12:20
- - iosifk   Цитата(Porty @ Aug 29 2011, 16:07) Разряд...   Aug 29 2011, 12:32
|- - Porty   Цитата(iosifk @ Aug 29 2011, 16:32) На са...   Aug 29 2011, 12:44
||- - iosifk   Цитата(Porty @ Aug 29 2011, 16:44) Спасиб...   Aug 29 2011, 12:57
|- - =SSN=   Цитата(iosifk @ Aug 29 2011, 16:32) На са...   Aug 29 2011, 12:46
|- - Porty   Цитата(=SSN= @ Aug 29 2011, 16:46) И как ...   Aug 29 2011, 12:51
||- - =SSN=   Цитата(Porty @ Aug 29 2011, 16:51) нужны ...   Aug 29 2011, 13:14
|- - mse   Цитата(=SSN= @ Aug 29 2011, 16:46) И как ...   Aug 29 2011, 16:48
- - Hoodwin   Нда... Количество советов по вариантам цифровой ге...   Aug 29 2011, 13:38
|- - Porty   Цитата(Hoodwin @ Aug 29 2011, 17:38) Нда....   Aug 30 2011, 07:23
- - eugen_pcad_ru   Используйте ядро NСО из состава встроенных ядер - ...   Aug 30 2011, 05:58
|- - Мур   Цитата(eugen_pcad_ru @ Aug 30 2011, 08:58...   Aug 30 2011, 06:42
- - Hoodwin   А как проверяли, что плавает то? Может, если через...   Aug 30 2011, 10:01
|- - Porty   Цитата(Hoodwin @ Aug 30 2011, 14:01) А ка...   Aug 30 2011, 10:49
- - dde29   А с алгоритмом CORDIC - не знакомы? занимает не бо...   Sep 1 2011, 14:59
|- - Porty   Цитата(dde29 @ Sep 1 2011, 18:59) А с алг...   Sep 2 2011, 05:41
|- - dde29   Цитата(Porty @ Sep 2 2011, 08:41) алгорит...   Sep 3 2011, 03:43
|- - Porty   Цитата(dde29 @ Sep 3 2011, 07:43) У меня ...   Sep 3 2011, 09:56
|- - dde29   Цитата(Porty @ Sep 3 2011, 12:56) 16 звен...   Sep 4 2011, 13:40
- - anatolich   Cделал такой же генератор, на 14 бит целочисленный...   Jul 4 2013, 13:24
|- - Maverick   Цитата(anatolich @ Jul 4 2013, 16:24) по...   Jul 4 2013, 13:50
- - anatolich   Вот мой пример library ieee; use ieee.std_logic_11...   Jul 4 2013, 14:00
- - anatolich   2+6*14=86ДБл Такое примерно число получается если ...   Jul 5 2013, 05:14


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.0131 секунд с 7
ELECTRONIX ©2004-2016