[an error occurred while processing this directive]
|
Я на счет генерации эффективной для bandlimited sawtooth хочу выступить :-)
Предлагается такой алгоритм - имеем в памяти таблицу синусов (sin) и таблицу коэффициентов гармоник пилы 1/k
Для требуемого периода пилы считаем? сколько мы себе можем позволить гармоник пилы без алиасинга - в простом случае зависит от соотношения периода пилы и частоты дискретизации на выходе. Мне кажется, порой можно больше гармоник добавить и получить в среднеквадратическом смысле более близкий к пиле сигнал, не смотря на алиасинг - короче, это можно тоже прошить в таблицу и выбирать исходя из заданного периода.
генерируем синусы частот, кратных периодам, используя прямой синтез по таблице, sawtooth сигнал получаем
sawtooh[k] += coeff*sin[k];
На мой взгляд достаточно дешево и мало памяти жрет - одна таблица синусов + N mac, где N - число гармоник. При генерации синусов (обычный DFS) можно предусмотреть всякие штуки, вроде описанных здесь (см ссылку), чтобы получить синусы с хорошим SFDR(spur-free dynamic range) ~70 dB.
В результате получите то, что Вам вроде бы и требуется - убывающие по 1/k гармоники в практически чистом спектре.
Минус этого подхода в том, что спуры ото всех гармоник будут складываться в выходном сигнале.
E-mail: info@telesys.ru