当前位置: 首页 > news >正文

波形合成之C语言实现

正弦波波形合成

void sinwave(int* dout,int genlen,int freq,int fs,float tzsd,uint32_t addr)
{int C   ;float s_amp=tzsd/(tzsd+1.0);float c_amp=1.0/(tzsd+1.0);C=32767*0.9;int sintab [65536];float freq_guiyihua = ((float)freq)/((float)fs);int zhouqihua = (int)(freq_guiyihua*65536);int i;for (i = 0; i < genlen; i++) {sintab[i]=(int)(sin((PI*2*i*(zhouqihua/65536.0)))*pow(2,15))*0.8;dout[i]  =   sintab[i]* s_amp + C*c_amp;*(volatile u32 *)(XPAR_BRAM_0_BASEADDR+(addr*4)) = dout[i];}
}

生成的数据

方波合成

//方波合成函数
void squareWare(int* dout,int genlen,int freq,int fs,float tzsd,uint32_t addr)
{int C   ;float s_amp=tzsd/(tzsd+1.0);float c_amp=1.0/(tzsd+1.0);C=32767*0.9;int sintab [65536];float freq_guiyihua = ((float)freq)/((float)fs);int zhouqihua = (int)(freq_guiyihua*65536);printf("\r\n");printf("%d",zhouqihua);printf("\r\n");int i;for ( i = 0; i < genlen; i++){sintab[i]= i*(zhouqihua/65536.0);if(sin((PI*2*i*(zhouqihua/65536.0))) >=0){sintab[i]=(int)(pow(2,15))*0.8;}else{sintab[i]=-(int)(pow(2,15))*0.8;}dout[i]  =   sintab[i]* s_amp + C*c_amp;*(volatile u32 *)(XPAR_BRAM_0_BASEADDR+(addr*4)) = dout[i];}
}

生成波形

三角波合成

//三角波合成函数
void triangularWave(int* dout,int genlen,int freq,int fs,float tzsd,uint32_t addr)
{int C   ;float s_amp=tzsd/(tzsd+1.0);float c_amp=1.0/(tzsd+1.0);C=32767*0.9;int sintab [65536];double temp = 0; 	//表示弧度double radian = 0;	//取余之后的弧度值float freq_guiyihua = ((float)freq)/((float)fs);int zhouqihua = (int)(freq_guiyihua*65536);int i;for ( i = 0; i < genlen; i++) {temp = (PI*2*i*(zhouqihua/65536.0));radian = fmod(temp, 2.0*PI);if(radian > 0) 						//当角度取余在 0~2pi之间时{if(radian<=PI/2){sintab[i]=(int)(pow(2,15))*0.8*(radian/(PI/2)); }else if(radian > PI/2 && radian <= PI*3/2) {sintab[i]=(int)(((double)(-2/PI)*radian+2)*pow(2,15)*0.8);}else if(radian <= PI*2){sintab[i]=(int)(((double)(2/PI*radian-4)*pow(2,15))*0.8);}}else if(radian == 0)			//当角度为PI的整数倍时{sintab[i] = 0;}dout[i]  =   sintab[i]* s_amp + C*c_amp*0;*(volatile u32 *)(XPAR_BRAM_0_BASEADDR+(addr*4)) = dout[i];//寰€ 1204鍦板潃鍙戦€?}
}

生产波形

锯齿波生产

//锯齿波合成函数
void sawtoothWave(int* dout,int genlen,int freq,int fs,float tzsd,uint32_t addr)
{int C   ;float s_amp=tzsd/(tzsd+1.0);float c_amp=1.0/(tzsd+1.0);C=32767*0.9;int sintab [65536];double temp = 0; 	//表示弧度double radian = 0;	//取余之后的弧度值float freq_guiyihua = ((float)freq)/((float)fs);int zhouqihua = (int)(freq_guiyihua*65536);int i;for ( i = 0; i < genlen; i++) {temp = (PI*2*i*(zhouqihua/65536.0));radian = fmod(temp, 2.0*PI);if(radian >= 0) 						//当角度取余在 0~2pi之间时{sintab[i]=(int)(((double)(1/PI)*radian-1)*pow(2,15)*0.8);}dout[i]  =   sintab[i]* s_amp + C*c_amp;*(volatile u32 *)(XPAR_BRAM_0_BASEADDR+(addr*4)) = dout[i];//寰€ 1204鍦板潃鍙戦€?}
}

噪声合成

void noiseWave(int* dout, int genlen, int freq, int fs, float tzsd, uint32_t addr)
{int C   ;float s_amp=tzsd/(tzsd+1.0);float c_amp=1.0/(tzsd+1.0);C=32767*0.9;int sintab [65536];double temp = 0; 	//表示弧度double radian = 0;	//取余之后的弧度值float freq_guiyihua = ((float)freq)/((float)fs);int zhouqihua = (int)(freq_guiyihua*65536);int i;for ( i = 0; i < genlen; i++) {// 生成随机数 [0, RAND_MAX] → 转换为 [-1.0, 1.0]float rand_val = (rand() / (float)RAND_MAX) * 2.0f - 1.0f;// 应用幅度控制(tzsd 直接控制噪声强度)float noise = rand_val * tzsd;// 转换为整数样本(匹配 int 类型输出)float noise_sample = noise*pow(2,15)*0.8;// 写入输出数组dout[i]  =   noise_sample* s_amp + C*c_amp;printf("%.2f\r\n",noise_sample);// 写入BRAM(地址按顺序递增)*(volatile u32 *)(XPAR_BRAM_0_BASEADDR+(addr*4)) = dout[i];}
}

生成波形

http://www.dtcms.com/a/243990.html

相关文章:

  • centos7 安装 zabbix6 -proxy
  • 亚马逊 API 接口开发:解锁商品详情页实时数据(接入流程解析)
  • echarts 地图 海南省全岛完整展示
  • Linux文件回收机制:安全删除文件不怕误删
  • CLIP多模态模型详解
  • UR机械臂配置moveit_config和moveit_servo​(保姆级教程)
  • Linux 任务调度策略
  • Project Reactor响应式编程简介
  • Leetcode刷题(91~95)
  • 商品中心—3.商品可采可补可售的技术文档上
  • 与AI联手,ModbusTCP 转Ethercat控制系统升级解决刚需新思路
  • MyBatis-Plus 混合使用 XML 和注解
  • 一个教学项目pom.xml杂记
  • DevOps软件开发流程规范
  • 【笔记】NVIDIA AI Workbench 中安装 PyTorch
  • 山东大学软件学院项目实训-基于大模型的模拟面试系统-面试对话标题自动总结
  • 【计算机存储架构】层次化存储架构
  • JAVA-springboot Filter过滤器
  • Amazon Linux 2023 系统上 Radius 部署文档
  • 1Panel 部署 OpenResty + Redis 实现 IP 动态封禁教程
  • gbase8s数据库获取jdbc/odbc协议的几种方式
  • 合同管理登记台账是什么?合同管理登记台账有哪些功能?
  • 基于GA遗传优化的PID控制器最优控制参数整定matlab仿真
  • Matlab解决无法读取路径中的空格
  • 前端实战:用 HTML+JS 打造可拖动图像对比滑块,提升视觉交互体
  • 硬件行业职业规划四篇
  • (功能测试Charles)如何抓取手机http的报文
  • 软件测试之基于博客系统项目的功能测试
  • 解锁Flink CDC:实时数据同步秘籍
  • 速盾:高防CDN可以加速数据库吗?