【语音合成】基于matlab重叠存储法的信号分帧与还原【含Matlab源码 567期】

2021/6/27 11:14:02

本文主要是介绍【语音合成】基于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



这篇关于【语音合成】基于matlab重叠存储法的信号分帧与还原【含Matlab源码 567期】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程