音频信号分析

目录

一,音频获取

二,信号的基本形态

三,衰减信号的频域信号

四,低频信号

五,高频信号

六,七个音节的频率


一,音频获取

我用电子琴(音色模式是卧式钢琴),把中音区的7个音节分别按了5次,录音得到音频文件

首先查看振幅:

from pydub import AudioSegment
import matplotlib.pyplot as plt
from pydub import AudioSegment
import numpy as npaudio = AudioSegment.from_file("D:/1234567.m4a")
audio.export("D:/1234567_.mp3", format="mp3")
arr=audio.get_array_of_samples()
plt.plot(arr)
plt.show()

规律很明显,每一个峰值就是一个音节。

9秒的音频有90万个采样点,大概1秒采样10万次,考虑实际情况,应该是96000次。

二,信号的基本形态

第一个音节5次:

v=arr[75000:205000]
plt.plot(v)
plt.show()

第一个音节第1次:

v=arr[80000:106000]
plt.plot(v)
plt.show()

第二次:

第三次:

第四次:

第五次:

每个音节都是一个衰减的趋势,而且每个键的衰减周期是差不多的。

三,衰减信号的频域信号

衰减信号示例:

num = 100
x = linspace(0,num-1,num)
f =  cos(pi*x) * cos(pi*x/200)
plot(x, f)
show()

频域实部:

频域虚部:

可以看出,即使有衰减,频域信号也能非常清晰的看出信号频率。

四,低频信号

一个衰减周期内有很多震动周期,所以我们先局部放大:


plt.plot(arr[131000:132000])
plt.show()

可以看出来主频信号大概是每400个采样点是一个周期,即250HZ

再对整个音节的信号做一个傅里叶变换:


H = np.fft.fft(v)
plt.plot(H.real)
plt.show()plt.plot(H.imag)
plt.show()

实部:

虚部:

如果周期大概是400个采样点,那么信号对应的频点应该是在60左右。

低频信号放大:

r = H.real
plt.plot(r[0:2000])
plt.show()

再放大,并统计频点:

r2 = r[0:750]
plt.plot(r2)
plt.show()print("96000/len=",end='')
print(96000.0 / len(r))
for id in range(0,len(r2)):if(abs(r2[id])>6000000):print(id)

输出:

96000/len=3.6923076923076925
70
71
141
142
284
354
355
426

所以第一个频点应该是71

对应的频率是3.6923076923076925 * 71 = 262.2赫兹

对于第一个音节后面出现的几次,按照类似的方式计算,算出的结果分别是:262.4 262.4 262.1 262.0

所以,这个方法应该没错,单个音节5次的频率是一样的。

五,高频信号

用实部继续分析高频信号:

r = H.real
plt.plot(r[10000:13000])
plt.show()

这是一个对称的图形,我们再把局部放大:

r = H.real
plt.plot(r[11000:11500])
plt.show()

我们把几个频点提取出来:

r2 = r[11000:11500]
print(r2)
for id in range(0,len(r2)):if(abs(r2[id])>4000000):print(id)

输出:

186
249
312
313
314
373
374
375
376
436
438

其中 186 249 312 375 438这几个频点刚好构成等差数列,差值是63

加上偏移量,分别是11186 11249 11312 11375 11438

按照同样的方法:

对应的频点分别是10700 10760 10820 10880 10940

也是刚好等差数列,但是差值是60

同样的方法:

对应的频点分别是9672 9727 9782 9837 9892 9946

如果最后一个频点加上1,那就刚好构成等差数列,差值是55

汇总一下:

第一个音节的其中三次信号的高频信号:

11186 11249 11312 11375 11438 差值63

10700 10760 10820 10880 10940 差值60

9672 9727 9782 9837 9892 9947 差值55

第二个音节,按照同样的方法分析:

10179 10243 10307 10371 10435 差值64

所以这些频点到底代表啥?等差数列又代表啥?

我也不清楚。

六,七个音节的频率

前面已经算出来,第一个音节频率是262赫兹。

按照同样的方法,分别可以算出其他音节的频率。

第二个:

294赫兹

第三个:

329赫兹

第四个:

350赫兹

第五个:

393赫兹

第六个:

439赫兹

第七个:

493赫兹

所以相邻的7个音节,分别是262 294 329 350 393 439 493赫兹

显然,和钢琴的十二平均律对比,误差在1赫兹之内。

另外,我这里的第6个音,即中音区A,其实应该是国际标准音440赫兹,误差是1赫兹。

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

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

相关文章

Vue-Cli 创建vue2.0 + TypeScript 项目

这里写目录标题 一、创建项目名称二、选择 Manually select features三、勾选配置项四、选择vue版本五、其它配置 一、创建项目名称 vue create 项目名称(项目名字不能含义大写字母)二、选择 Manually select features (按箭头上下进行移动…

Windows系统Maven下载安装

下载: 官网地址:https://maven.apache.org/download.cgi 安装: 下载下来的是一个压缩包,首先将其解压到你的Maven目标安装位置 接下来为其配置其环境变量 (Maven的基础是Java,因此要首先确认已为你的电…

钡铼技术BL101串口6路Modbus转MQTT网关加速智慧城市部署

随着物联网技术的飞速发展,如何高效地整合传统设备与现代云端系统,成为了亟待解决的关键问题。钡铼技术,作为物联网领域的硬件设备制造商,近期推出的BL101六路串口Modbus转MQTT网关,正以其独特优势,为智慧城…

【FFmpeg】AVFrame结构体

【FFmpeg】AVFrame结构体 1.AVFrame结构体的定义enum AVPictureType pict_typeAVFrameSideData **side_data 参考: FFMPEG结构体分析:AVFrame 示例工程: 【FFmpeg】调用ffmpeg库实现264软编 【FFmpeg】调用ffmpeg库实现264软解 【FFmpeg】调…

【漏洞复现】脸爱云一脸通智慧管理平台 SystemMng 管理用户信息泄露漏洞(XVE-2024-9382)

0x01 产品简介 脸爱云一脸通智慧管理平台是一套功能强大,运行稳定,操作简单方便,用户界面美观,轻松统计数据的一脸通系统。无需安装,只需在后台配置即可在浏览器登录。 功能包括:系统管理中心、人员信息管理中心、设备…

Mysql实战中的一些小tips

1. 问题:使用select进行查表,出现连接事务一直连接,导致锁表,没办法对表格进行修改操作。 解决办法: # 在建立conn连接时,设置commit如下:self.dbconn MySQLdb.connect(hostsql_conf.MYSQL_HO…

力扣(2024.06.24)

1. 68——文本左右对齐 给定一个单词数组 words 和一个长度 maxWidth ,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。 你应该使用 “贪心算法” 来放置给定的单词;也就是说,尽可能多地往…

在WordPress上添加亚马逊联盟链接的三种方法

在互联网快速发展的今天,很多人都希望通过网络来增加收入,而加入亚马逊联盟计划(Amazon Associates)无疑是一个不错的选择。如果你有一个WordPress网站,那么在文章中添加亚马逊联盟链接是个很好的变现方式。今天&#…

倩女幽魂搬砖攻略:2024搬砖攻略大全!云手机强力辅助!

《倩女幽魂》手游是一款具有极高自由度和丰富玩法的角色扮演游戏。为了帮助玩家更好地了解并掌握游戏中的各种技巧和策略,本文将为大家提供详细的攻略指南。我们将从每日签到、任务升级、银两经营、必做活动和出金等多个方面详细介绍,帮助玩家轻松玩转游…

JAVA项目跑不起来

场景 项目报各种问题:要么application配置读取不到、要么项目结构不对、要么Idea InteliJ 的基础配置让重新配… 处理了一个问题,又有另一个问题… 但是,别人能跑起来。 原因 缓存问题。 解决办法 重新拉取项目,运行即可。

#C++ -STL容器之vector(浓缩版)#

vector容器是C标准库中的一个动态数组容器。 它允许你在运行时动态地添加或删除元素。它提供了随机访问的能力,这意味着你可以像访问数组一样直接通过索引访问元素,同时又具有动态大小的优势。 vector的功能与C语言中的数组十分相似,但是功…

MyBatis-Plus 查询不到数据,但使用 SQL 可以查询到数据的问题排查

目录 前言 一、问题描述 示例代码 二、排查步骤 1. 检查数据源配置 2. 检查实体类与数据库表结构 3. 检查 Mapper 接口 4. 检查 MyBatis-Plus 配置 5. 排查查询条件 6. 检查日志输出 7. 检查数据库连接问题 8. 检查全局配置和插件 三、解决方案 前言 在开发过程中&…

百度Agent初体验(制作步骤+感想)

现在AI Agent很火,最近注册了一个百度Agent体验了一下,并做了个小实验,拿它和零一万物(Yi Large)和文心一言(ERNIE-4.0-8K-latest)阅读了相同的一篇网页资讯,输出资讯摘要&#xff0…

[职场] 线上面试的准备工作 #知识分享#经验分享#媒体

线上面试的准备工作 面对求职中的面试,应届毕业生该做些什么准备呢?在这里,向各位分享面试前做好预案不慌张几点准备。现在许多面试是通过线上形式进行的。对于求职者来说,要做好两手准备。在这里,重点与大家分享线上面…

解决vue3使用ref 获取不到子组件属性问题

需求&#xff1a; 父子组件使用<script setup>语法糖&#xff0c;父组件通过给子组件定义ref访问子组件内部属性或事件。 关键点&#xff1a; 子组件中&#xff0c;setup语法糖需要用defineExpose把要读取的属性和方法单独暴露出去&#xff0c;否则会访问失败&#xf…

el-dialog el-select适配移动端

一、el-dialog 2024.06.20今天我学习了如何对el-dialog弹窗适配移动端展示&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; media screen and (min-width: 220px) and (max-width: 600px) {::v-deep .el-dialog {width: 95% !important;} } 二、el-select 代码如下…

Gorm 实践:使用 gorm.ErrRecordNotFound 判断元组是否存在

Gorm 提供了很多错误类型给我们使用&#xff0c;今天我们介绍较为常见的 gorm.ErrRecordNotFound&#xff0c;我们将用其实现较为常见的存在性判断逻辑。之所以常见&#xff0c;是因为我们常需要使用存在性判断&#xff0c;来避免使用不存在的结果的结果集或重复插入数据行。 …

盘立方期货Kdj幅图指标公式源码

盘立方期货Kdj幅图指标公式源码&#xff1a; N:250; WR1:100-100*(HHV(HIGH,N)-CLOSE)/(HHV(HIGH,N)-LLV(LOW,N)),DOT,COLORLIGHTGREEN; EW:EMA(WR1,5); STICKLINE(WR1<20,WR1,20,1,0),COLORYELLOW; STICKLINE(WR1>80,WR1,80,1,0),COLORYELLOW; RSV:(CLOSE-LLV(LOW…

IDEA中如何使用Git及其在实际工作中如何进行开发(入职版,详细大量图演示)

1.你把代码拉一下 新入职一般都是拉取公司的代码&#xff0c;一般都是领导给你一个项目的git地址 一般是gitee(Gitee - 基于 Git 的代码托管和研发协作平台) 或者是云效(阿里云登录 - 欢迎登录阿里云&#xff0c;安全稳定的云计算服务平台) https://gitee.com/xxx/xxx.git /…

事务的开启方式

1、声明式事务&#xff1a;Transactional 2、编程式开启&#xff1a; 建立数据库连接关闭自动提交&#xff0c;开启事务执行sql提交事务/回滚事务关闭连接 Connection conn null; 2 3try { 4 // 建立数据库连接 5 conn DriverManager.getConnection(DB_URL, USER, P…