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

Posted

技术标签:

【中文标题】在缓冲区中添加 2 个正弦波会产生噪音【英文标题】:Adding 2 sine waves in buffer creates noise 【发布时间】:2012-11-25 19:33:57 【问题描述】:

当我将 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;
    

【问题讨论】:

你认为不应该出现什么较低的频率?你会得到一个 2KHz 分量和一个 22KHz 分量。 @HotLicks 为什么要有这些组件?即使您正在考虑将 sum 转换为三角函数的乘积,我们也根本不会讨论这个问题。 首先检查它是否仅在一个频率下正常工作。然后添加两个频率,但将两个幅度除以 2。您可能会达到某个阈值,这会增加失真并因此增加低频谐波(这些将是 Hot Licks 正在谈论的组件,嗯,尤其是较低频率的)。跨度> @HotLicks 你是怎么计算出来的?我可以说 10 以上的频率我几乎听不见,而不是当他们在一起时我听到了强烈的噪音,我猜它的频率大约是 2-7khz 或什么的 @gniourf_gniourf 我写道,我已经检查过了,并且它们单独工作得很好。我会减少放大器非常感谢。 【参考方案1】:

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

我把每一个的振幅都设置为0.5,所以最大值为1,就解决了问题。

【讨论】:

以上是关于在缓冲区中添加 2 个正弦波会产生噪音的主要内容,如果未能解决你的问题,请参考以下文章

正弦信号怎么变成方波信号,需要怎么处理?

LabVIEW软件中,正弦信号与正弦波的区别

在同一个 AVAudioPCMBuffer 中改变正弦波频率

Matlab的正弦波相位谱

方波,正弦波,三角波信号是如何产生的

生成的正弦波 pcm 声音中的静态噪声