当前位置: 首页 > 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];}
}

生成波形

相关文章:

  • 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 动态封禁教程
  • 一个dede管理两个网站/武汉seo网站优化技巧
  • 做网站不实名认证可以吗/360免费建站系统
  • 建设网站长沙/关键词排名快照优化
  • 做博物馆网站最重要性/青山seo排名公司
  • 高端网站建设报价/如何推广app
  • 外包网站开发价格/百度指数查询工具