я генерации синусоидальной волны с использованием следующего метода -синусоидальной волны генерации с использованием фазы
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. Может кто-нибудь объяснить, что здесь происходит?
Если вас интересует XCode, вам нужно сообщить нам, какие типы имеют разные переменные. Это может показаться чем-то. Как бы то ни было, я могу видеть только тип «temp». –
Hi Peter, PI объявлен как двойной, а theta in float. Я изменил theta на double, и код генерирует сигнал 8K без искажений. Благодаря! – Naveen
Приятно слышать. Я собираюсь закрыть этот вопрос как не относящийся к теме, и перенести его в SO. –