sin, mega8535, AD7524 и WinAVR. Как реализовать синусоиду?

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Сообщение ARV »

Yellow Tiger писал(а):С одной стороны, никто не мешает брать значения из заранее рассчитанной таблицы не подряд, а через 1, через 2, через 3, уменьшая дискретность, а если частоты выдачи некратны, то подготовить разные таблицы синуса.
...
Так-что - синус должен быть табличным и только!
...
PS А, кстати, мысль, что этот "перестраиваемый" генератор между двумя "соседними" частотами будет молча проскакивать половину своего диапазона - показалась несущественной?
во-первых, для перестраиваемого генератора, кроме как метод непосредственного цифрового синтеза (DDS), ничего и не придумать. отсюда во-вторых: синус только в таблице (к этому уже как бы пришли). далее в-тертьих: никаких провалов не будет, т.к. DDS позволяет получать сколь угодно малый шаг изменения генерируемой частоты во всем диапазоне, хоть миллигерцы, однако проблема максимальной частоты при этом встает с еще большей остротой.

итак, думаю, споры можно прекратить. Хороший генератор был сделан Леонидом Ридико - статьи об этом имеются (ищите), алгоритм там вылизан дальше некуда (ассемблер). сократив разрядность семпла до 1 байта можно увеличить выходную частоту, как я предполагаю, до 100 или чуть больше килогерц, но это явный потолок для AVR.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Реклама
Аватара пользователя
Yellow Tiger
Сверлит текстолит когтями
Сообщения: 1148
Зарегистрирован: Вт июл 08, 2008 12:24:17

Сообщение Yellow Tiger »

ARV писал(а):...далее в-тертьих: никаких провалов не будет, т.к. DDS позволяет получать сколь угодно малый шаг изменения генерируемой частоты во всем диапазоне, ...
Сейчас уже не припомню, как именно я сделал вывод о том, что речь идет не о генерации по приращению фазы, а о генерации по амплитудным отсчетам. Вероятно к этому решению я пришел по сумме нескольких высказываний автора и обстоятельств. :)
В частности: насколько я понимаю, чтобы обеспечить действительно малый шаг сетки частот, придется либо держать в памяти много разных таблиц (этакий частотный нониус) или одну, но оочень большую - чтобы для самой низкой частоты нашлись все нужные отсчеты на каждый такт выдачи, либо все же на ходу пересчитывать текущее значение фазы сигнала в его форму - на этом пути даже для синуса поджидают ограничения по производительности, а если сигнал с многими гармониками (не пила, разумеется, и не другая какая-либо, кусочно-линейная :)))), то уж и вовсе беда.
Для меги8535, с её восемью Кб памяти и шестнадцатью MIPS'ами, оба ограничения существенны. Пример: для диапазона 10Гц-60кГц, при числе отсчетов на самой высокой частоте, равном 32-ум, таблица будет иметь 192000 значений. С учетом симметрии синуса - 192000/4 = 48000 значений. Что в мегу8535 не впихнуть никак.
Вот так, видимо. Вы согласны?

Добавлено:
Вот подумал, что при отказе от членов разложения третьего и более высоких порядков можно сделать таблицу синуса меньшей в несколько раз. То есть - берем из таблицы два значения с фазами, ближайшими к текущей фазе, и из этих двух амплитуд получаем среднюю (взвешенную, разумеется). Учитывая наличие аппаратного умножителя в меге8535, этот довесок может оказаться не таким уж и тормозом, а может и оказаться. Это уже на конкретном коде проверять рассчетами надо...

Добавлено 4 мая:
Приник к первоисточникам и обнаружил, что сокращение разрешения по фазе (оно же - уменьшение размера таблиц) не так уж и сильно искажает сигнал. В частности, утверждается, что уровень эквивалентного шума, в случае с уменьшением разрядности накопителя фазы с 24 бит до 8, составит -48дБ. Речь, разумеется, только о синусе, но все равно, обнадеживающий результат. То есть, множество конструкций в инете, имеющих таблицы сигналов размером 256 байт, не такие уж и игрушки.
Спасибо, что обратили внимание, ARV.
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»