最近无聊,研究上C语言的一些程序,感觉波形生成还是挺有用的
这里主要生成了正弦,方波,三角波 ,锯齿波,指数波形等
首先看看效果,
这里把生成的数据用python画了出来,程序在最后
正弦,调用参数
wave_gen(1000,10,100,sin);
波形长度1000个(1s),频率10hz,幅值100,类型为sin
方波,调用参数
wave_gen(1000,5,0.1,squ);
波形长度1000,频率5hz,占空比10%,类型为方波
锯齿波,调用参数
wave_gen(1000,5,0.1,saw);
波形长度1000(ms),频率5hz,斜率0.1(相对于时间ms而言),波形类型为锯齿波
三角波,调用参数
wave_gen(1000,5,10,tri);
波形长度1000ms,频率5hz,斜率10(相对于时间ms而言),波形类型为三角波,其实也就是特殊的锯齿波
x/2的积分,即x^2指数函数
调用参数wave_gen(1000,5,2,inte);
波形长度1000,频率5hz,2次幂,积分(指数)波形
剩下的一些波形还有点问题,就不演示了
贴下代码
cpp
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "math.h"
#define PI 3.14159265
float *ydata,*xdata;
#define sin 0 //正弦
#define squ 1 //方波
#define saw 2 //锯齿波
#define tri 3 //三角波
#define inte 4 //积分 x^2
#define diff 5
#define gauss 6 // 高斯白噪声
void wave_gen(int len,float fre,float rate,char type){//生成波形长度ms,波形频率 ,波形参数,波形类型
int i,wave_cnt=0,wave_sw_value=1000/fre;
ydata = (float *)malloc(sizeof(float)*len);
xdata = (float *)malloc(sizeof(float)*len);
for(i=0;i<len;i++){
if(wave_cnt>=wave_sw_value) wave_cnt=0;
switch(type){
case sin:
ydata[i] = rate*sinf(2*wave_cnt*PI/wave_sw_value);
break;
case squ:
ydata[i] = wave_cnt < rate*wave_sw_value ? 1:0;
break;
case saw:
ydata[i] = rate*wave_cnt;
break;
case tri:
ydata[i] = rate*(wave_cnt>wave_sw_value/2 ? wave_sw_value-wave_cnt: wave_cnt);
break;
case inte:
ydata[i] = (pow(wave_cnt,rate));
break;
case diff:
ydata[i] = 2*wave_cnt;
break;
case gauss:
ydata[i] = (20.0 / (10 * sqrt(2.0 * 3.14159))) * exp(-((wave_cnt/1.0 - 10) * (wave_cnt/1.0 - 10)) / (2.0 * 10 * 10));
break;
}
xdata[i] = i;
wave_cnt++;
}
}
int main(){
int i=0;
wave_gen(1000,5,2,inte);
for(i=0;i<1000;i++){
printf("%.2f,",ydata[i]);
}
return 0;
}