|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 9:06 pm
| Автор |
Съобщение |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: DDS генератор
Резолюцията се дефинира като Fclk/2^X, където X е броят битове в акумулатора. Ясно е, че има три начина да се увеличи резолюцията: - увеличаване на тактовата честота; - увеличаване на разредите на акумулатора; - увеличаване на тактовата честота и на разредите на акумулатора. Примерно за PIC16F17xx при Fclk=8MHz и 20-битов акумулатор се получава 7.63Hz, а за AD9833 Fclk=25MHz и 28-битов акумулатор се получава 0.093Hz. Ако обаче се увеличи разредността на акумулатора на 32-бит то при PIC16F17xx се получава резолюция от 0.002Hz (8MHz/32-бита), което си е 50 пъти по-добра резолюция от AD9833 Вдигането на резолюцията води до намаляване на Fmax, така че се налага да се прави компромис между резолюция и Fmax. Практически в 99% от приложенията резолюция от 0.1Hz е напълно достатъчна. Мен да речем ме устройва DDS генератор и с 10Hz резолюция, при цена на всички части около $5  За достатъчно дълъг патерн може да се използва по-големичък процесор, с DMA. Да речем ще използваме PIC32 с 128kB RAM, 32-битов акумулатор и патерн от 16384 точки. За тази цел заделяме двоен буфер от по 16384 точки (16-битови точки - 3 буфера * 16384 * 2 байта = 98.3kB RAM), където ще калкулираме стойностите, които ще се зареждат на всеки такт в изходния порт ( 8 или 16-битов ). Един DMA канал се инициализира да прехвърля данните от двойния буфер в изходния 16-битов PORTB, тактувайки се от някой от таймерите на процесора. DMA се инициализира да генерира прекъсване на 1/2 и на целия размер на буфера. Докато DMA трансферира първата/втората половина на двойния буфер, CPU-то смята и запълва втората/първата половина. При 80MHz CPU/Peripherals и изпълним код зареден в RAM-а теоретично би могло да се получи изходна DDS честота до към 2MHz при тактуване от 20MHz, с резолюция от 0.005Hz. На тази тема има една много хубава книжка "Digital Frequency Synthesis Demystified. DDS and Fractional-N PLLs" от Bar-Giora Goldberg, имам я в PDF, ако на някой му потрябва.
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Апр 05, 2014 12:46 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: DDS генератор
Не знам какво точно разбираш под резолюция, ама според мен това животно не е еднакво в целия диапазон. Ако клокът ти е 25MHz може да направиш сигнал с честота 1kHz и да го мениш с 0.093 Hz. Aма ако сигналът е 2Mhz стъпката ти няма да е херци... Истината е фпга, да слага 1GHz и ако иска след това и 64 битов акумулатор... Аз още се двуумя дали не ми трябва и на мен някоя платка с проц + фпга. Но ако е с арм-че и ако някой му се прави ще се включа сигурно.
|
| Съб Апр 05, 2014 2:33 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
 Re: DDS генератор
абе всичко е много хубаво, ако си е за гъдела да си правиш експерименти с докъде моиже да го докараш с пик и дма или друг контролер за 2 лева. ама нещо ме съмнява да го докараш по параметри до асик правен за тази цел  , иде реч в целия честотен диапазон, с подтискане на разни нежелани хармоници, и прочие... Но иначе не ми се връзвай аз съм изключителен песимист по принцип;) то ако беше всичко лесно хората няма да купуват асици за таз цел 
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Съб Апр 05, 2014 4:55 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
 Re: DDS генератор
Ти наистина ли не знаеш какво е резолюция ?? Резолюция = разделителна способност = минимална стъпка на промяна на изходната честота.... Нека да вземем AD9833, Fclk=25MHz и 28-битов акумулатор. Формулата за изходната честота е: Тъй като W е цяло число, то минималната възможна промяна на това число е 1. Пример1: Да кажем, че искаме да генерираме Fout=125kHz, тогава при W1 = 1342177 ще получим Fout1=124.9999739 kHz, а ако W2 = 1342178 ще получим Fout2 = 125.0000671kHz. Разликата Fout2 - Fout1 = е точно резолюцията от 0.09317Hz. Пример2:Fout=1000kHz, W1 = 10737418.24, вземаме цялата част W1 = 10737418 следва Fout1 = 999.9999776 kHz, a ако вземем W2 = 10737419 то Fout2 = 1000000.071kHz, и отново имаме стъпка Fout2 - Fout1 = 0.09317Hz. Сметни си сам стъпката(резолюцията) при 1kHz и съответно 2MHz Съгласен съм с теб, че хората обикновено предпочитат сложнотиите и простите неща им се виждат бабини деветини. Казах по-горе докъде може да се докара с микроконтролер, според мен напълно приличен обхват. Всичко зависи колко бързо ще може да се прави сумирането на W в 32-битовия акумулатор, индексирането на таблицата с например отчетите на синусоидата и зареждането на отчета в изходния DAC. Подтискането на нежеланите хармоници е друг проблем и няма общо с максималната възможна честата и/или резолюцията. Нежеланите хармоници зависят най-вече от това колко добър е DAC-а и филтъра след него. Аз бих ти казал да си налепиш един R2R DAC , да си направиш набързо 256 байтова таблица и да завъртиш един цикъл, работа за не повече от половин-един час , ще останеш приятно изненадан от това което се получава от микроконтролер за 2 лева  , а ако както мен объркаш младшия със старшия байт на акумулатора се получава много приличен генератор на шум 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Съб Апр 05, 2014 5:57 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: DDS генератор
Ми явно не знам това което ти знаеш.... Аз знам че ако имам 25MHz мога да изкарам по цифров път 1/1 1/2 1/3 1/4 и така до 1/ безкрайност. Това са чистите делители и те съвпадат с цифровия синтез ако патерна ти е 1 bit. Въпросът е че като честоти това са 25 12.5 8.33 6.25 и т.н Очевадно стъпката между първите две не е като между последните две и изобщо не е херци... Сега това е при 1 бит и 50% запълване. При повече битове става по фина стъпка но пак не е константа. А номерът дето ползват при синтеза е, че бъзикат фазата, демек не винаги е равноделно и при дадени делители имаш биене. Но дори и биенето не те спасява при високите честоти. Примерите дето ги даваш имаш една честота с една фазова грешка и друга честота с друга фазова грешка и твърдиш че имало еди каква си разлика. Ок, ще си затворя очите за грешката във фазите за тия честоти, ама вдигни на мегахерци и ще видиш че между това дето наричаш стъпка имаш промяна само на фазовите грешки а ти се опитваш да ми го пробуташ като разлика в честоти... че и в резолюцията го вкарваш 
|
| Съб Апр 05, 2014 7:09 pm |
|
 |
|
bobihot
Ранг: Форумен бог
Регистриран на: Сря Фев 13, 2013 3:35 pm Мнения: 1803
|
 Re: DDS генератор
Не разбрах защо е двоен буфер? Нали ще се генерира циклично повтарящ се образец. При положение, че данните ще се изкарват на близка до максималната за процесора скорост и ще товарят шината, не виждам как процесора ще смята новата част, та дори и да е на асемблер?
|
| Съб Апр 05, 2014 9:30 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: DDS генератор
Миро, извинявай, ако не съм те разбрал, но ти май не знаеш как работи DDS. Ако искаш, мога да се пробвам да обясня. ако знаеш - тогава няма смисъл от напъна ...
|
| Съб Апр 05, 2014 10:18 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: DDS генератор
Нямам нищо против да науча нови неща  Само дето съм твърде старо куче за да уча нови номера... Пак казвам, че ако имаш 25Mhz нещата се случват само и единствено през 40 нс, освен ако сте измислили нов начин който променя това, тогава обяснявай  Но не се опитвайте да ми обяснявате че един период 80нс и един 120нс правят средно 100нс... За мен това не са 10Мхц а омазан сигнал 
|
| Съб Апр 05, 2014 10:46 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
 Re: DDS генератор
Мдам. Така си е. Само че си има особености и заобиколки. 1. DDS обикновено не са с правоъгълен изход, а със синусоида. Т.е. периодът в изхода може и да не е точен (целочислен) брой периоди на системния клок. Това ще рече, че е възможно два последователни периода (като форма) на изходния сигнал да не са съвсем еднакви. По време обаче те са "почти" еднакви. Естествено, като краен резултат ще имаш и джитер в изхода, но той не е шумов, а е предсказуем. 2. Изходът на DDS ( не е Данък донадена стойност ! ) e синусоидален, но "не точно". Именно поради дискретния характер на генерирането имаш и паразитни честоти: N*системната +/- M*генерираната. Колкото N и M стават по-големи, толкова амплитудите са по-ниски. При голяма разлика между системната и генерираната, и при голяма разрядност на изходния DAC, в изхода "много яко" преобладава само генерираната. За още по-добър резултат в изхода се слага и филтър, най-често LC и то от висок порядък - над 4. И малко встрани от темата: обикновено в изхода на DDS има не един, а три DAC-а. Причината е, че за да се направи форма по-близка до синусоидата, трябва ъпдейда на изхода да се прави по-често, поне 8000-10000 пъти за един период ( ако гоним 10-битова точност ). За по-прецизен изход - още повече точки. Това изисква наличието на неудобно голяма таблица, където се помни на какъв ъгъл какъв изход да дадем. Дори и да е описана само 1/8 от периода (щото останалите части "приличат" на първата 1/8), пак е много. Затова обикновено ъгълът се дели на 2 части - груба (x) и фина (y). Ползва се формулата sin(x+y) = sin(x)*cos(y) + cos(x)*sin(y). Ако y е достатъчно малко, то cos(y) = 1, sin(y) = y. Изходът става sin(x+y) = sin(x) + cos(x) * y. В таблица се пазят само sin и cos със сравнително груба резолюция - няколко хиляди точки. Първият DAC генерира sin(x). Вторият генерира y, третият DAC е умножаващ и прави cos(x) с референс y. Накрая се сумират токовете от първия и третия DAC и това е.
|
| Съб Апр 05, 2014 11:18 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: DDS генератор
Бате, идея си нямам кой и за какво ще ползва цифровия синтез. Ако не се лъжа някой беше цитирал чип с PLL. За такова решение съм съгласен, че може да се постигне и качество и високи честоти. Но само с цифрово рвшение това няма как да се случи и никакви формулки не могат да ме убедят. Това си е фундаментален проблем и няма решение по цифров път. Аки работиш с някаква честота и генерираш друга, периодът на клока ти трябва да е значително по-малък от периода на генерираната честота. По-малък от допустимата фазова грешка. Освен това няма никаква логика да се слагат много битове в дак, ако нямаш точност по време/фаза. С други думи ако се гонят 10 бит, трябва да се гонят и по Х и по У. А за да имаш 10 bit по Х трябва клока ти да е поне 1000 пъти по-висок. Демек ако работиш с 25 Mhz ще получиш под 25khz. И когато честотите са кратни е ОК, ще имаш истински 10 бита. Обаче ако решиш да синтезираш една идея по-ниска честота не можеш просто да смениш стъпката. Стъпката ти е винаги един период на клока и съответно вмъкваш един или повече тактове. Полученият сигнал вече не е идеален. Верно не е голяма грешка, но вече нямаш чисти 10 бита, а 9 и нещо си.. Пак казвам не знам за какво ще се ползва тая джаджа, обаче цифровото решение (особено пък с проц) си е ограничено. Докато с фпга първо началната честота е много, много по-висока. Спартан 6 позволява до 1GHz. Второ PLL ти позволява промяна и то фина промяна на клока. Така че не е нужно да се жертват битове, за да се постигне резолюция. А ако някой му се играе да управлявя изходните закъснения (ODelay) то точността по Х направо ще кърти мифки...
|
| Нед Апр 06, 2014 12:06 pm |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
 Re: DDS генератор
Само един въпрос - каква честота на семплиране е необходима, за да изкараш на изхода на ЦАП-а в една аудио система сигнал 15 кхц с 12 бита точност примерно. Сметни го по твоите критерии, после виж с колко го правят в реала. При ддс-то е същото, само дето битстрийма не идва от АЦП, а се смята от процесора или се взима от таблица. Няколко семпъла на период от синтезираната честота са достатъчни. Останалото го върши филтъра след ЦАП-а.
|
| Нед Апр 06, 2014 2:43 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: DDS генератор
Изобщо не е същото... В аудио системите не генерираш сигнал с честота 15 kHz a спектър 15KHz, реалната честота е много по-ниска. Тук човека говори за таблица от минимум 32к точки, което предполага че иска да генерира синал със сложна форма. Както няколко пъти казах, аз нямам идея за какво ще ползва... но след като се изискват толкова точки, предполагам че идеята е да се ползват и да се ползват всички точки и всеки период. А не да вземаш по няколко точки на период и да очакваш от фитрите да ти докарат останалите 30к точки.
|
| Нед Апр 06, 2014 6:04 pm |
|
 |
|
IvoDimitroff
Ранг: Минаващ
Регистриран на: Пет Апр 20, 2012 2:28 pm Мнения: 24
|
 Re: DDS генератор
ВСЕКИ сигнал може да бъде представен, като сума от n брой хармонични сигнала. Броят n определя точността. Пищов - трансформация на Фурие. ВСЕКИ хармоничен сигнал се определя ЕДНОЗНАЧНО от три точки за период, което прави мин. 2 пъти по-висока честота на дискретизация. До тук с Теория на сигналите от 2 курс. Следствие: CD AUDIO формат - 2 канала по 16-bit с честота на дискретизация 44.1 kHz. Най-висока честота на възпроизвеждане- Fs/2 = 22050 Hz + филтър до 20kHz. Пищов: Хари Нейкуист. По-новите формати, като DVD Аудио - 48 kHz.
|
| Нед Апр 06, 2014 7:50 pm |
|
 |
|
741
Ранг: Форумен бог
Регистриран на: Вто Сеп 15, 2009 10:44 am Мнения: 1034
|
 Re: DDS генератор
Напротив. Нямаш проблем да извадиш от звуковата карта чиста синусоида 15 kHz при честота на семплиране 44 kHz. Ако филтърът отзад е приличен, примерно 6-ти ред или нагоре, на осцилоскопа може и да не забележиш, че сигналът е синтезиран от няма и три точки на период. А честотата няма проблем да е 15 кХц, нищо че не е кратно на 44. Няма значение. Важно е при попълването на таблицата да са изхвърлени компонентите на сигнала над половината от семплиращата честота. Ако има възможност да се изрежат и по-надолу, още по-добре, намаляват изискванията към филтъра. Ако е спазено горното условие, точно така ще се прави - изкарваш които точки се получат в зависимост от семплиращата честота и периода на синтезирания сигнал. Колкото и които точки дойдат - толкова. В следващия период ще са други. И като е изрязан в таблицата спектърът на сигнала в забранената област, филтърът ще възстанови формата, нищо че си подал само част от точките. Естествено, ако за описването на сложната форма ти трябва поне 25-ти хармоник, няма как с 50МХц семплиране да изкараш сигнал с период 100 нс, но с добър филтър ще докараш формата при всякакви периоди по-големи от 1-2 мкс примерно (а не само кратните на семплиращия, както беше писал горе). Колкото по-малко хармоници ти трябват, толкова по-висока честота ще можеш да синтезираш със същите 50 Мхц. 30к точки в таблицата са за точност. Колкото са повече, с толкова по-малка фазова грешка ще извеждаш всеки конкретен семпъл. Не е казано, че трябва да ги извеждаш всичките на всеки период.
|
| Нед Апр 06, 2014 7:52 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: DDS генератор
Колега, чиста синусоида с честота 15КХц си е сигнал със спектър 15КХц... и има много начини да я генерираш. Тук говорим или поне аз говоря за синал с произволна форма, което значи спектър няколко порядъка по-висок от честотата на самия сигнал. Иначе казано попълваш формата в таблица с размер 1-32768 точки, ако искаш чертаеш синусоида, ако искаш трион, ако искаш стълбички каквото искаш. Въпросът е каквото начертаеш в таблицата, това да виждаш 1:1 на скопа после. Аз твърдя, че за да се случи това с цифров синтез и работна честота 25MHz ОЧЕВАДНО генерирания сигнал ще е с много по-ниска, отделно ако искаш да имаш и резолюция без да губиш битове трябва да смъкнеш още. Обясних го 100 пъти защо. Обясних и начините за подобряването... За фитрите просто забрави. Не става хем да искаш прецизна форма, в случая при 25Мхц работна спектъра на генерирания сигнал спокойно може да превишава 250MHz стига драйверите/цап-а да е бърз. При това е желателно, ама много желателно да не го режиш, освен ако не правиш синусоидален генератор... Но пак казвам, че не това е идеята.
|
| Нед Апр 06, 2014 9:00 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 2 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|