如何将谐波添加到正弦波中
How to Add Harmonics to Sine Waves
在不发布整个头文件和 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)
,但没有成功。
谐波与振幅无关。相反,谐波是 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));
在不发布整个头文件和 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)
,但没有成功。
谐波与振幅无关。相反,谐波是 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));