MATLAB中文论坛

标题: 语音信号经过加窗分帧后如何还原 [打印本页]

作者: 特雷西福    时间: 2019-9-5 09:28
标题: 语音信号经过加窗分帧后如何还原
想请问下:
[xx,fs]=audioread(fle);                   % 读入数据
xx=xx-mean(xx);                         % 消除直流分量
x=xx/max(abs(xx));                      % 幅值归一化
N=length(x);                            % 取信号长度
time=(0:N-1)/fs;                        % 设置时间
signal=Gnoisegen(x,SNR);                % 叠加噪声
wnd=hamming(wlen);                      % 设置窗函数
overlap=wlen-inc;                       % 求重叠区长度
NIS=fix((IS*fs-wlen)/inc +1);           % 求前导无话段帧数
y=enframe(signal,wnd,inc)';             % 分帧

对于分帧后y,提取其中部分信息,(比如端点加测后,只想保留左右两个端点之间的语音信息)。应该怎么还原这部分经过了加窗分帧的信息呢?

作者: songzy41    时间: 2019-9-5 10:51
在以上的程序中,LZ有x(原始语音信号)、signal(加噪后的语音信号)和y分帧后的信号。如果端点检测以后,给出了端点的信息,但这些端点的信息都是帧号,所以LZ应该是从原始信号或加噪信号中得到端点检测到的语音部分,而不用去还原经过加窗分帧的语音信息。
所以问题是在已知某一段帧数编号时,怎么得到对应的原始信号或加噪信号中的语音部分。
我们分帧后怎么求出中间任合一个帧在原始信号中的位置,设起始位置为n1,结束位置为n2
n1=(k-1)*inc+1,   n2=(k-1)*inc+wlen
同样有一段语音的帧号在k1~k2之间,则他的起始位置n1,结束位置n2的计算方法为
n1=(k1-1)*inc+1,   n2=(k2-1)*inc+wlen
所以从端点检测得到帧号,要从原始信号或加噪信号中得到端点检测到的语音部分,就可以按上公式来获取。
作者: 特雷西福    时间: 2019-9-6 14:58
songzy41 发表于 2019-9-5 10:51
在以上的程序中,LZ有x(原始语音信号)、signal(加噪后的语音信号)和y分帧后的信号。如果端点检测以后, ...

好的,谢谢宋老师的解答,试了下可以的




欢迎光临 MATLAB中文论坛 (https://www.ilovematlab.com/) Powered by Discuz! X3.4