Я генерирую синусоиду, используя следующий метод:
sampling rate = 22050;
theta = 0;
for (i = 0; i < N; i++)
{
theta = phase * 2 * PI;
signal[i] = amplitude * sin(theta);
phase = phase + frequency/sampling rate;
}
Когда я генерирую сигнал с частотой 8000 Гц, на выходе есть искажения. Частоты ниже этого (например, 6000 Гц) генерируются правильно. Сигнал 8000 Гц генерируется правильно, если я проверяю фазу следующим образом:
if (phase > 1)
{
float temp = phase - 1;
phase = temp;
}
Я думаю, что это как-то связано с синусоидальной функцией в Xcode, возможно, с диапазоном значений, которые она может принять? Один и тот же код с наложением фаз и без него не имеет разницы в Matlab. Может кто-нибудь объяснить, что здесь происходит?
temp
. - person Peter K.   schedule 23.03.2016