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

波形合成之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.xdnf.cn/news/13404.html

相关文章:

  • NuGet 从入门到精进全解析
  • Intel Boot Guard
  • 系统集成自动化流程编排实现条件分支高级篇(二)
  • 实战使用docker compose 搭建 Redis 主从复制集群
  • 依存句法分析
  • Cockpit:一个开源的 Linux 系统管理工具
  • 蚁群算法(Ant Colony Optimization)原理与应用解析
  • (功能测试Charles)如何抓取手机http的报文
  • 2025神经网络动力学理论、优化算法及应用专题研讨会 ( NOTAA 2025)
  • 裸金属服务器+可信计算:构建自主可控的数据安全新底座
  • 【无标题】NP完全问题的拓扑对偶统一解法 ——四色问题到P=NP的普适框架
  • 篇章四 论坛系统——业务开发——前期准备——公共组件
  • 数据库连接池——关键技术点介绍
  • 亚马逊 API 接口开发:解锁商品详情页实时数据(接入流程解析)
  • Django中的ORM的使用步骤----以MySQL为例
  • 湖北理元理律师事务所债务优化实践:法律框架下的生活重建方案
  • 一台电脑最多能接多少个硬盘
  • 网络编程(数据库:SQLite)
  • 英一真题阅读单词笔记 09年
  • 【编译工具】(版本控制)Git + GitHub Actions:自动化工作流如何让我的开发效率提升200%?
  • HDFS 使用原生连接器连接 S3 对象存储
  • leetcode234-回文链表
  • 美团NoCode设计网站的尝试经验分享
  • 【国产达梦数据库】jdbc的驱动细微差异都会导致服务启动不了
  • Linux(Centos 7.6)命令详解:whoami
  • 【linux命令实践】
  • leetcode 768. 最多能完成排序的块 II
  • wordpress搬家 数据库备份迁移
  • python里的PDFMiner.six 库介绍
  • Vue-Typed-JS打字动画效果