频谱扩展 matlab,语音信号频谱扩展
%
% pr10_3_1
clear all; clc; close all;
filedir=[];? ?? ?? ?? ?? ?? ?? ?? ?? ???% 設(shè)置路徑
filename='colorcloud.wav';? ?? ?? ?? ???% 設(shè)置文件名
fle=[filedir filename];? ?? ?? ?? ?? ???% 構(gòu)成完整的路徑和文件名
[x, fs, bits] = wavread(fle);? ?? ?? ???% 讀入數(shù)據(jù)文件
x=x-mean(x);? ?? ?? ?? ?? ?? ?? ?? ?? ? % 消除直流分量
x=x/max(abs(x));? ?? ?? ?? ?? ?? ?? ?? ?% 幅值歸一
xl=length(x);? ?? ?? ?? ?? ?? ?? ?? ?? ?% 數(shù)據(jù)長(zhǎng)度
time=(0:xl-1)/fs;? ?? ?? ?? ?? ?? ?? ???% 計(jì)算出時(shí)間刻度
p=12;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???% LPC的階數(shù)為12
wlen=200; inc=80;? ?? ?? ?? ?? ?? ?? ???% 幀長(zhǎng)和幀移
msoverlap = wlen - inc;? ?? ?? ?? ?? ???% 每幀重疊部分的長(zhǎng)度
y=enframe(x,wlen,inc)';? ?? ?? ?? ?? ???% 分幀
fn=size(y,2);? ?? ?? ?? ?? ?? ?? ?? ?? ?% 取幀數(shù)
% 語(yǔ)音分析:求每一幀的LPC系數(shù)和預(yù)測(cè)誤差
for i=1 : fn
u=y(:,i);? ?? ?? ?? ?? ?? ?? ?? ?? ?% 取來(lái)一幀
A=lpc(u,p);? ?? ?? ?? ?? ?? ?? ?? ? % LPC求得系數(shù)
aCoeff(:,i)=A;? ?? ?? ?? ?? ?? ?? ? % 存放在aCoeff數(shù)組中
errSig = filter(A,1,u);? ?? ?? ?? ? % 計(jì)算預(yù)測(cè)誤差序列
resid(:,i) = errSig;? ?? ?? ?? ?? ? % 存放在resid數(shù)組中
end
%%%%%%%%%%%%%%%%%%%%%
%這個(gè)地方添加了程序
%對(duì)預(yù)測(cè)系數(shù)和預(yù)測(cè)誤差進(jìn)行上采樣
aCoeff=upsample(aCoeff,2);
resid=upsample(resid,2);
%當(dāng)采樣率是8k的時(shí),將參數(shù)進(jìn)行修改,以擴(kuò)展到16k
fn=size(aCoeff,2);
inc=inc*2;
wlen=wlen*2;
xl=xl*2;
fs=fs*2;
%%%%%%%%%%%%%%%%%%%%%
% 語(yǔ)音合成:求每一幀的合成語(yǔ)音疊接成連續(xù)語(yǔ)音信號(hào)
for i=1:fn
A = aCoeff(:,i);? ?? ?? ?? ?? ?? ???% 取得該幀的預(yù)測(cè)系數(shù)
residFrame = resid(:,i);? ?? ?? ?? ?% 取得該幀的預(yù)測(cè)誤差
synFrame = filter(1, A', residFrame); % 預(yù)測(cè)誤差激勵(lì),合成語(yǔ)音
outspeech((i-1)*inc+1:i*inc)=synFrame(1:inc);??% 重疊存儲(chǔ)法存放數(shù)據(jù)
% 如果是最后一幀,把inc后的數(shù)據(jù)補(bǔ)上
if i==fn
outspeech(fn*inc+1:(fn-1)*inc+wlen)=synFrame(inc+1:wlen);
end
end;
ol=length(outspeech);
if ol
outspeech=[outspeech zeros(1,xl-ol)];
end
% 發(fā)聲
% wavplay(x,fs);
% pause(1)
wavplay(outspeech,fs);
wavwrite(outspeech,fs,'bandwidth_audio.wav');
% 作圖
% subplot 211; plot(time,x,'k');
% xlabel(['時(shí)間/s' 10 '(a)']); ylabel('幅值'); ylim([-1 1.1]);
% title('原始語(yǔ)音信號(hào)')
% subplot 212; plot(time,outspeech,'k');
% xlabel(['時(shí)間/s' 10 '(b)']); ylabel('幅值'); ylim([-1 1.1]);
% title('合成的語(yǔ)音信號(hào)')
總結(jié)
以上是生活随笔為你收集整理的频谱扩展 matlab,语音信号频谱扩展的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 步进电机五根线怎么接_步进驱动和伺服驱动
- 下一篇: matlab from有什么用,Matl