我想为基于微控制器的合成器用c ++编写音频代码,这应该允许我使用傅立叶级数方程生成采样的方波信号。
我的问题通常是:是否可以在正弦方程中设置“ x”之类的“未知”变量,然后再更改其值?
我的意思是:如果您看一下我到目前为止编写的代码,将会看到以下内容:
void SquareWave(int mHarmonics){
char x;
for(int k = 0; k <= mHarmonics; k++){
mFourier += 1/((2*k)+1)*sin(((2*k)+1)*2*M_PI*x/SAMPLES_TOTAL);
}
for(x = (int)0; x < SAMPLES_TOTAL; x++){
mWave[x] = mFourier;
}
}
在第一个for循环中,mFourier将根据谐波“ mHarmonics”的数量对加权的正弦信号求和。因此,键盘上的音符应该自动设置谐波频谱。在这个方程式中,我将x设置为字符,现在到了问题的中心,因为我想将x设置为“未知”变量,该变量的值要在之后设置,如果x为整数它会有一些标准值,例如0,这会使整个方程式不正确。
在底部循环中,我想将此傅立叶级数和写在数组mWave中,这将是结果输出。是否可以将总和赋予mWave [x],其中x是先在正弦信号内的“未知”乘法器,然后在第二个循环内更改其值?
抱歉,如果这是一个愚蠢的问题,我对c ++的经验不足,但是我尝试通过犯这些愚蠢的错误来学习它!
干杯
因此,由于无论如何我无法在Arduino IDE中使用向量,因此我尝试了以下解决方案:
...
void ComputeBandlimitedSquareWave(int mHarmonics){
for(int i = 0; i < sample_count; i++){
mWavetable[i] = ComputeFourierSeriesSquare(x);
if (x < sample_count) x++;
}
}
float ComputeFourierSeriesSquare(int x){
for(int k = 0; k <= mHarmonics; k++){
mFourier += 1/((2*k)+1)*sin(((2*k)+1)*2*M_PI*x/sample_count);
return mFourier;
}
}
...
首先,我以为这一定是对的,但是我的显示器证明我错了……听起来像是先把信号完全弄乱了,但是大约2秒钟之后,真正的特征性方波声音就通过了。如果我能隔离出最后一部分通过扬声器发出的声音,我会设法弄清我正在监督的内容,并让你们保持最新状态,因为它实际上具有非常好的声音。刚开始时只有凌乱的覆盖物使我现在绝望...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句