[an error occurred while processing this directive]
|
Берется таблица синуса sin_tab[] фиксированнного размера, скажем 128. Самое простое один период синуса хранить в таблице. Алгоритм генерации синуса получается такой (24000 = частота дискретизации).
short GenSin(float Fsin)
{
static unsigned short phase_acc = 0;
unsigned short dphase = (unsigned short)(Fsin/24000 * 0x10000L);
phase_acc+=dphase;
returt sin_tab[phase_acc(right_shift)9];
}
Как справедливо отметил КАА все DDSы так работают. Понятно что синус будет не идеальным, когда точное значение dphase окажется не целым числом, те будут тн фазовые шумы. Чем больше размер таблицы тем меньше шумы.
E-mail: info@telesys.ru