【语音合成】基于matlab重叠相加法的信号分帧与还原【含Matlab源码 568期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【语音合成】基于matlab重叠相加法的信号分帧与还原【含Matlab源码 568期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、重叠相加法简介
1 由来
在利用FFT计算线性卷积时,遇见长序列与短序列卷积时,FFT不一定具备简化计算的优势。
2 思路
分而治之的思想,可能很多情况下都使用,将大问题转为能解决的已知问题。既然一长一段不行,何不把长的分段我们设两个序列中短序列为s(n),长度为M;长序列为l(n),长度为L;可以测试,对长序列的分段点数不影响卷积结果,那我们设每段长度为N。那么,第一段的下标应该是0~N-1,第二段应该是N ->2N-1;由于我们采用每段分别求卷积,再将每段卷积通过合适的方法组合成目标结果,那么第二段应该往左移N点,以作DFT,也可以理解为周期延拓。为了让fft 或dft 代替线性卷积结果,需要有dft点数的要求,points=2^r>=N+M-1。因此,我们要在N点基础上进行补零,往后加points-N个0即可。同时别忘了对s(n)也进行同样的补零处理。
由于时域卷积可以频域相乘再反变换求得,我们将对s(n)和每个分段分别求卷积。在得到每个分段的卷积和后,我们要由此组织我们的结果。数学上已经给出结果了,就不赘述。对数学表达式的理解为,第一段的前N个点依旧代表结果,此后的M-1个点将与第二段的前M-个点相加,其他的类似。不严谨地说,每个分段产生N+M-1个点,第二段相当于右移N个点,必然产生混叠,第三段右移2N个点。看两张图,结合理解。
三、部分源代码
clc
clear all
close all
[s,fs]=audioread('1.wav');
- 1
- 2
- 3
- 4
- 5
四、运行结果
五、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1]韩纪庆,张磊,郑铁然.语音信号处理(第3版)[M].清华大学出版社,2019.
[2]柳若边.深度学习:语音识别技术实践[M].清华大学出版社,2019.
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/114997663
- 点赞
- 收藏
- 关注作者
评论(0)