【语音合成】基于matlab重叠存储法的信号分帧与还原【含Matlab源码 567期】
作者:互联网
一、简介
二、源代码
clc
clear all
close all
[s,fs]=wavread('C7_1_y.wav');
winlen=256;
win=hamming(winlen);
overlap=100;
f=enframe(s,win,overlap);
fn=Filpframe_OverlapS(f,win,overlap);
subplot(211)
plot(s/max(abs(s)))
xlabel('点数')
ylabel('幅度')
title('(a)原始信号')
subplot(212)
plot(fn/max(abs(fn)))
xlabel('点数')
ylabel('幅度')
function frameout=enframe(x,win,inc)
nx=length(x(:)); % 取数据长度
nwin=length(win); % 取窗长
if (nwin == 1) % 判断窗长是否为1,若为1,即表示没有设窗函数
len = win; % 是,帧长=win
else
len = nwin; % 否,帧长=窗长
end
if (nargin < 3) % 如果只有两个参数,设帧inc=帧长
inc = len;
end
function frameout=Filpframe_LinearA(x,win,inc)
[nf,len]=size(x);
nx=(nf-1) *inc+len; %原信号长度
frameout=zeros(nx,1);
nwin=length(win); % 取窗长
overlap=nwin-inc; % 重叠长度
tempr1=(0:overlap-1)'/overlap; % 斜三角窗函数w1
tempr2=(overlap-1:-1:0)'/overlap; % 斜三角窗函数w2
if (nwin ~= 1) % 判断窗长是否为1,若为1,即表示没有设窗函数
winx=repmat(win',nf,1);
x=x./winx; % 除去加窗的影响
x(find(isinf(x)))=0; %去除除0得到的Inf
end
function frameout=Filpframe_OverlapA(x,win,inc)
[nf,len]=size(x);
nx=(nf-1) *inc+len; %原信号长度
frameout=zeros(nx,1);
nwin=length(win); % 取窗长
if (nwin ~= 1) % 判断窗长是否为1,若为1,即表示没有设窗函数
winx=repmat(win',nf,1);
x=x./winx; % 除去加窗的影响
x(find(isinf(x)))=0; %去除除0得到的Inf
end
三、运行结果
四、备注
版本:2014a
完整代码或代写加1564658423
标签:win,overlap,567,nwin,源码,matlab,len,窗长,inc 来源: https://www.cnblogs.com/homeofmatlab/p/14940091.html