[an error occurred while processing this directive]
|
Интерполяция:
http://www.telesys.ru/wwwboards/dsp/49/messages/18192.shtml
Объяснение:
http://www.telesys.ru/wwwboards/dsp/49/messages/18196.shtml
Например: тактовая частота 8192Гц. Таблица 256 отсчетов. Для phase хватит 16 бит, шаг получится 8192 / 2^16 = 0,125 Гц.
Немного изменив программу SM, получим:
phase += freq * 8;
int s1 = sin_table((phase>>8) & 0xFF);
int s2 = sin_table(((phase>>8)+1)&0xFF);
unsigned int coeff = phase & 0xFF;
int sample = s1 + (((s2-s1)*coeff) >> 8);
где freq - частота в Гц.
В результате получим на верхней частоте 3400Гц 8192/3400=2.4 отсчета синуса на период. Если возможно увеличить тактовую частоту до 65536Гц, то первая строка будет phase += freq; Тогда на верхней частоте имеем 19.3 отсчета, что гораздо лучше.
E-mail: info@telesys.ru