C语言生成常见波形数据

最近无聊,研究上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;
}

同时也上传仓库了:opencaneve: 开源STM32HAL ESP8266 ESP32 python Android Windows把我学习到的以及找到的可以用的代码分享出来python记录打卡信息 ESP32蓝牙鼠标 开源windows串口助手 - Gitee.com

相关推荐
Cc.Y3 小时前
Java零基础入门:字符串深度掌握——从基础API到StringBuilder性能优化
java·开发语言·性能优化
java资料站7 小时前
十一、评估测试
开发语言·人工智能·python
左手の明天7 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
海上小飞龙8 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
朝朝辞暮i8 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网8 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术8 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
八解毒剂9 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
小灰灰搞电子9 小时前
C语言 <ctype.h> 头文件详解
c语言·ctype.h
FakeOccupational9 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记