搜索

iVocaloid论坛

查看: 1506|回复: 2
打印 上一主题 下一主题

【算法】LPC共振峰检测 [复制链接]

Sleepwalking

我不是技术宅!

Lv.5-章鱼须

Rank: 5Rank: 5Rank: 5

0
9
0


UID: 111156
权限: 40
属性: 宇宙人
发帖: 201 (1精)
积分: 540
章鱼: 3
大葱: 14
茄子: 2688
注册:2012/8/18
存在感:476
跳转到指定楼层
[1L]楼主
Zleepwalking 发表于 2013/9/21 13:52:17 |只看该作者 |倒序浏览
本帖最后由 Zleepwalking 于 2013/9/21 13:53 编辑

居然在没有线代常识的基础下把这东西搞懂了,虽然只是达到“能用”的程度。

LPC:Linear Prediction Coding,线性预测编码,用已有的信号预测随后的信号。通过最小二乘法获得最小预测误差(意义为声门激励)和脉冲响应(意义为声道滤波器)。(过程相当于解卷?)
主要运算是解矩阵方程,Levinson-Durbin算法可以极大地减少针对这种特殊矩阵的计算开销,其原理是将大规模矩阵运算拆成小一级的矩阵运算来解。

这是一个非常好的介绍:
http://www.emptyloop.com/technotes/A%20tutorial%20on%20linear%20prediction%20and%20Levinson-Durbin.pdf

代码(依赖于CVEDSP):

2013-09-21 13:53:43的屏幕截图.png
对输出的脉冲响应进行FFT可得到频域响应的倒数。通过H(z) = 1/A(z)求得频域响应,相当于频谱包络。    GenerateHamming(Window, 1024);ApplyWindow(InterArray, PFrames[PD.Amount / 2].Data, Window, 0, 1024);   
Boost_FloatSet(LPCCoef, 0, 1024);   
LPC(LPCCoef, InterArray, 1024, 32);   
GenerateBoxCar(Window, 1024);   
GetMagnitudeFromWave(InterArray, LPCCoef, Window, 10);
实测中相比直接取频谱包络能获得更高精度,但仍不能解决共振峰重合问题;而且对低频信号效果较差。
2013-09-21 13:49:53的屏幕截图.png
2013-09-21 13:50:06的屏幕截图.png
2013-09-21 13:50:15的屏幕截图.png
2013-09-21 13:50:52的屏幕截图.png
在Rocaloid中应用价值:CVDBStudio自动共振峰标识。


知识共享许可协议 除非另有声明,本帖内容采用 署名-非商业-相同方式共享 3.0 许可协议 授权,且需注明出处,所有权利归发帖人。

使用道具 举报

0
23
0


UID: 5249
权限: 80
属性: 男性
发帖: 293 (2精)
积分: 589
章鱼: 7
大葱: 22
茄子: 2190
注册:2008/3/18
存在感:382
[2L]沙发
197118080 发表于 2013/9/22 19:40:14 |只看该作者
你真是个天才,不夸张地说……

使用道具 举报

Rank: 2Rank: 2

0
0
0


UID: 112139
权限: 10
属性: 不明
发帖: 12 (0精)
积分: 14
章鱼: 0
大葱: 1
茄子: 234
注册:2012/10/13
存在感:57
[3L]板凳
亡月劫 发表于 2013/9/29 19:48:20 |只看该作者
卧槽为啥这么有潜力的项目还没更多大神加入呢QAQ

使用道具 举报

您需要登录后才可以回帖 登录 | 注册/sign up

申请友链|Archiver|iVocaloid - 自由,开放,合作,共享    | 版权持有者点击这里进行举报

GMT+8, 2025/6/8 00:41

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部