|
Генератор синуса на FPGA Altera |
|
|
|
 |
Ответов
|
Aug 30 2011, 08:37
|
Знающий
   
Группа: Участник
Сообщений: 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 Гц, то косинус будет равен половинке и вообще не даст погрешности.
так как у Вас достаточно широкий диапазон синтезируемых частот, то целесообразно сделать несколько кратных частот дискретизации, близких к синтезируемым, исходя из указанного соображения.
|
|
|
|
|
Aug 30 2011, 09:02
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|