程序运行不了 总是出错 求助!!!!!
%主程序
clc;clear;
coe=[1,0,1,0,0,0,0,0,0,0,0];
coe1=[0,0,0];
coe2=[0,0,0,0,0,0,0,0,0,0];
coe3=[0];
Dqk=zeros(1,7);%自适应你量化器输出
fid=fopen('speech1.txt');
a=fscanf(fid,'%e\n');
fclose(fid);
fid=fopen('spp.txt','wt');%存放解码输出波形
for i=1:size(a,1);
Slk=a(i);
[coe,coe1,coe2,coe3,Dqk]=adpcm(Slk,coe,coe1,coe2,coe3,Dqk);
fprintf(fid,'%f\n',coe2(5));
end
fclose(fid);
fid=fopen('spp.txt','rt');
b=fscanf(fid,'%e\n');
subplot(211);
plot(a);
subplot(212);
plot(b);
% 语音编解码子函数程序adpcm.m
function [coe,coe1,coe2,coe3,Dqk]=adpcm(Slk,coe,coe1,coe2,coe3,Dqk) %语音编解码函数
Yk_pre = coe2(1); %初值传递
Sek_pre = coe2(2);
Ik_pre = coe2(3);
Ylk_pre_pre = coe2(4);
Srk_pre = coe2(5);
Srk_pre_pre = coe2(6);
a2=coe2(7);
Tdk_pre =coe2(8);
Trk_pre =coe2(9);
Num=coe2(10);
coe2(10)=coe2(10)+1;
[Sek,coe] = Sek_com(Srk_pre,Srk_pre_pre,Dqk,coe); %自适应预测
Dk = Dk_com( Slk, Sek ); %采样值与其估值差值计算
Yuk_pre = yu_result( Yk_pre, wi_result(abs(Ik_pre)) ); %快速非锁定标度因子计算
if Yuk_pre<1.06
Yuk_pre=1.06;
else
if Yuk_pre>10.00
Yuk_pre=10.00;
end
end
Ylk_pre = yl_result( Ylk_pre_pre, Yuk_pre ); %锁定标度因子计算
Trk_pre = Trk_com( a2, Dqk(6), Ylk_pre ); %窄带信号瞬变判定
Tdk_pre = Tdk_com( a2 ); %单频信号判定
[Alk,coe1]= Alk_com( Ik_pre, Yk_pre ,coe1,Tdk_pre,Trk_pre);
%自适应速度控制与自适应预测
if Alk<0.0
Alk=0.0;
else
if Alk>1.0
Alk=1.0;
end
end
[Yk,coe3]=Yk_com(Ik_pre,Alk,Yk_pre,coe3); %量化阶距自适应因子计算
Ik = Ik_com( Dk, Yk ); %自适应量化并编码输出
Yk_pre = Yk;
Srk_pre_pre = Srk_pre;
Sek_pre = Sek;
Ylk_pre_pre = Ylk_pre;
Ik_pre = Ik;
coe2(1)= Yk;
coe2(6)= Srk_pre;
coe2(2)= Sek;
coe2(4)= Ylk_pre;
coe2(3)= Ik;
Dqk(1) = Dqk(2);
Dqk(2) = Dqk(3);
Dqk(3) = Dqk(4);
Dqk(4) = Dqk(5);
Dqk(5) = Dqk(6);
Dqk(6) = Dqk(7);
Dqk(7) = Dqk_com( Ik_pre,Yk_pre); %自适应逆量化器输出
Srk_pre = Srk_com( Dqk(7), Sek_pre); %重建信号输出
coe2(5)=Srk_pre;
%自适应速度控制与自适应预测子函数
function [h,coe1]=Alk_com(Ik_pre,Yk_pre,coe1,Tdk_pre,Trk_pre)
Dmsk_p2=coe1(1);
Dmlk_p2=coe1(2);
Apk_pre2=coe1(3);
Dmsk_p1=(1-2^(-5))*Dmsk_p2+2^(-5)*fi_result(abs(Ik_pre));
Dmlk_p1=(1-2^(-7))*Dmlk_p2+2^(-7)*fi_result(abs(Ik_pre));
coe1(1)=Dmsk_p1;
coe1(2)=Dmlk_p1;
if ((abs(Dmsk_p1-Dmlk_p1)>=2^(-3)*Dmlk_p1)|(Yk_pre<3)|(Tdk_pre==1))
Apk_pre1=(1-2^(-4))*Apk_pre2+2^(-3);
else
if (Trk_pre==1)
Apk_pre1=1;
else
Apk_pre1=(1-2^(-4))*Apk_pre2;
end
coe1(3)=Apk_pre1;
end
if Apk_pre1>=1
Alk=1;
else
Alk=Apk_pre1;
end
h=Alk;
%采样值与其估计值差值计算奇函数
function d=Dk_com(Slk,Sek);
Dk=Slk-Sek;
d=Dk;
%自适应逆量化器输出子函数
function f=Dqk_com(Ik,Yk)
if Ik>=0
Dqsk=0;
i=Ik;
else
Dqsk=1;
i=-Ik;
end
switch i
case 7
Dqlnk=3.32;
case 6
Dqlnk=2.91;
case 5
Dqlnk=2.52;
case 4
Dqlnk=2.13;
case 3
Dqlnk=1.66;
case 2
Dqlnk=1.05;
case 1
Dqlnk=0.031;
case 0
Dqlnk=-1000;
end
%归一化输出
Dqlk=Dqlnk+Yk;
Dqk=2^Dqlk;
if Dqsk==1
Dqk=-Dqk;
end
f=Dqk;
%自适应预测中f函数值计算子函数
function b=f_com(a)
if abs(a)<=0.5
b=4*a;
else
b=2*sgn_com(a);
end
%速度控制中F[I(k)]计算子函数
function w=fi_result(in)
switch in
case 0
fi=0;
case 1
fi=0;
case 2
fi=0;
case 3
fi=1;
case 4
fi=1;
case 5
fi=1;
case 6
fi=3;
case 7
fi=7;
end
w=fi;
%自适应量化并编码输出子函数
function f=Ik_com(Dk,Yk)
if Dk>0
Dsk=0;
else
Dsk=1;
end
if Dk==0
Dk=Dk+0.0001;
end
Dlk=log(abs(Dk))/log(2);
Dlnk=Dlk-Yk;
x=Dlnk;
a=10;
if Dlnk
Ik=0;
end
if -0.98<=Dlnk&Dlnk<0.62
Ik=1;
end
if 0.62<=Dlnk&Dlnk<1.38
Ik=2;
end
if 1.38<=Dlnk&Dlnk<1.91
Ik=3;
end
if 1.91<=Dlnk&Dlnk<2.34
Ik=4;
end
if 2.34<=Dlnk&Dlnk<2.72
Ik=5;
end
if 2.72<=Dlnk&Dlnk<3.12
Ik=6;
end
if Dlnk>=3.12
Ik=7;
end
if Dsk==1
Ik=-Ik;
end
f=Ik;
%自适应预测子函数
function [g,f]=Sek_com(Srk_pre,Srk_pre_pre,Dqk,coe)
a1_pre=coe(1);
a2_pre=coe(2);
b1_pre=coe(3);
b2_pre=coe(4);
b3_pre=coe(5);
b4_pre=coe(6);
b5_pre=coe(7);
b6_pre=coe(8);
Sezk_pre=coe(9);
p_pre2=coe(10);
p_pre3=coe(11);
%六阶零点预测器系数
b1=(1-2^(-8))*b1_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(6));
b2=(1-2^(-8))*b2_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(5));
b3=(1-2^(-8))*b3_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(4));
b4=(1-2^(-8))*b4_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(3));
b5=(1-2^(-8))*b5_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(2));
b6=(1-2^(-8))*b6_pre+2^(-7)*sgn_com(Dqk(7))*sgn_com(Dqk(1));
%二阶极点预测器系数
Sezk=b1*Dqk(7)+b2*Dqk(6)+b3*Dqk(5)+b4*Dqk(4)+b5*Dqk(3)+b6*Dqk(2);
p_pre1=Dqk(7)+Sezk_pre;
if abs(p_pre1)<=0.000001;
a1=(1-2^(-8))*a1_pre;
a2=(1-2^(-7))*a2_pre;
else
a1=(1-2^(-8))*a1_pre+(3*2^(-8))*sgn_com(p_pre1)*sgn_com(p_pre2);
a2=(1-2^(-7))*a2_pre+2^(-7)*(sgn_com(p_pre1)*sgn_com(p_pre3)-f_com(a1_pre)*sgn_com(p_pre1)*sgn_com(p_pre2));
end
%自适应预测和重建信号计算器
coe(1)=a1;
coe(2)=a2;
coe(3)=b1;
coe(4)=b2;
coe(5)=b3;
coe(6)=b4;
coe(7)=b5;
coe(8)=b6;
coe(9)=Sezk;
coe(10)=p_pre1;
coe(11)=p_pre2;
g=(a1*Srk_pre+a2*Srk_pre_pre+Sezk);
f=coe;
%sgn_com函数
function b=sgn_com(a)
if a>=0.000001
b=1;
else
b=-1;
end
%重建信号输出子函数
function Srk=Srk_com(Dqk,Sek)
Srk=Dqk+Sek;
%单频信号判定子函数
function Tdk=Tdk_com(A2k)
if (A2k
Tdk=1;
else
Tdk=0;
end
Tdk=Tdk;
%窄带信号顺便判定子函数
function Trk=Trk_com(A2k,Dqk,Ylk)
if (A2kpow(24.2,Ylk))
Trk=1;
else
Trk=0;
end
Trk=Trk;
%量化器标度因子自适应wi的选取子函数
function J=wi_result(in)
switch in
case 0
wi=-0.75;
case 1
wi=1.13;
case 2
wi=2.56;
case 3
wi=4.00;
case 4
wi=7.00;
case 5
wi=12.38;
case 6
wi=22.19;
case 7
wi=70.13;
end
J=wi;
%量化阶矩自适应因子计算子函数
function [Yk,coe3]=Yk_com(Ik_pre,Alk,Yk_pre,coe3);
Yl_pre_pre=coe3;
Yu_pre=(1-2^(-5))*Yk_pre+2^(-5)*wi_result(abs(Ik_pre));
Yl_pre=yl_result(Yl_pre_pre,Yu_pre);
coe3=Yl_pre;
Yk=Alk*Yu_pre+(1-Alk)*Yl_pre;
%锁定标度因子计算子函数
function yl=yl_result(yl_pre,yu_now)
yl=(1-2^(-6))*yl_pre+2^(-6)*yu_now;
yl=yl;
%快速非锁定标度因子计算子函数
function yu=yu_result(y_now,wi_now)
yu=(1-2^(-5))*y_now+2^(-5)*wi_now;
yu=yu;
错误提示
??? Error using ==> plot
Vectors must be the same lengths.
Error in ==> d at 23
plot(a);