Сергей Борщ 126 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 13 минут назад, EdgeAligned сказал: Правда, в этом случае таблица синуса должна быть достаточно большой, чтобы получить большой диапазон перестройки частоты. Достаточно иметь большую разрядность аккумулятора фазы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 11 minutes ago, EdgeAligned said: Есть такой алгоритм, как DDS. А при чём здесь прямой синтез частоты? Там ЦАП участвует. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 70 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба ЦАП он как бы и не нужен. Достаточно самого свойства DDS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 126 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 3 минуты назад, EdgeAligned сказал: Эммм... 360°/4 = 90°, вроде бы так. Сейчас на калькуляторе проверю на всякий случай 🙂 Если поменять местами X и Y - участок единичной окружности от 0 до 45 градусов превращается в участок от 90 до 45 градусов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 153 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба Если нужно формировать синус постоянной частоты, без резких разрывов фазы, то для расчета синуса нужно одно сложение и одно умножение... Без всяких таблиц. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 42 minutes ago, Сергей Борщ said: Достаточно иметь большую разрядность аккумулятора фазы Насколько большую? И сколько точек должно храниться в таблице синуса для мгновенных значений амплитуды? 45 minutes ago, Сергей Борщ said: 1/8 периода В AD9833 хранятся табличные данные только об 1/4 части синусоиды. 38 minutes ago, Arlleex said: Если нужно формировать синус постоянной частоты, без резких разрывов фазы, то для расчета синуса нужно одно сложение и одно умножение... Без всяких таблиц. Формулу можно? А лучше в виде примерчика кода))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 126 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 30 минут назад, MPetrovich сказал: Насколько большую? Честно говоря мне лень излагать здесь всю теорию прямого цифрового синтеза. Почитайте хотя бы статью Леонида Ивановича, многое станет понятным. 30 минут назад, MPetrovich сказал: В AD9833 хранятся табличные данные только об 1/4 части синусоиды. Я рад за них. А я на ATmega8 выдавал ЧМ модуляцию без разрыва фазы для передатчика используя таблицу на 1/8 периода. 30 минут назад, MPetrovich сказал: Формулу можно? А лучше в виде примерчика кода))) Ключевые слова для Яндекса - "алгоритм Герцеля", генерация синусоиды - его частный случай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба Если я верно понимаю принцип прямого синтеза, то он реализует пропуск значений амплитуды из таблицы значений кратно изменению частоты fout = (М x fc)/2n. М- число, определяющее выходную частоту, fc - тактовая частота, n - разрядность аккумлятора фазы. А разрядность аккумулятора фазы - это на сколько можно разбить период генерируемого сигнала. Чем меньше частота генерируемого сигнала, тем выше степень дискретизации. Однако, при большом объёме аккумуляторе фазы нужно иметь и большую таблицу значений амплитуды - по крайней мере, не меньше 1/4 объёма аккумулятора фазы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 126 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 15 минут назад, MPetrovich сказал: Однако, при большом объёме аккумуляторе фазы нужно иметь и большую таблицу значений амплитуды - по крайней мере, не меньше 1/4 объёма аккумулятора фазы... Нет, не обязательно. При малом размере таблицы вы можете выдавать одно и то же значение из таблицы несколько раз. Например, у вас аккумулятор фазы может быть 32-битный, но только 8 или, скажем, 6 старших бит использоваться для выборки из таблицы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 36 minutes ago, Сергей Борщ said: "алгоритм Герцеля" X[n+1] = X[n-1] — K*X[n] Это он? 16 minutes ago, Сергей Борщ said: При малом размере таблицы вы можете выдавать одно и то же значение из таблицы несколько раз. Например, у вас аккумулятор фазы может быть 32-битный, но только 8 или, скажем, 6 старших бит использоваться для выборки из таблицы. Получается, что чем меньше частота генерируемого сигнала, тем меньше разрядов аккумулятора фазы используется. И управление частотой сводится к изменению количества используемых разрядов аккумулятора фазы. Так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 126 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 8 минут назад, MPetrovich сказал: Это он? Да 8 минут назад, MPetrovich сказал: Получается, что чем меньше частота генерируемого сигнала, тем меньше разрядов аккумулятора фазы используется. И управление частотой сводится к изменению используемых разрядов аккумулятора фазы. Так? Нет. Предположим, таблица у нас на 256 значений и аккумулятор фазы 16-битный, 8 старших бит используются для выборки из таблицы. Если на каждом шаге мы будем прибавлять к аккумулятору фазы по единичке, за 65536 шагов мы обойдем всю таблицу один раз и каждое значение таблицы будет выдано по 256 раз. Если мы будем прибавлять по 5, то за 65536 шагов мы обойдем таблицу 5 раз и каждое значение таблицы будет выдано 51 или 52 раза (каждое пятое будет выдано 52 раза, а остальные 51 раз). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 206 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 1 час назад, MPetrovich сказал: Формулу можно? А лучше в виде примерчика кода))) Вы среднюю школу прогуляли что-ль? Изучается где-то в средних классах школы (ну или - раньше точно изучалась): и позволяет считать синусоиду тратя только одну MAC-операцию на сэмпл. Без всяких таблиц и прочей 8-битной чуши. И гораздо быстрее (на ARM или DSP). 100500 раз тут уже описывал это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 126 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 42 минуты назад, Сергей Борщ сказал: Если на каждом шаге мы будем прибавлять к аккумулятору фазы по единичке, за 65536 шагов мы обойдем всю таблицу один раз Дополню: Предположим, что у вас ATmega работает на частоте вот прямо ровно-ровно 16 МГц, таблица состоит из 8-битных значений и режим ШИМа обычный, то есть частота ШИМа у вас 16000000 / 256 = 62500 Гц. Также предположим, что аккумулятор фазы 32-битный. Чтобы выдать частоту 1 Гц, нужно на каждый период ШИМа увеличивать аккумулятор фазы на 0x100000000 / 62500 = ~68719.476736. Ближайшее целое будет 68719 и реальная выдаваемая частота получится 68719 / (0x100000000 / 62500) = ~0.999993063 Гц. Если на каждый период ШИМ мы будем увеличивать аккумулятор фазы на 68720 - выдаваемая частота получится 1.000007614. Меняя приращение аккумулятора фазы меняем частоту с шагом 62500 / 0x100000000 = ~0.000014552 Гц. То есть разрядность аккумулятора влияет только на точность или шаг установки частоты. Хотим получить 1000 Гц - прибавляем к аккумулятору фазы 1000 * 0x100000000 / 62500 = 68719476, реальная частота получится 68719476 * (0x100000000 / 62500) = 999.99998929 Гц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба 1 hour ago, Сергей Борщ said: Предположим, что у вас ATmega работает на частоте вот прямо ровно-ровно 16 МГц Тактовая у меня 8МГц и частота ШИМ 8000000/256=31250Гц. Исходя из Ваших выкладок: аккумулятор на 32 разряда даст точность 31250/2^32=0,0000073Гц, а 10-разрядный даст точность 31250/2^10=30,52Гц. Я взял 10 разрядов потом, что АЦП в ATMega128 выдает 10-битный результат, а на АЦП как раз и строится (по большей части) снятие напряжения потенциометра регулировки частоты. Конечно, можно поднять разрядность до 16-ти сдвинув результат преобразования влево на 6 разрядов. Это даст увеличение точности в 64 раза, т.е получим дискретность 0,477Гц. Однако, уже следующее значение аккумулятора фазы будет увеличено на 0,477*2^6=30,52Hz... Такая вот незадача... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 1 августа, 2023 Опубликовано 1 августа, 2023 · Жалоба Кажется я погорячился))) Можно же взять 16-ти битный аккумулятор и к 10-ти битному значению АЦП добавлять 64512, т.е ADC[10:0] | 0xFC00. Тогда АЦП будет использоваться полностью, а шаг частоты останется 0,477. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться