单片机如何生成周期正弦波

news2024/10/6 18:27:05

一,简介

在某些场景需要使用单片机的IIS等外设播放正弦波音频数据。本文介绍一种“笨方法”来生成固定频率和固定幅度的正弦波定点型数据,记录总结学习使用。

二,步骤简介

总体步骤概述:
1,使用Audition生成制定波形,并转成pcm格式;
2,写个main函数将所需要的数据读取并打印,然后运行重定向到txt中;
3,将txt中的数据复制到IIS的播放buffer中进行播放即可;

本篇文章使用采样率48K,幅值-6db ,频率1KHz的正弦信号来距离说明。

2.1 使用Audition生成制定波形,并转成pcm格式

打开Audition,生成音调:
在这里插入图片描述
新建音频文件,点击确定:
在这里插入图片描述
设置波形信号开始的频率和幅值:
在这里插入图片描述
设置波形信号结束的频率和幅值:
在这里插入图片描述
点击“确定”,一个立体声的指定音源就做好了:
在这里插入图片描述
使用Audition快捷键“Alt+Z”查看生成波形信号频率,点击“扫描选区”看到左右声道的频率都是1KHz:
在这里插入图片描述
将当前的浮点型数据转换成定点数据,使用快捷键“Ctrl + S”,将文件另存为.pcm格式,并保存到指定的路径:
在这里插入图片描述

至此,我们的音源文件已经生成并准备完毕。

2,写个main函数将所需要的数据读取并打印,然后运行重定向到txt中

main函数代码如下所示:
这里IN_32BITPCM_FILE使用刚才生成的pcm文件;
DATA_SAMPLE_LEN设置为96,原因是因为1KHz频率周期是1ms,48K采样率1ms采样点个数为48,又因为是立体音,所以这里读取96个采样点。

#include <stdio.h>

#define IN_32BITPCM_FILE "-6db_1K_48KSr.pcm"
#define READ_DATA_SAMPLE_LEN    96

int main()
{
	int ret = -1;
	FILE *fp = NULL;
	int buffer[192] = {0};

	fp = fopen(IN_32BITPCM_FILE,"rb");
	if(fp == NULL) {
		printf("%s: open file failed \n",__func__);
		return -1;
	}

	fseek(fp,0,SEEK_SET);
	ret = fread(buffer,sizeof(char),READ_DATA_SAMPLE_LEN*sizeof(buffer[0]),fp);
	if(ret <=0 ) {
		printf("%s: ERROR:read file data failed \n",__func__);
		fclose(fp);
		return -1;
	}

	for(int i=0; i< READ_DATA_SAMPLE_LEN; i++){
		printf("0x%08X, ", buffer[i]);
		if(((i+1)%8) == 0){
			printf("\n");
		}
	}
	fclose(fp);

	return ret;
}

打开MINGW64把刚才的main函数进行编译,默认生成a.exe:
在这里插入图片描述
运行a.exe并把打印输出结果重定向到test.txt:
在这里插入图片描述
打开test.txt查看生成的正弦波定点数据,发现我们想要的数据已经整齐的排列好:
在这里插入图片描述

2.3 接下来就把这些数据拷贝到指定的数组中

备注:为了使生成的数据和音频播放的缓存buffer进行匹配,这里可将该周期数据多复制几份,然后循环从存放生成完整周期的数据的数组中去取数据复制到音频播放的缓存数组即可。

三,总结

本文主要介绍了一种笨方法生成定点数据的正弦波,供参考使用。后续会介绍如何使用CORDIC算法生成各种频率和幅值及采样率的正弦波形。欢迎一起讨论交流~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/668738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python异常捕获存在的问题

Python 异常捕获存在的问题 作为一门广受欢迎、应用广泛的编程语言&#xff0c;Python 在处理异常方面有着比较完善的设计。Python 提供了 try…except…finally 这样的异常处理机制&#xff0c;通过这些机制&#xff0c;开发者可以捕获、处理程序中产生的异常&#xff0c;从而…

【安全】awvs安装(一)

目录 一、简介 二、将安装文件传输到服务器 三、安装 3.1 赋权 3.2 执行安装 四、激活 4.1 复制激活文件到对应安装目录 4.2 赋权 4.3 运行激活文件 五、访问 六、设置不自动更新 七、设置开启 八、忘记密码 前言&#xff1a;安全漏洞扫描工具awvs的安装使用 一、简介…

Android DiskLruCache完全解析,硬盘缓存的最佳方案

概述 LruCache只是管理了内存中图片的存储与释放&#xff0c;如果图片从内存中被移除的话&#xff0c;那么又需要从网络上重新加载一次图片&#xff0c;这显然非常耗时。对此&#xff0c;Google又提供了一套硬盘缓存的解决方案&#xff1a;DiskLruCache(非Google官方编写&…

Nginx基础配置

Nginx的基础配置&#xff1a; Nginx的基础配置 一、实战案例&#xff1a;1.Nginx访问统计&#xff1a;2.基于授权的访问控制&#xff1a;3.基于客户端访问设置&#xff08;设置黑白名单&#xff09;&#xff1a;4.基于域名的nginx虚拟主机&#xff1a;5.基于IP的nginx虚拟主机…

算法分析02--分治法

3.分治法 3.1递归 递归是指子程序&#xff08;或函数&#xff09;直接调用自己或通过一系列调用语句间接调用自己&#xff0c; 是一种描述问题和解决问题的常用方法。使用递归技术往往使函数的定义和算法的描述简洁且易千理解。 递归有两个基本要素&#xff1a;边界条件&…

告别固定字体大小:CSS使用相对单位提升网页可访问性和兼容性

在 Web 开发领域中&#xff0c;有很多误解流传&#xff0c;即使它们被反驳了很多次也仍然存在。"外部链接应该总是在新标签页中打开" 就是一个很好的例子。CSS Tricks 在将近十年前就对此进行了详细的解释&#xff08;简而言之&#xff1a;大多数情况下是错误的&…

沃尔玛、亚马逊跨境境电商如何实现自养账号采退、海淘及测评的

今天曹哥还是针对下亚马逊、沃尔玛跨境平台如何实现自己养买家号可以给自己采购、海淘及测评等技术问题 首先你要有一个稳定的环境方案&#xff0c;这个是做自养号采购、海淘及测评的基础。环境有很多&#xff0c;从早期的虚拟机&#xff0c;模拟机&#xff0c;云手机&#xf…

MATLAB | 绘图复刻(十) | 旋转45度的相关系数热图绘制

我们在论文里经常能见到这样三角形的相关性热图&#xff0c;这样的热图绘制出来会更节省空间&#xff1a; 这期就教大家如何绘制三角形的热图&#xff0c;绘制效果如下&#xff1a; 以下是教程部分&#xff1a; 0 数据准备 这里随便生成了一组数据&#xff0c;计算了相关系数&…

C++——vector迭代器失效与深浅拷贝问题

目录 1. vector迭代器失效问题 1.1 insert迭代器失效 1.1.1 扩容导致野指针 1.1.2 意义变了 1.1.3 官方库windows下VS和Linux下对insert迭代器失效的处理 1.2 erase迭代器失效 1.2.1 失效原因分析 1.2.2 官方库windows下VS和Linux下对erase迭代器失效的处理 1.2.3 测试…

0基础学习VR全景平台篇第46篇:底部菜单- 【开场地图】与【高清矩阵】的对比

大家好&#xff0c;欢迎观看蛙色VR官方——后台使用系列课程&#xff01; 这期 &#xff0c;我们将为大家讲解蛙色VR平台-【开场地图】与【高清矩阵】功能的区别 功能位置示意 一、功能具体应用 开场地图分为两种&#xff0c;分别是高德地图和手绘地图。 高德地图点位目前系统…

【Linux】MySQL 存储引擎

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MySQL 存储引擎 MyISAM 表支持 3 种不同的存储格式常用存储引擎&#xff1a;InnoDB、MyISAM查看系统支持的存储引擎查看表使用的存储引擎修改存储引擎死锁如何尽可能避免死锁…

每日学术速递6.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.The ObjectFolder Benchmark: Multisensory Learning with Neural and Real Objects(CVPR 2023) 标题&#xff1a;ObjectFolder 基准测试&#xff1a;使用神经和真实对象进行多感官…

计算机网络管理- SNMP协议报文和报文格式分析,SNMP PDU分析

⬜⬜⬜ &#x1f430;&#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;(*^▽^*)欢迎光临 &#x1f7e7;&#x1f7e8;&#x1f7e9;&#x1f7e6;&#x1f7ea;&#x1f430;⬜⬜⬜ ✏️write in front✏️ &#x1f4dd;个人主页&#xff1a;陈丹宇jmu &am…

【玩转Linux操作】Linux服务管理

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;服务(service)管理⭐service管理指令 &…

《网络安全0-100》网络安全技术

网络安全技术 防火墙 入侵检测系统 防火墙(Firewall)是一种网络安全设备&#xff0c;用于监控和控制网络流量&#xff0c;以保护网络免受未经授权的访问和攻击。防火墙通过过滤网络流量&#xff0c;阻止潜在的攻击流量进入网络。它可以实现基于端口、协议、IP地址和应用程序的…

chatgpt赋能python:Python指定日期的后一天:介绍与解析

Python指定日期的后一天&#xff1a;介绍与解析 Python是广泛使用的编程语言之一&#xff0c;在数据科学、机器学习、人工智能和网络开发等众多领域都有重要的应用。本文将要讨论的问题是&#xff1a;如何使用Python来获取一个指定日期的后一天&#xff1f;这个问题看似简单&a…

QT找不到python27.dll或python36.dll解决办法

缺少python27.dll 点开QT时出现上述问题&#xff0c;一种方法就是找python27.dll文件进行替换。 1.进入网站下载相关文件 windll.com/dll/python-… 2.之后将文件移动到下面的路径里&#xff0c;C:\Windows\SysWOW64\ 3.然后重启 试了4种方案&#xff0c;把32位放在System32…

【操作系统】哲学界进餐问题实现

目录 实验原理&#xff1a; 实验目的&#xff1a; 实验数据及结果分析&#xff1a; 实验原理&#xff1a; 哲学家进餐问题可以通过限制同时进餐人数为4解决&#xff0c;为此需要设置一个值为4的互斥信号量sem_eaters,并且每根筷子只能同时由一个人使用&#xff0c;需要设置…

kafka的初步认识

什么是Kafka&#xff1f; Kafka的增长很快。财富500强企业中超过三分之一使用卡夫卡。这些公司包括十大旅游公司&#xff0c;十大银行中的七家&#xff0c;十大保险公司中的八家&#xff0c;十大电信公司中的九家&#xff0c;等等。LinkedIn&#xff0c;微软&#xff08;Micro…

【CV 向】如何打造一个“数串串神器“

导言 最近&#xff0c;我看到了这样一个视频&#xff0c;觉得很有意思&#xff0c;就随手保存下来了。&#x1f601;&#x1f601;&#x1f601; 之前吃串串火锅&#xff0c;老板数竹签不是称重就是用手慢慢数&#xff0c;但是称重似乎总是得不到正确的竹签数目&#xff0c;而…