- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
audioFlux 是一个Python和C实现的库,提供音频领域系统、全面、多维度的特征提取与组合,结合各种深度学习网络模型,进行音频领域的业务研发,下面从时频变换、频谱重排、倒谱系数、解卷积、谱特征、音乐信息检索六个方面简单阐述其相关功能.
项目地址: https://github.com/libAudioFlux/audioFlux 。
audioFlux 在时频分析领域中,包含以下通用变换(支持后续所有频率刻度类型)算法:
BFT - 基于傅里叶变换.
等效短时傅里叶变换(STFT),一般基于此实现大家熟知的mel频谱,时域上重叠平移加窗的傅里叶变换,一般重叠变换长度1/4,加高斯窗又称做Gabor变换,可以调整窗函数长度来方便的模拟时频分析特点,BFT算法除提供标准的mel/bark/erb等频谱外,还支持mel这些刻度类型的复数谱,同时支持mel等刻度频谱的重排.
NSGT - 非平稳 Gabor 变换.
类似加高斯窗的STFT(短时傅里叶变换),不同之处在于窗函数长度和t建立非平稳关系,相对STFT可以实现稳态信号中非平稳状态较好的分析,较好的onset端点侦测效果常基于此类频谱计算,同时可以做为实现CQT的一种高效方式,本算法中NSGT变换的octave频率刻度类型即CQT的高效实现.
CWT - 连续小波变换.
多分辨率时频分析,从数学上看,傅里叶变换的基底是无限的sin/cos函数,而小波变换基底是有限的很小的波函数,波函数的通用表示形式为 $$ \psi_{a,b}(t)=\frac{1}{\sqrt{a}}\psi(\frac{t-b}{a})$$ 其中a决定频域缩放尺度,b时间平移尺度,建立时频的自适应分析,相对STFT的固定时频分辨率,具有低频段频率分辨高、高频段时间分辨高特点,非常适合非稳态信号分析,支持常用的Morse、Morlet、Bump、Pual、Meyer等波函数类型.
PWT - 伪小波变换.
基于傅里叶变换实现的类似小波变换效果,CWT的高效算法为频域小波函数计算filterBank和频域数据做dot运算,如果把小波函数当做一种特殊的窗函数,可以产生类CWT效果,即伪小波变换,如果窗函数建立可调频带的参数(库中尚未实现),可以等效小波变换.
以上变换功能支持下面所有频率刻度类型:
下面是一个BFT变换下不同频率刻度的简单对比图.
下面是一个CWT不同波函数的简单对比图.
以下可用作独立变换的算法有(不支持多种频率刻度类型):
下面是一个CQT和NSGT变换下不同刻度的简单对比图.
很明显,NSGT-Octave比CQT要清晰、聚焦一些.
chroma是基于频谱的更高级特征,属于乐音刻度体系范畴,针对非乐音的刻度要差于乐音刻度,目前支持chroma特征的频谱类型:
下面是一个Chroma简单对比图.
很明显,CQT-Chroma优于其它频谱类型下的chroma.
注:
- 不同频率刻度的频谱都有各自的应用价值,针对某些业务情况,这些不同刻度频谱图可以图组合起一个大的特征集合参与网络的训练。
- 频谱图按值的类型abs、平方、log等非线性运算称为幅值谱、功率谱、对数谱/dB谱,深度学习中一般使用对数谱多一些。
同步压缩或重新分配方法是一种用于锐化、高清频谱图的技术,可以提升频谱的清晰度和精度, audioFlux 包含以下算法:
下面是一个频谱图和对应重排后的效果图.
很明显,重排后的效果要优于重排前的效果。 可能有人会问,既然重排效果如此好,可以基于上次结果循环多次重排吗?这样效果如何? audioFlux 重排相关算法提供多次重排机制,具体效果可以参照文档做下尝试对比.
类似针对mel频谱的mfcc(梅尔频率倒谱系数),这个特征业务上属于去音高,属于反映发音物理结构的一个特征,典型的用于语音识别相关业务,可用于不同乐器分类,结构细化等业务模型训练.
整个 audioFlux 项目频谱体系中,除mfcc以及相应delta/deltaDelta外,支持所有类型的频谱倒谱系数即xxcc:
不同频谱的倒谱系数,都代表着不同频谱类型的去音高相关,都有各自的应用价值,比如gtcc有论文反映在语音识别业务中音素效果要比mfcc好一些,cqcc针对乐器的分类和一些结构细化业务要远优于mfcc等等.
下面是针对吉他乐音音频的不同频谱倒谱系数的对比图.
很明显,在吉他乐音起振阶段,cqcc表现最好,后续持续稳定阶段,gtcc相比较好.
在数学中,解卷积是卷积的逆运算,可以做为信号分解的一种算法,针对频谱而言,分解后的两个数据可以表示为formant(共振峰)频谱图和pitch频谱图,相比mfcc而言,formant是一种更为通识的发音物理结构特征.
在 audioFlux 中,支持所有类型频谱的解卷积操作,所发挥的价值在于,针对音高相关的业务,可以去除共振峰干扰后模型推断更准确;针对结构相关特征的业务,可以去除音高避免模型的训练受其干扰.
下面是针对吉他880hz音频的mel频谱图的解卷积效果图.
可以看到吉他共振峰部分(音色)和音高部分明显的分离效果.
在 audioFlux 中,包括数十种spectral相关的特征,包括基于音色相关特征,基于统计相关特征,基于光谱通量相关特征,基于奇异值相关特征,等等.
如:
等等一小部分,关于 audioFlux 所提供的所有谱特征,更具体的功能描述、例子、公式等请参照 官方文档 .
下面是一些谱特征对比图.
audioFlux 提供mir相关领域pitch估算、onset侦测、hpss(谐波打击乐分离)等相关业务算法.
pitch估算包含基于YIN,STFT等相关算法,下面是针对一段人声练习音高的侦测效果图.
红色为实际参照音高,蓝色为估算音高.
onset侦测包含基于Spectrum flux, novelty等等相关算法,下面是一段吉他扫弦伴奏的端点侦测效果图.
中间时域图像红色虚线为端点侦测位置叠加而成.
hpss包含中值滤波,非负矩阵分解等(NMF)等算法,下面是一段包含吉他弹奏和节拍器音频的分离效果,上半部分时域效果,下半部分对应频域效果.
项目地址: https://github.com/libAudioFlux/audioFlux 。
最后此篇关于开源项目audioFlux:针对音频领域的深度学习工具库的文章就讲到这里了,如果你想了解更多关于开源项目audioFlux:针对音频领域的深度学习工具库的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 NetBeans 开发 Java 中的 WebService,并使用 gradle 作为依赖管理。 我找到了this article关于使用 gradle 开发 Web 项目。它使用 Gr
我正在将旧项目从 ant 迁移到 gradle(以使用其依赖项管理和构建功能),并且在生成 时遇到问题>eclipse 项目。今天的大问题是因为该项目有一些子项目被拆分成 war 和 jar 包部署到
我已经为这个错误苦苦挣扎了很长时间。如果有帮助的话,我会提供一些问题的快照。请指导我该怎么办????在我看来,它看起来一团糟。 *** glibc detected *** /home/shivam/
我在 Ubuntu 12.10 上运行 NetBeans 7.3。我正在学习 Java Web 开发类(class),因此我有一个名为 jsage8 的项目,其中包含我为该类(class)所做的工作。
我想知道 Codeplex、GitHub 等中是否有任何突出的项目是 C# 和 ASP.NET,甚至只是 C# API 与功能测试 (NUnit) 和模拟(RhinoMocks、NMock 等)。 重
我创建了一个 Maven 项目,包装类型为“jar”,名为“Y”我已经完成了“Maven 安装”,并且可以在我的本地存储库中找到它.. 然后,我创建了另一个项目,包装类型为“war”,称为“X”。在这
我一直在关注the instructions用于将 facebook SDK 集成到我的应用程序中。除了“helloFacebookSample”之外,我已经成功地编译并运行了所有给定的示例应用程序。
我想知道,为什么我们(Java 社区)需要 Apache Harmony 项目,而已经有了 OpenJDK 项目。两者不是都是在开源许可下发布的吗? 最佳答案 事实恰恰相反。 Harmony 的成立是
我正在尝试使用 Jsoup HTML Parser 从网站获取缩略图 URL我需要提取所有以 60x60.jpg(或 png)结尾的 URL(所有缩略图 URL 都以此 URL 结尾) 问题是我让它在
我无法构建 gradle 项目,即使我编辑 gradle 属性,我也会收到以下错误: Error:(22, 1) A problem occurred evaluating root project
我有这个代码: var NToDel:NSArray = [] var addInNToDelArray = "Test1 \ Test2" 如何在 NToDel:NSArray 中添加 addInN
如何在单击显示更多(按钮)后将主题列表限制为 5 个(项目)。 还有 3(项目),依此类推到列表末尾,然后它会显示显示更少(按钮)。 例如:在 Udemy 过滤器选项中,当您点击查看更多按钮时,它仅显
如何将现有的 Flutter 项目导入为 gradle 项目? “导入项目”向导要求 Gradle 主路径。 我有 gradle,安装在我的系统中。但是这里需要设置什么(哪条路径)。 这是我正在尝试的
我有一个关于 Bitbucket 的项目。只有源被提交。为了将项目检索到新机器上,我在 IntelliJ 中使用了 Version Control > Checkout from Ve
所以,我想更改我公司的一个项目,以使用一些与 IDE 无关的设置。我在使用 Tomcat 设置 Java 应用程序方面有非常少的经验(我几乎不记得它是如何工作的)。 因此,为了帮助制作独立于 IDE
我有 2 个独立的项目,一个在 Cocos2dx v3.6 中,一个在 Swift 中。我想从 Swift 项目开始游戏。我该怎么做? 我已经将整个 cocos2dx 项目复制到我的 Swift 项目
Cordova 绝对是新手。这些是我完成的步骤: checkout 现有项目 运行cordova build ios 以上生成此构建错误: (node:10242) UnhandledPromiseR
我正在使用 JQuery 隐藏/显示 li。我的要求是,当我点击任何 li 时,它应该显示但隐藏所有其他 li 项目。当我将鼠标悬停在文本上时 'show all list item but don
我想将我所有的java 项目(223 个项目)迁移到gradle 项目。我正在使用由 SpringSource STS 团队开发的 Gradle Eclipse 插件。 目前,我所有的 java 项目
我下载this Eclipse Luna ,对于 Java EE 开发人员,如描述中所见,它支持 Web 应用程序。我找不到 file -> new -> other -> web projects
我是一名优秀的程序员,十分优秀!