matlab图像显示时间,请问怎么把样点数变成时间显示在图像了里
怎么把該程序最后結果圖片的樣點數變換成時間
[filename,yxj]=uigetfile('*.wav','請選擇純凈語音文件:');
tidy=wavread([yxj filename])';
[wavin,NOISE]=noisegen(tidy,20);? ?? ?? ?? ???%加入10dB白噪聲
%---------------------參數定義--------------------------
frame_len=256;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%幀長
step_len=0.5*frame_len;? ?? ?? ?? ?? ?? ?? ?? ???%分幀時的步長,相當于重疊50%
wav_length=length(wavin);
R=step_len;
L=frame_len;
f=(wav_length-mod(wav_length,frame_len))/frame_len;
k=2*f-1;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%幀數
h=sqrt(1/101.3434)*hamming(256)';? ?? ?? ?? ?? ? %漢明窗乘以系數的原因是使其符合條件要求
wavin=wavin(1:f*L);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%帶躁語音與純凈語音長度對齊
tidy=tidy(1:f*L);
win=zeros(1,f*L);
enspeech=zeros(1,f*L);
%--------------------------分幀-----------------------------------
for r=1:k
y=wavin(1+(r-1)*R:L+(r-1)*R);? ?? ?? ?? ?? ? %對帶躁語音幀間重疊一半取值
y=y.*h;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%對取得的每一幀都加窗處理
w=fft(y);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%對每一幀都做傅里葉變換
Y(1+(r-1)*L:r*L)=w(1:L);? ?? ?? ?? ?? ?? ?? ?%把傅里葉變化值放在Y中
end
%-------------------------估計噪聲---------------------------------
NOISE=stationary_noise_evaluate(Y,L,k);
%---------------------------MMSE-----------------------------------
for b=1:L;
a=0.98;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%系數
q=0.2;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?%第k個頻率分量的語音存在概率
A=[0.1*abs(Y(b)),zeros(1,k-1)];? ?? ?? ?? ???%語音幅度
s1=[a*abs(Y(b)).^2/NOISE(b),zeros(1,k-1)];? ?%先驗信噪比
for t=1:k-1? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? %先算每一幀的第一點
x1(t+1)=abs(Y(b+t*L)).^2;? ?? ?? ?? ?? ? %帶躁語音的幅度
r(t+1)=x1(t+1)/NOISE(b+t*L);? ?? ?? ?? ? %后驗信噪比
if r(t+1)>=700
r(t+1)=700;
elseif r(t+1)<1
r(t+1)=1.5;
end
s1(t+1)=a*(A(t).^2/NOISE(b+(t-1)*L))+(1-a)*max(r(t+1)-1,0); %先驗信噪比
v(t+1)=(s1(t+1)/(1+s1(t+1)))*r(t+1);
if v(t+1)<0.1
expint(t+1)=-2.31*log10(v(t+1))-0.6;
elseif v(t+1)>=0.1&v(t+1)<=1
expint(t+1)=-1.544*log10(v(t+1))+0.166;
elseif v(t+1)>1
expint(t+1)=10.^(-0.52*(v(t+1))-0.26);
end
Gmmse(t+1)=(s1(t+1)/(1+s1(t+1)))*exp(0.5*expint(t+1));
w(t+1)=((1-q)/q)*(exp(v(t+1))/(1+s1(t+1)));
A(t+1)=(w(t+1)/(1+w(t+1)))*Gmmse(t+1)*abs(Y(b+t*L));
end
A1(1+(b-1)*k:b*k)=A(1:k);
end
%下面程序的作用是把每一幀的點依次還原成原來的存放順序
for t1=1:k
for j=1:L
d(j)=A1(t1+(j-1)*k);
end
A2(1+(t1-1)*L:t1*L)=d(1:L);
end
for t2=1:k
S=A2(1+(t2-1)*L:t2*L);
ang=Y(1+(t2-1)*L:t2*L)./abs(Y(1+(t2-1)*L:t2*L));? ?? ?? ?%帶躁語音的相位
S=S.*ang;? ? %因為人耳對相位的感覺不明顯,所以恢復時用的是帶躁語音的相位信息
s=ifft(S);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???%取實部
s=real(s);
enspeech(1+(t2-1)*L/2:L+(t2-1)*L/2)=enspeech(1+(t2-1)*L/2:L+(t2-1)*L/2)+s;
%在實域疊接相加,把分幀后的序列恢復成原來序列的長度
win(1+(t2-1)*L/2:L+(t2-1)*L/2)=win(1+(t2-1)*L/2:L+(t2-1)*L/2)+h;
%窗的疊接相加
t2=(0:length(s)-1)/f;
end
enspeech=enspeech./win;? ?? ?? ?? ?? ?? ?? ?%去除加窗引起的增益得到的增強的語音
figure(1)
subplot(3,1,1);plot(tidy);title('(a)原始語言');xlabel('樣點數');ylabel('幅度');axis([0 4 *10^4 -0.3 0.3]);
subplot(3,1,2);plot(wavin);title('(b)加躁語音(20dB白噪聲)');xlabel('樣點數');ylabel('幅度');axis([0 4*10^4 -0.3 0.3]);
subplot(3,1,3);plot(enspeech);title('(c)MMSE');xlabel('樣點數');ylabel('幅度');axis([0 4*10^4 -0.3 0.3]);
clip_image002.gif
(6.18 KB, 下載次數: 0)
2017-11-27 15:14 上傳
程序結果顯示
總結
以上是生活随笔為你收集整理的matlab图像显示时间,请问怎么把样点数变成时间显示在图像了里的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle批量把小写转换成大写,ora
- 下一篇: html文件怎么导出stl文件,3D建模