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