esp32使用fft算法显示音乐频谱

2023-10-27

演示参考下方视频

介绍

  • 本项目使用esp32s3,ifd4.2,声音传感器以及tft显示屏构成
  • 使用快速傅里叶变换算法处理采集到的音频数据
  • fft处理后的数据使用lvgl显示在tft屏幕上

电路图

源码

void FFT_Task(void *arg)
{
	static int8_t i2s_readraw_buff[1024];
	size_t bytesread;
	int16_t *buffptr;
	int16_t *samples_sc16 = (int16_t *)i2s_readraw_buff;
	float *samples_fc32 = (float *)calloc(SAMPLES_NUM, sizeof(float));
	double data = 0;
	i2s_init();

	while (1)
	{
		if (fft_en == 1)
		{

			i2s_read(I2S_NUM_0, (char *)i2s_readraw_buff, SAMPLES_NUM * 2, &bytesread, (100 / portTICK_RATE_MS));
			
			fft_config_t *real_fft_plan = fft_init(512, FFT_REAL, FFT_FORWARD, NULL, NULL);
			buffptr = (int16_t *)i2s_readraw_buff;
			for (uint16_t count_n = 0; count_n < real_fft_plan->size; count_n++)
			{
				real_fft_plan->input[count_n] = (float)map(buffptr[count_n], INT16_MIN, INT16_MAX, -1000, 1000);
			}
			fft_execute(real_fft_plan);
			for (uint16_t count_n = 1; count_n < CANVAS_HEIGHT; count_n++)
			{
				data = sqrt(real_fft_plan->output[2 * count_n] * real_fft_plan->output[2 * count_n] + real_fft_plan->output[2 * count_n + 1] * real_fft_plan->output[2 * count_n + 1]);
				fft_dis_buff[CANVAS_HEIGHT - count_n] = map(data, 0, 2000, 0, CANVAS_HEIGHT);
			}
			fft_destroy(real_fft_plan);

			for (uint16_t count_y = 0; count_y < CANVAS_HEIGHT;)
			{
				lv_chart_set_next(chart_fft, series_fft, fft_dis_buff[count_y]);
				count_y += 5;
			}
		}
		else
		{
			i2s_driver_uninstall(I2S_NUM_0);
			vTaskDelete(NULL);
		}
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

esp32使用fft算法显示音乐频谱 的相关文章

  • 【卡尔曼滤波】具有梯度流的一类系统的扩散映射卡尔曼滤波器研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码 数据 文章
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表
  • 如何计算 DFT 中每个 bin 的能量?

    我正在测试我对离散傅里叶变换的了解 我现在测试的是如何使用DFT计算波的中心频率 为此 我使用以下代码创建正弦数据 create a 100 Hz wave with a sampling rate of 512 samples per s
  • 【一种新的Burton-Miller型奇异边界方法(BM-SBM)】用于声学设计灵敏度分析,2D和3D声学设计灵敏度分析的奇异边界方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 2D 2 2 3D
  • MATLAB 中的反向谱图 A La Aphex Twin

    我正在尝试将图像视为频谱图 从而在 MATLAB 中将图像转换为音频信号就像 Aphex Twin 的歌曲中那样舔窗者 http www bastwood com aphex php 不幸的是 我很难得到结果 这是我现在所拥有的 funct
  • 使用 C 编程频谱图 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试用 C 语言制作音频频谱图
  • 如何在 FFTW 库中进行实数反演 FFT

    我正在尝试使用 FFT 进行一些过滤 我正在使用 r2r 1d 计划 但我不知道如何进行逆变换 void PerformFiltering double data int n FFT double spectrum new double n
  • 傅立叶级数数据与 numpy 的拟合:fft 与编码

    假设我有一些数据 y 我想对其进行傅立叶级数拟合 对此post https stackoverflow com questions 4258106 how to calculate a fourier series in numpy 解决方
  • 如何在 R 中执行*快速* DCT(离散余弦变换)?

    使用 Rprof 发现 dtt 包中的 dct 是一段运行速度相当缓慢的 R 代码中的主要罪魁祸首 将其替换为 stats 包中的 fft 这不是相同的转换 但应该花费相同的时间来计算 我的运行时间显着提高 事实上 我的 Rprof 线路中
  • 对真实输入数据进行高效的 2D FFT?

    我目前正在使用 opencl 对真实输入数据实现二维 FFT 更具体地说是使用 FFT 的快速 2D 卷积 所以我只需要一些行为足够相似的东西来应用卷积 2D FFT 是在行上使用 1D FFT 然后在列上使用 1D FFT 来实现的 为了
  • ESP32 上的 Web 服务器:如何自动更新和显示来自服务器的传感器值?

    我在 ESP32 上有一个网络服务器 在该服务器上有一个主页 我想每隔 x 秒自动更新主页上的传感器值 无需用户输入 我无法访问文件系统 该传感器直接连接到 ESP32 传感器值位于我的 C 程序中 存储在变量中并定期更新 变量是全局的 以
  • 在 Android 上查找音调

    如何从我的语音记录中找到最小 最大 平均 标准偏差音调 我使用 AudioRecord 来录制我的声音 frequency 8000 channelConfiguration AudioFormat CHANNEL CONFIGURATIO
  • 将变量从 Activity 传递到自定义视图类

    我正在测试使用将音频绘制到画布中canvas drawLine 方法 我能够在画布上进行静态绘制 基本上我有一个测试应用程序 它有两个按钮 开始 和 停止 和一个画布 我试图在其中绘制从 FFT 获得的音频频率 当我按下开始按钮时 它开始使
  • 使用 FFT 进行 Matlab 模板匹配

    我正在努力解决 Matlab 中傅立叶域中的模板匹配问题 这是我的图片 艺术家是 DeviantArt 上的 RamalamaCreatures 我的目标是在负鼠的耳朵周围放置一个边界框 就像这个例子 我使用normxcorr2执行模板匹配
  • 实时音高检测

    用于实时检测用户歌唱的音调FFT https stackoverflow com questions 1351381 fft problem returns random results and 自相关 https stackoverflo
  • FFT 的窗口大小与数据长度

    我正在尝试对流音频数据进行快速频谱分析以捕获元音 类似于 JLip sync 使用 PyAudio 在短时间内 0 0625 秒 捕获小块 1024 的语音数据 使用 numpy fft 进行分析 并使用 numpy hanning 窗口消
  • Python 中 FFT 的循环加速(使用“np.einsum”)

    Problem 我想加速包含大量乘积和求和的 python 循环np einsum 但我也愿意接受任何其他解决方案 我的函数采用形状为 n n 3 的向量配置 S 我的情况 n 72 并对 N N 点的相关函数进行傅里叶变换 相关函数定义为
  • Clojure/Java:用于声音频谱分析的 Java 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以接受大量音频数据并返回给定频带内随时间变化的平均幅度的库 我已经在 comp dsp
  • 这个小波变换实现正确吗?

    我正在寻找 FFT 的替代方案来用 python 创建频谱分析仪 我听说小波变换比短时 FFT 更快并且提供更好的时间精度 我查阅了这篇维基百科文章 其中介绍了 Java 中的 Haar 小波变换实现 https en wikipedia
  • 在 MATLAB 中使用 FFT 的频率响应

    这是场景 使用频谱分析仪 我有输入值和输出值 样本数是32000采样率为2000样本 秒 输入是正弦波50 hz 输入为电流 输出为压力 单位 psi 我如何使用 MATLAB 根据这些数据计算频率响应 使用 MATLAB 中的 FFT 函

随机推荐

  • 深入剖析 Python 最常用数据结构:列表(List) & 元组(Tuple)

    1 定义 列表和元组 都是一个可以放置任意数据类型的有序集合 在大多数编程语言中 集合内元素的数据类型必须保持一致 但在 Python 的列表与元组中 没有这个约束 示例 列表 List Tom 22 33 tony 元组 Tuple Ch
  • 网易新闻的api

    一些新闻的api 一 网易 http c m 163 com nc article headline T1348647853363 0 40 html 头条 http c 3g 163 com nc article list T146728
  • 浏览器网页被劫持

    你是否遇到过网页被劫持 正常打开却发现 这种情况能容忍吗 能忍但是没必要 首先打开浏览器网页被劫持不要慌 浏览器右键打开属性 你会发现目标 后面 这里多了一个网址 把它干掉你会发现 大无语事件发生了 好家伙 想直接干掉这个还没权限 右键属性
  • 桌面图标有蓝色阴影终极解决方法

    桌面图标有蓝色阴影 桌面图标背景出现蓝色阴影是怎么回事呢 通常情况下桌面图标变成蓝色背景是由于一些错误的设置而导致的 虽然它不影响系统的正常运行 但是看起来总是不舒服的 网上也有很多处理桌面图标背景出现蓝色阴影的方法 但大都不太全面 引起这
  • Android 手机影音 开发过程记录(四)

    前一篇已经将视频播放页面的布局弄好了 这一篇主要来处理播放页面的各种逻辑 播放 暂停 上 下一个视频 音量 进度 逻辑比较多 一点一点贴代码 顶部布局的逻辑 显示系统时间 时间是一秒一秒更新的 所以可以通过循环发消息的方法来更新系统时间 相
  • 离散对数密码学原理

    一 简介 离散对数被誉为当代密码学领域的三大基础之一 1976年 Diffifie和Hellman提出了一种密钥协商协议 产生了首个离散对数系统模型 8年后 ElGamal提出了基于离散对数系统的公钥加密和签名方法 并奠定了离散对数密码学基
  • 解决Visual Studio 2017启动后不显示窗体

    今晚启动VS等了很久都没有显示窗体 电脑也没有卡死的迹象 只是在任务栏里显示了图标 试了很多常规操作 检查兼容性的时候发现一个叫devenv exe的程序似乎是导致这个问题的原因 有趣的是我在Windows上看到了有人提交了这个问题 有的人
  • apache配置双向ssl认证(笔记)

    一 CA自签 Linux下先安装openssl 安装路径于 usr local openssl 1 修改openssl配置文件 etc pki tls openssl cnf 设置好 dir usr local openssl ssl mi
  • 随笔之---基于信号量实现,生产者与消费者模型

    Class BoundedBuffer mutex new Semaphore 1 hasBuffer new Semaphore n 有n个空buffer 用来装数据 hasData new Semaphore 0 记录有数据的buffe
  • Java导出压缩包zip文件

    需要导出一些图片和一个文本 一起放到zip压缩包中 GetMapping downloadZip public void downloadZip HttpServletResponse response throws IOException
  • 解决ffmpeg视频转码后视频清晰度下降的问题

    清晰度 Chrome不支持非h264编码的mp4视频播放 可通过ffmpeg将视频转码成h264编码 ffmpeg i input mp4 vcodec h264 b v 0 output mp4 注 如果不加参数 b v 0 会有精度损失
  • Flutter Text控件在不同手机上不居中的问题

    在最近flutter页面改造过程中 发现通过Contail包裹Text控件设置上下padding时 在华为魅族和vivo等手机上并没有居中展示 所以通过查看控件属性 得以解决此类问题 可以看到上面的在华为手机上明显偏下了 使用 Contai
  • 找出一批正整数中的最大偶数_c语言求一批正整数的奇数和-求奇数和输入一批正整数c语言程序-找出一批正整数中最大的偶数c语言...

    include stdio h int main int a 10 i j k printf 输入10个整数 n for i k 0 i lt 10 i scanf d a k for j 0 j if a k a j k k printf
  • [疯狂Java]面向对象:单例模式

    1 单例模式的应用 1 单例类就是指该类最多只能创建一个对象 不能创建超过一个的对象 2 这样做的原因 要么就是为了降低系统开销 要么这种类型的对象创建了多个没有任何意义 最多只需要一个就行 例如窗口管理器 假脱机打印设备 数据库引擎访问结
  • TCP传输过程详解——三次握手、四次挥手

    TCP 3 1 三次握手 重点 3 2 四次挥手 重点 3 3 通过序列号与确认应答提高可靠性 3 4 重发超时的确定 3 5 以段为单位发送数据 3 6 利用窗口控制提高速度 3 7 滑动窗口控制 3 8 窗口控制中的重发控制 TCP T
  • ICCV19 (Oral)

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文作者 洪晓鹏 https zhuanlan zhihu com p 127956794 本文已由原作者授权 不得擅自二次转载 Zhiheng Ma Xing Wei
  • 苹果发布iOS16正式版,各机型升级建议

    文章目录 前言 升级注意事项 iOS 16增加了哪些功能 1 锁屏界面大改动 2 全新专注模式 3 查看Wi Fi密码 4面容ID横屏解锁 5 电量百分比 6 支持任天堂Switch手柄 7 键盘输入震动 8 隐藏相册支持加密 9 清理重复
  • Linux 信号(三) —— 强大的sigaction

    在Linux中 对于信号的收发有着两组函数 1 入门版 发送函数 int kill pid t pid int sig 接收函数 sighandler t signal int signum sighandler t handler 这组函
  • MyBatis进阶版

    本文有点难 目录 1 一些区分 1 1参数占位符 和 1 1 1SQL注入 1 1 2like查询 1 2resultType和resultMap 2 映射查询 2 1一对一表映射 2 2一对多表映射 3 动态SQL 3 1标签 3 2标签
  • esp32使用fft算法显示音乐频谱

    演示参考下方视频 源码链接在视频末尾获取 点击查看视频 介绍 本项目使用esp32s3 ifd4 2 声音传感器以及tft显示屏构成 使用快速傅里叶变换算法处理采集到的音频数据 fft处理后的数据使用lvgl显示在tft屏幕上 电路图 源码