语音的合成和分解 enframe和overlapadd 用法
语音的常用处理就是分帧,分帧,fft变换,做一些处理,然后反变换回到时域。
这里面常用到的就是enframe 和 overlapadd
enframe分帧,我想大家都很熟悉了,这里不再介绍,overlapadd具体含义可以看这篇文章
STFT使用overlap-add重建信号_u010592995的专栏-CSDN博客_overlap
上面这篇文章介绍的很清楚。
一、问题的引入
Description of v_overlapadd
voicebox 中给出了一个example
其实这里面就是一个简单的分解和合成,按此我们可以补充一些代码完成信号的分帧处理
这里面核心部分就是enframe和overlapadd,比较奇怪的就是W做的归一化,这个归一化有些奇怪,是平方归一化,另外是hamming用的periodic,
二、hamming的 'periodic' 选项,其实这个是针对 ‘symmetric‘
matlab给的解释:大致含义就是 在做 FIR滤波器设计时候,需要共轭对称,那么使用 symmetric 选项,在做DFT/FFT的时候,用periodic
我们看下他们的不同:
同样的长度下,symmetric 完全共轭对称(这里是实数,没有虚数,或者虚部为零),头尾一样
periodic更符合DFT的频谱特性
上面比较接近一个实序列的FFT的幅度谱的排列方式,即第一个数,DC分量(直流)单独为一块(没人和它对称),完了其余的头尾对称,中间单独(自己和自己对称,奇数N的FFT不存在)
且窗函数hamming,不一定只用于时域,在频域上也会使用的,那么这个这个periodic更适合频域上的窗,当然用于fft的时候
二、 W的归一化方式
归一化方式是平方和,是因为 信号经过了两次 窗函数,一次是在分解的时候(enframe),一次是在重构的时候(overalapadd),W具有平方特性下的归一:
且刚好是头半个窗乘完之后还要乘一遍,尾部也是同样,本文 三 中代码部分已经描述
OV=2; % overlap factor of 2 (4 is also often used)
INC=512; % set frame increment in samples
NW=INC*OV; % DFT window length
W=sqrt(hamming(NW,'periodic')); % omit sqrt if OV=4
W=W/sqrt(sum(W(1:INC:NW).^2)); % normalize window
W1 = zeros(1024*10,1);
W2 = zeros(1024*10,1);
W3 = zeros(1024*10,1);
W4 = zeros(1024*10,1);
W1([1:1024]) = W;
W2([1+512:1024+512]) = W;
W3([1+512*2:1024+512*2]) = W;
W4([1+512*3:1024+512*3]) = W;
W_total = W1+W2+W3+W4;
plot(W_total);
W_total = W1.^2+W2.^2+W3.^2+W4.^2;
plot(W_total);
W=W/sqrt(sum(W(1:INC:NW).^2)); 后面 W(1) W(1+INC)这两个点的和(交叠,每一个横轴点,用了头和两尾两个点,可以参考下图,如果用了OV=4,那就是四个点相加),恰好都是固定值,每个点都要除以这个倍数,
其他点值都一样,这归根到底是hanning或者hamming窗都是sin 系列的窗,推迟pi/2相位变成cos
sinx*sinx + cosx*cosx ==1,平方能量和总是固定值,其他窗(三角,矩形)应该不满足这个特性
stft的时候,这个数据会用两遍(因为overlap分属不同的帧)
[1 2 3 4 5 6...] * win( cos) ,[1 2 3 4 5 6...] * win( sin)
在istft的时候,也会再计算两遍,然后做和
[1 2 3 4 5 6...] * win( cos) ,[1 2 3 4 5 6...] * win( sin)
刚好就是 [12 3 4 56] * (cos^2 + sin^2)
三,整理出来的代码:
整理一下代码吧,如果对模块不熟悉,还是调用enframe和overlapadd函数,现在既然已经知道了这俩函数的根本含义,直接就自己写好了
如果是对静态的文件做处理,那么直接enframe和overlapadd就可以了,现在如果是需要实时的每一帧都要输出结果,那么得考虑下面的写法了:
重构信号 = 信号前半部分*窗的前半部分 + 遗留的上一帧的后半部分*窗的后半部分
S =double(S);
output =[];
for i = 1:nframe-1
% 步进长度,inc
loc_data = S([1+(i-1)*INC:1024+(i-1)*INC]).* W;
loc_fft = fft(loc_data);
% 这里写你要干的操作
loc_data = ifft(loc_fft);
half_data1 = last_frame_data([513:1024]) .* half_right_W;
half_data2 = loc_data([1:512]) .* half_left_W;
half_result = half_data1 + half_data2;
last_frame_data = loc_data;
output = [output;half_result];
end
四、用一个wav信号进行测试:
左边:原始:
右边:重构
其实除了第一帧和最后一帧以外,信号完美重构回去了
语音的合成和分解 enframe和overlapadd 用法相关推荐
- 矢量合成和分解的法则_高考复习整理力的合成和分解
一.合力与分力 如果一个力产生的效果和其他几个力产生的效果相同,这个力就叫那几个力的合力,那几个力就叫这个力的分力. 二.力的合成:求几个力的合力叫做力的合成. 1. 平行四边形定则:力的合成的本质就 ...
- 矢量合成和分解的法则_重点解析丨抛体运动 之 运动的合成与分解
真正优秀的学生是善于方法和知识的总结.归类.完善!多做题多思考多总结.一题多解找巧法,多题一解找通法今天包sir为大家盘点的是运动的合成与分解~希望大家能够从中有所收获!业精于勤荒于嬉希望大家考上理想 ...
- 直播预告 | AAAI 2022论文解读:基于生成模型的语音/歌声合成与歌声美化
「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...
- 基于matlab的信号合成与分解,基于matlab的信号合成与分解
基于matlab的信号合成与分解 - I - 摘 要 为了便于进行周期信号的分析与处理,常要把复杂的周期信号进行分解,即将周期 信号分解为正余弦等此类基本信号的线性组合,通过对这些基本信号单元在时域和 ...
- 矢量合成和分解的法则_专题14 运动的合成与分解
运动的合成与分解 [基础回顾] 考点内容:运动的合成与分解 考纲解读: 1.掌握曲线运动的概念.特点及条件. 2.掌握运动的合成与分解法则. 考点一 物体做曲线运动的条件及轨迹分析 1.条件 (1) ...
- 矢量合成和分解的法则_矢量合成和分解的方法--平行四边形法则.ppt
矢量合成和分解的方法--平行四边形法则 * * * * * * * * * * * * * * * * 实验:蜡块的运动 问题?(1)什么叫合运动.分运动 (2)什么叫合速度.合位移 什么叫分速度.分 ...
- pytorch根据开放场景语音文字合成新语音(VoiceLoop)
pytorch根据开放场景语音文字合成新语音(VoiceLoop) Song • 2119 次浏览 • 0 个回复 • 2018年01月12日 VoiceLoop PyTorch实现了VoiceLoo ...
- 数字信号处理①之信号的合成、分解、相关性及傅里叶系数的计算
数字信号处理系列博客: 数字信号处理之信号的合成.分解.相关性及傅里叶系数的计算 数字信号处理之从傅里叶系数到DFT 文章目录 一.信号的合成和分解 (一)傅里叶级数 (二)将正弦波合成方波 二.信号 ...
- 语音跟踪:信号分解、锁相、鸡尾酒会效应、基于PR的信号分离
NLP中关于语音的部分,其中重要的一点是语音信号从背景噪音中分离.比如在一个办公室场景中,有白天的底噪-类似于白噪音的噪音.空调的声音.键盘的啪啪声.左手边45度7米元的地方同事讨论的声音.右手边1. ...
最新文章
- python paramiko包 ssh报错No existing session 解决方法
- 记录一次【模仿真实环境】的内网漫游
- STL源码分析-bitset
- spring cloud构建互联网分布式微服务云平台-docker部署spring cloud项目
- oracle apply handler,做什么BaseHandler.apply_response_修复在django吗?
- java rsa内容超长_RSA 非对称加密解密,超长字符串分块处理
- python知识点汇总_Python知识点总结大全(一)
- VC调用C#写的DLL
- node php环境变量配置,关于NodeJS、NPM安装配置步骤(windows版本) 以及环境变量的介绍...
- ARMs3c2440开发板挂接NFS服务
- java 短路判断_细数Java最坑爹的10大功能点
- 多伦多大学计算机专音乐专业,多伦多大学音乐专业有哪些申请要求?
- 网络系统设计的一般步骤
- solr为什么比MySQL快_Solr原理?为什么要用Solr?Solr为什么比较快?
- 工作,到底意味着什么
- 十大思想实验(思维风暴)
- 增长或下降的百分比计算以及同比环比概念
- NE5532DR IC OPAMP GP 2 CIRCUIT 8SOIC
- python数据可视化之Matplotlib
- idea generated-requests.http 表单请求示例
热门文章
- 嵌入式Linux--menuconfig详解
- 【181008】VC++ 妙手连珠五子棋源码
- 机器人二弟_“可佳二代”机器人好性感
- 大话设计模式-23中设计模式分类
- 大数据分析案例:应用系统负载分析与磁盘容量预测
- IT 网络产品厂商聚焦(路由、交换、网络安全、负载均衡、防火墙、行为管理、邮件网关、计费等)...
- 迈普交换机添加用户、授权用户级别及删除用户
- 一篇文章带你看懂AWS re:Invent 2018大会,揭秘Amazon Aurora
- macd的python代码同花顺_同花顺顶级MACD指标公式源码-同花顺公式 -程序化交易(CXH99.COM)...
- 清理本地maven仓库