📄 deltam.m
字号:
%*************************************************************
% Acest program simuleaza modulatia delta liniara si adaptiva.
%*************************************************************
clear all
dt=0.00015; % perioada de esantionare;
t=0:dt:.02; % axa timpului;
d0=0.055; % valoarea minima a cuantei;
tc=0.004;tp=0.01;td=0.004;
k=length(t); % numarul de esantioane;
x=zeros(k,1); % semnal initial;
k1=menu('semnal','triunghiular','dinte de fierastrau',...
'dreptunghiular','sinusoidal','trapezoidal','semn');
k2=menu('algoritm','Song','Jayant','delta liniar');
% semnal triunghiular;
if k1==1
for r=2:k,
if rem(t(r),0.01)<0.005;
x(r)=x(r-1)+.1;
else
x(r)=x(r-1)-.1;
end;
end;
% semnal dinte de fierastrau;
elseif k1==2,
x=500*rem(t,.01);
% semnal dreptunghiular;
elseif k1==3,
x=sign(sin(2*pi*50*t));
% semnal sinusoidal;
elseif k1==4,
x=sin(2*pi*100*t);
% semnal trapezoidal;
elseif k1==5,
for r=2:k,
if (t(r)>0)&(t(r)<tc),
x(r)=t(r)/tc;
elseif (t(r)>=tc)&(t(r)<(tc+tp)),
x(r)=1;
elseif (t(r)>=(tc+tp))&(t(r)<(tc+tp+td)),
x(r)=1-((t(r)-(tc+tp))/td);
else
x(r)=0;
end;
end;
% semnal;
else ;
x=sin(2*pi*100*t)+500*rem(t,.02);
end;
y=zeros(k,1);
del=d0;
y(1)=0;
b_new=0;
for r=2:k,
if x(r)>y(r-1),
b_old=b_new;
b_new=1;
elseif x(r)<y(r-1),
b_old=b_new;
b_new=0;
end;
% algoritmul Song;
if k2==1,
if b_old==b_new,
del=del+d0;
else
del=del-d0;
end;
% algoritmul Jayant;
elseif k2==2,
if b_old==b_new,
del=del*2;
else
del=del/2;
end;
% algoritmul delta liniar;
else
del=del+dt;
end;
% semnal modulat;
if x(r-1)>y(r-1),
y(r)=y(r-1)+del;
else
y(r)=y(r-1)-del;
end;
end;
% reprezentarea grafica;
[dt,dy]=stairs(t,y);
plot(t,x,'g.',dt,dy,'r-');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -