使用python numpy计算并显示音频数据的频谱信息

一 概念  

    最近需要用到这个数据。笔者需要,使用 Python 的numpy库结合scipymatplotlib库来计算并显示音频数据频谱信息的示例代码。我们将使用scipy.io.wavfile来读取音频文件,numpy进行快速傅里叶变换(FFT)计算频谱,最后用matplotlib来绘制频谱图。

二 源码解析:

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfiledef plot_audio_spectrum(file_path):# 读取音频文件sample_rate, audio_data = wavfile.read(file_path)# 如果音频是立体声,取单声道数据if len(audio_data.shape) > 1:audio_data = audio_data[:, 0]# 计算音频数据的长度audio_length = len(audio_data)# 进行快速傅里叶变换fft_data = np.fft.fft(audio_data)# 计算频率轴frequencies = np.fft.fftfreq(audio_length, 1 / sample_rate)# 取单边频谱frequencies = frequencies[:audio_length // 2]fft_data = 2.0 / audio_length * np.abs(fft_data[:audio_length // 2])# 绘制频谱图plt.figure(figsize=(12, 6))plt.plot(frequencies, fft_data)plt.title('音频频谱')plt.xlabel('频率 (Hz)')plt.ylabel('幅值')plt.grid()plt.show()if __name__ == "__main__":# 替换为你的音频文件路径audio_file_path = 'your_audio_file.wav'plot_audio_spectrum(audio_file_path)

三 代码解析:

  1. 读取音频文件:使用scipy.io.wavfile.read函数读取指定路径的音频文件,返回采样率和音频数据。
  2. 处理立体声音频:如果音频是立体声(即有多个声道),代码会选取第一个声道的数据进行处理。
  3. 执行快速傅里叶变换:使用numpy.fft.fft函数对音频数据进行快速傅里叶变换,得到频域表示。
  4. 计算频率轴:使用numpy.fft.fftfreq函数计算频率轴,该函数根据采样率和数据长度生成对应的频率值。
  5. 获取单边频谱:为了方便显示,代码只保留了单边频谱(正频率部分),并对频谱幅值进行归一化处理。
  6. 绘制频谱图:使用matplotlib库绘制频谱图,展示音频数据的频谱信息。

四 效果展示:

   笔者使用了一个192khz的原始音频数据,输入了一个20khz左右的tone信号,结果如下所示:

可以看出,能采集到信号的数据。   

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法刷题整理合集(七)·【算法赛】

本篇博客旨在记录自已的算法刷题练习成长,里面注有详细的代码注释以及和个人的思路想法,希望可以给同道之人些许帮助。本人也是算法小白,水平有限,如果文章中有什么错误或遗漏之处,望各位可以在评论区指正出来&#xf…

[免费]SpringBoot+Vue城市交通管理系统【论文+源码+SQL脚本】

大家好,我是java1234_小锋老师,看到一个不错的SpringBootVue城市交通管理系统,分享下哈。 项目视频演示 【免费】SpringBootVue城市交通管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 城市交通管理系统的目的是让使用者可以更方便的将…

同旺科技USB to I2C 适配器 ---- 指令循环发送功能

所需设备: 内附链接 1、同旺科技USB to I2C 适配器 1、周期性的指令一次输入,即可以使用 “单次发送” 功能,也可以使用 “循环发送” 功能,大大减轻发送指令的编辑效率; 2、 “单次发送” 功能,“发送数据…

SQL Server——表数据的插入、修改和删除

目录 一、引言 二、表数据的插入、修改和删除 (一)方法一:在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 (二)方法二:使用 SQL 代码进行操作 1.向表中添…

【MySQL】存储过程

目录 基本概念存储过程操作定义存储过程变量定义局部变量用户变量系统变量全局变量会话变量 参数传递in 关键字out 关键字inout 关键字 流程控制判断分支语句 if分支语句 case 循环循环语句 while循环语句 repeat循环语句 loop 游标异常处理 存储函数 基本概念 概述 MySQL 5.…

大数据学习(77)-Hive详解

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…

一种很新的“工厂”打开方式---智慧工厂

随着信息技术的不断进步,特别是数字化、网络化、智能化技术的快速发展,传统的工厂管理模式已经难以满足现代企业对于生产效率、安全管理以及决策支持等方面的需求,智能制造已成为全球制造业发展的主流趋势。 由于工厂实时数据的多样性、复杂性…

基于python的租房数据分析系统(爬虫爬取真实数据)

项目介绍 本租房数据分析系统具备创新爬虫功能,能从安居客实时抓取房屋信息,同时提供全面的用户管理、个人中心服务。系统支持房屋信息的新增、修改、删除、查询及用户评论,以及租房数据的全面管理分析。此外,房屋资讯管理和轮播图…

Java——ArrayList集合

ArrayList:基于动态数组实现,支持随机访问,适合频繁的随机访问操作,但在插入和删除元素时性能较差。 技术层面介绍 所属类库:ArrayList 位于 java.util 包中,它实现了 List 接口,因此具备 Lis…

【Linux】线程库

一、线程库管理 tid其实是一个地址 void* start(void* args) {const char* name (const char *)args;while(true){printf("我是新线程 %s ,我的地址:0x%lx\n",name,pthread_self());sleep(1);}return nullptr; }int main() {pthread_t tid…

智能宠物饮水机WTL580微波雷达感应模块方案;便捷管理宠物饮水

一:宠物智能饮水与技术创新 1:非接触式感应 微波雷达模块实时检测宠物靠近行为,当宠物进入感应范围时,饮水机自动启动水泵,提供新鲜水流 2:多模式配置 感应距离:30-150cm可调,适应…

How to share files with Windows via samba in Linux mint 22

概述 Windows是大家日常使用最多的操作系统,在Windows主机之间,可以共享文件,那么如何在Windows主机与Linux主机之间共享文件呢? 要在Windows主机与Linux主机之间共享文件,我们可以借助Samba协议完成。借助Samba协议…

牛客周赛84 题解 Java ABCDE 仅供参考

A 小苯跑外卖 除一下看有没有余数 有余数得多一天 没余数正好 // github https://github.com/Dddddduo // github https://github.com/Dddddduo/acm-java-algorithm // github https://github.com/Dddddduo/Dduo-mini-data_structure import java.util.*; import java.io.*…

基于SpringBoot + Vue 的图书馆座位预约系统

SpringBoot 图书馆座位预约管理系统 自习室座位预约管理系统 javaSpringbootVUEredis 1. 开发环境: idea/eclipse、jdk1.8、maven、nodejs 2. 技术栈:java、springboot、Redis、mybatis、vue 3. 数据库: MySQL 有用户和管理员两个角色…

深入理解 lt; 和 gt;:HTML 实体转义的核心指南!!!

&#x1f6e1;️ 深入理解 < 和 >&#xff1a;HTML 实体转义的核心指南 &#x1f6e1;️ 在编程和文档编写中&#xff0c;< 和 > 符号无处不在&#xff0c;但它们也是引发语法错误、安全漏洞和渲染混乱的头号元凶&#xff01;&#x1f525; 本文将聚焦 <&#…

Vue 3 + TypeScript 实现视频播放与字幕功能:集成西瓜播放器 XGPlayer

文章目录 1. 前言&#xff1a;视频播放器的重要性2. 准备工作2.1 安装 Vue 3 项目2.2 安装 XGPlayer 和相关依赖 3. 实现视频播放3.1 初始化 XGPlayer 4. 添加字幕功能4.1 配置字幕 4.2 字幕文件格式5. 增加交互性完整的代码&#xff0c;仅供参考6. 总结 在现代 Web 开发中&…

Simple-BEV的bilinear_sample 作为view_transformer的解析,核心是3D-2D关联点生成

文件路径models/view_transformers 父类 是class BiLinearSample(nn.Module)基于https://github.com/aharley/simple_bev。 函数解析 函数bev_coord_to_feature_coord的功能 将鸟瞰图3D坐标通过多相机&#xff08;针孔/鱼眼&#xff09;内外参投影到图像特征平面&#xff0…

HTTP长连接与短连接的前世今生

HTTP长连接与短连接的前世今生 大家好&#xff01;作为一名在互联网摸爬滚打多年的开发者&#xff0c;今天想跟大家聊聊HTTP中的长连接和短连接这个话题。 记得我刚入行时&#xff0c;对这些概念一头雾水&#xff0c;希望这篇文章能帮助新入行的朋友少走些弯路。 什么是HTTP…

在Mac M1/M2芯片上完美安装DeepCTR库:避坑指南与实战验证

让推荐算法在Apple Silicon上全速运行 概述 作为推荐系统领域的最经常用的明星库&#xff0c;DeepCTR集成了CTR预估、多任务学习等前沿模型实现。但在Apple Silicon架构的Mac设备上&#xff0c;安装过程常因ARM架构适配、依赖库版本冲突等问题受阻。本文通过20次环境搭建实测…

c#知识点补充4

1.发布者订阅模式 发布者 订阅者 俩者直接的关联使用