在缓冲区中添加2个正弦波会产生噪音

时间:2012-11-25 19:33:57

标签: objective-c ios audio signal-processing

当我将10 kHz的正弦波添加到12 kHz的另一个并从iPhone扬声器一起输出时,我可以听到其他不应该存在的低频率。

为此,我创建一个正弦波并用样本填充缓冲区,然后将另一个正弦波的样本添加到缓冲区。

这些单独的正弦波中的每一个都是单独正常工作的,但当它们组合在一起时,我可以听到以前不存在的失真。

这是我的回调代码:

for (int i = 0; i <inNumberFrames; i++)
{

    buffer[i] = buffer[i]+ sin(theta12_8) * myInstance->amplitude;
    theta12_8 += 2.0 * M_PI * 12800  / (myInstance->sampleRate); 
    if (theta12_8 > 2.0 * M_PI)
    {
        theta12_8 -= 2.0 * M_PI;
    }
}

for (int i = 0; i <inNumberFrames; i++)
{

    buffer[i] = buffer[i]+ sin(theta10) * myInstance->amplitude;
    theta10 += 2.0 * M_PI * 10000  / (myInstance->sampleRate);;
    if (theta10 > 2.0 * M_PI)
    {
        theta10 -= 2.0 * M_PI;
    }
}

1 个答案:

答案 0 :(得分:0)

如果您将正弦波设置为幅度1,那没关系。 如果你将2个正弦波加在一起,那么新的最大幅度可以是2,这个数字是错误的,并产生失真和谐波。

我已经将幅度设置为0.5,因此最大值为1,它解决了问题。