本文共 1633 字,大约阅读时间需要 5 分钟。
1.正弦波
int GenSineWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 sineWave[]) { int i=1; for(;i<=numElements;++i) sineWave[i-1] = amplitude*sin(PI/180.0*(*phase+360.0*frequency*i)); *phase = fmod(*phase+frequency*360.0*numElements,360.0); return 0; }注:frequency=1/numElements;
2.方波
int GenSquareWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 dutyCycle, float64 squareWave[])
{ int i=0;for(;i<numElements;++i)
{ float64 phase_i=fmod(*phase+360.0*frequency*i,360.0); squareWave[i] = phase_i/360.0<=dutyCycle/100.0 ? amplitude : -amplitude; } *phase = fmod(*phase+frequency*360.0*numElements,360.0); return 0; }3.锯齿波
int GenSawtoothWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 sawtoothWave[]) { int i=0;for(;i<numElements;++i) {
float64 phase_i=fmod(*phase+360.0*frequency*i,360.0); float64 percentPeriod=phase_i/360.0; float64 dat=amplitude*2.0*percentPeriod;sawtoothWave[i] = percentPeriod<=0.5 ? dat : dat - 2.0*amplitude;
} *phase = fmod(*phase+frequency*360.0*numElements,360.0); return 0; } 4.三角波int GenTriangleWave(int numElements, float64 amplitude, float64 frequency, float64 *phase, float64 triangleWave[])
{ int i=0;for(;i<numElements;++i) {
float64 phase_i=fmod(*phase+360.0*frequency*i,360.0); float64 percentPeriod=phase_i/360.0; float64 dat=amplitude*4.0*percentPeriod;if( percentPeriod<=0.25 )
triangleWave[i] = dat; else if( percentPeriod<=0.75 ) triangleWave[i] = 2.0*amplitude - dat; else triangleWave[i] = dat - 4.0*amplitude; } *phase = fmod(*phase+frequency*360.0*numElements,360.0); return 0; }转载地址:http://hpwnz.baihongyu.com/