如何在正弦波上添加谐波

时间:2015-02-04 18:18:38

标签: c++ signal-processing

如果没有发布整个标题和cpp文件,我会在这里生成一些生成正弦波的代码:

void CAudioGenerate::GenereateSinewave() 
{
   if(!GenerateBegin())
      return;

   short audio[2];

   for(double time=0.;  time < m_duration;  time += 1. / m_sampleRate)
   {                 
      audio[0] = short(m_amplitude * sin(time * 2 * M_PI * m_freq1));
      audio[1] = short(m_amplitude * sin(time * 2 * M_PI * m_freq1));

      GenerateWriteFrame(audio);

// Progress
      if(!GenerateProgress(time / m_duration))
         break;
   }


   // Close generator
   GenerateEnd();
}

我想添加一些将振幅减小1/2,1/3和1/4的谐波。我认为我必须改变m_amplitude,但我不完全确定哪种方法是正确的。

我考虑添加m_amplitude = m_amplitude*(1/time),但这不起作用。

1 个答案:

答案 0 :(得分:2)

谐波与幅度无关。相反,谐波是具有频率 N=2,3,4...倍的波。混合不同的波只是添加组件的问题。

因此,对于两个谐波,代码是:

audio[0] = short(m_amplitude[0] * sin(time * 2 * M_PI * m_freq1))
         + short(m_amplitude[1] * sin(time * 4 * M_PI * m_freq1))
         + short(m_amplitude[2] * sin(time * 6 * M_PI * m_freq1));