资讯专栏INFORMATION COLUMN

基于Android乐音识别(2)

王岩威 / 1193人阅读

摘要:同时对于傅里叶的变化我们得到图形是对称的,我们只需要取其前面一部分。

目录

傅里叶变换

matlab代码实现&&仿真

基频提取比对

傅里叶变换

距离上一次更新博客,已经好久了,相信看了我上一篇文章的,现在对我的这篇文章可能比较期待了,这个更新晚的原因一个是由于最近课程比较紧,所以对于乐音识别的研究搁置了一段时间,再就是其中也出现了一些问题,导致我们改变了一下自己的策略。

进入正题,学过高数的同学,对傅里叶变化这个概念应该都不会陌生,但是具体是做什么的呢?知乎上之前看到一篇文章,关于傅里叶变换的,讲的非常详细,附带个地址。傅里叶分析之掐死教程(完整版)对于我们之前的信号,我们的分析都是在时域上的,对于在时域上的信号
只是根据我们的量化程度,对于幅度所采取的一个表示方式,但是对于我们确定它具体是哪一个音阶是无法实现的,所以需要我们对其进行傅里叶变化,将其从时域信号图转化到我们的频域上来,然后根据相关的频域参数来确定我们其具体是属于哪一个音阶。在做傅里叶变化的时候遇到了一个小坑,导致在这上面纠结了很久,一个是因为对于matlab不是很熟悉,再就是本身现在在做的事情就是点歪的一个技能点。通过对声音进行傅里叶变化,我们也可以做一些很有趣的事情,比如根据电话按键的声音对于相应的按键的监听,因为在电话出现时,没有数字信号这回事,所以也就不存在一些数字处理器,所以对于电话的按键,是对于电话按键的声音的模拟信号进行监听来确定的,每一个按键都是由两个不同的频率进行叠加来得到的,所以我们可以对电话的按键音,进行一个切割,将有声段拿出来之后,做一个傅里叶变化得到其中的两个频率,然后和相依的频率表进行一个比对,这也是之前新闻上说的某少年获取周鸿祎手机号的方法。

Matlab的实现和仿真
[y, Fs] = audioread("/Users/chenjensen/Desktop/record.mp3");
plot(abs(fft(y)))

通过audioread来读取我们的音频文件,这里的y是关于音频的数字信号序列,Fs是我们的采样频率,通过利用fft得到如下图

我们之前讲过通过傅里叶变化,我们可以得到这个声音的频率,似乎我们的事情已经结束了,得到一个接近1600的值,这也是之前犯得一个错误,这里提供的声音是我们中音D,其频率523.25,但是这里得到确实这么大,公式也是没有错的,开始这让我怀疑我才去这种提取基频的方式不对,最终被同学发现了错误,就是x轴单位的问题,我们通过fft变化,x轴的最大范围是我们的采样频率,而其每个单位确并不是1,而是我们的采样频率/采样点数,按照这种思路再来做一个计算

z=44100/length(y)

z = 0.3300

通过对原图形进行放大,最后发现该值接近于1590
计算我们的这两个值的乘积:1590*0.3300=524.7000
和我们的原始数据523.25非常接近了,我们通过这个大概可以估计出我们的音阶了。
当然这里还存在的一个疑问是我们得到的一个口琴的音,不可能只是单纯的存在一个频率的,一个声音肯定是由多个音叠加而成的,只是在该音阶,该种频率表达的更为充分,然后我们可以利用这个频率来表示这个音阶,我们要取的频率是其在y轴上的值最大的。同时对于傅里叶的变化我们得到图形是对称的,我们只需要取其前面一部分。

基频提取和比对

通过对于基频的提取和比对,我们可以得到我们的当前的音阶。

该文只是单纯针对傅里叶变化展开,连接上篇文章,我们提取出来有声段之后,就可以对这些有声段进行一个傅里叶变化来获取其频率值,而不是像对其全部进行傅里叶变化。

具体的实现细节,将会在后续文章更新,欢迎各位一起交流提升。

下篇更新Android中java代码的具体实现,项目也会在github开源。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12449.html

相关文章

  • 基于Android乐音识别(1)

    摘要:下篇更新对于基频提取,后续更新通过设备来实现的对于音频的一个实时识别的和具体实现 博客新址,这里更有趣 目录 声音信号相关知识 声音采集过程 乐音识别 之前在SF上回答了一个关于乐音识别相关的问题,自己课余时间也看了一些声音信号处理方面的书籍同时也有一个相关的小项目正在进展,写篇博客来分享一下学习的过程和收获。由于本身不是通信相关专业的学生,所以对于这方面没有学习过,所以一切都是从...

    Richard_Gao 评论0 收藏0
  • 弱菜CS应届求职路

    摘要:由于之前的项目经验较多,给自己节省了很多的时间。经过春招开始,首先是投的阿里,具体内容当时并没有相关仔细的记录,大体回忆下。腾讯如何看待大学生创业创业经历,,,绘制流程,事件传递机制,网络二面,在公司上班了。。。 已经过去好久了,现在回顾下,求职路从春招到秋招 本人概况 杭电/CS/本技能栈Android/Java/Python/前端/机器学习(最近撸点深度学习),兴趣向(前端,Has...

    LeexMuller 评论0 收藏0
  • 玩转TensorFlow Lite:有道云笔记实操案例分享

    摘要:如何进行操作本文将介绍在有道云笔记中用于文档识别的实践过程,以及都有些哪些特性,供大家参考。年月发布后,有道技术团队第一时间跟进框架,并很快将其用在了有道云笔记产品中。微软雅黑宋体以下是在有道云笔记中用于文档识别的实践过程。 这一两年来,在移动端实现实时的人工智能已经形成了一波潮流。去年,谷歌推出面向移动端和嵌入式的神经网络计算框架TensorFlowLite,将这股潮流继续往前推。Tens...

    Hanks10100 评论0 收藏0
  • Android 基于开源Countly的App统计平台开发 [1] 结构分析

    摘要:基于的统计平台结构整体结构客户端使框架拥有通用性,不同可以使用同一个,提供一个后台管理队列,给每个和其启动的通过对应上,负责顺序唤醒当前对应的,并通过使用频率调整管理队列。通过将两个中的数据定时发往。下一篇将根据源码分析的运行机制。 当前提到APP统计,友盟无疑是做得最好的一家,同样类型的公司有talkingData,CNZZ(参考 app统计工具简单介绍),此外百度,AVOS等也提供...

    Galence 评论0 收藏0
  • 不可错过的四款 Android 开发工具

    摘要:使终端用户可以通过智能手机的摄像头发起互动体验。此外,借助统一的,针对特定平台的功能特性以及原生性能,实现代码重用,大大地缩减了开发者的工作时间。旨在帮助开发者打造全新级别的真实世界物品与虚拟物品的互动。 Android以其极强的开放性吸引着世界各地的开发者去开发各种各样的移动应用开发,而各种SDK更是为各个层次的开发者提供了一个可以尽情展示他们专业技能和创造性的平台。虽然Java是各...

    PumpkinDylan 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<