data=double(rand(1,10)>0.5); %原始信号,这里用长度为10的随机0,1串
%以下是双相码
code2=[]; %初始编码
for i=1:length(data)
if data(i)==0 %如果信号为0
temp=[0 1]; %信号0的极性交替
else
temp=[1 0];
end
code2=[code2 temp]; %加入新的两位编码
end
%以下是双相码解码
decode2=[];
r=0;
for i=1:2:length(code2)
if code2(i)==0
r=0; %信号0输出
else
r=1;
end
decode2=[decode2 r];
end
%以下是画图
subplot(711),stairs(0:length(data),[data data(end)],'linewidth',2);
title('随机信号');set(gca,'YLim',[-0.2 1.2]);set(gca,'XGrid','on');
text((1:length(data))-0.6,0.5*ones(length(data),1),cellstr(num2str(data')));
subplot(712),stairs(0:length(code2),[code2 code2(end)],'linewidth',2);
title('双相码编码');set(gca,'YLim',[-0.2 1.2]);set(gca,'XGrid','on');
text((1:length(code2))-0.6,0.5*ones(length(code2),1),cellstr(num2str(code2')));
subplot(713),stairs(0:length(decode2),[decode2 decode2(end)],'linewidth',2);
title('双相码解码信号');set(gca,'YLim',[-0.2 1.2]);set(gca,'XGrid','on');
text((1:length(decode2))-0.6,0.5*ones(length(decode2),1),cellstr(num2str(decode2')));
%以下是密勒编码
code=[]; %初始编码
precode=0; %初始前一个编码
predata=1; %初始前一个信号
for ii=1:length(data)
if data(ii)==1 %如果信号为1
temp=[0 1]; %中间跳变
elseif predata==0 %如果信号为0且前信号为0
temp=[1 1]; %中间不跳变
else %如果信号为0且前信号为1
temp=[0 0]; %中间不跳变
end
if precode==1 %如果前一个编码是1
temp=1-temp; %将temp取反
end
code=[code temp]; %加入新的两位编码
predata=data(ii); %更新前一个信号
precode=code(end);%更新前一个编码
end
%以下是密勒解码
decode=[];
for ii=1:2:length(code) %两个两个编码进行解码
if code(ii)==code(ii+1)
temp=0;
else
temp=1;
end
decode=[decode temp];
end
%以下是画图
subplot(714),stairs(0:length(code),[code code(end)],'linewidth',2);
title('密勒编码');set(gca,'YLim',[-0.2 1.2]);set(gca,'XGrid','on');
text((1:length(code))-0.6,0.5*ones(length(code),1),cellstr(num2str(code')));
subplot(715),stairs(0:length(decode),[decode decode(end)],'linewidth',2);
title('密勒解码信号');set(gca,'YLim',[-0.2 1.2]);set(gca,'XGrid','on');
text((1:length(decode))-0.6,0.5*ones(length(decode),1),cellstr(num2str(decode')));
%以下是CMI
code1=[]; %初始编码
cun=0; %码里1的个数
for i=1:length(data)
if data(i)==1 %如果信号为1
cun=cun+1;
if rem(cun,2)==0
temp=[0 0]; %信号1的极性交替
else
temp=[1 1];
end
else %如果信号为0
temp=[0 1]; %中间不跳变
end
code1=[code1 temp]; %加入新的两位编码
end
%以下是CMI解码
decode1=[];
r=0;
for i=1:2:length(code1)
temp=code1(i)+code1(i+1);
if temp==1
r=0; %信号0输出
else
r=1;
end
decode1=[decode1 r];
end
%以下是画图
subplot(716),stairs(0:length(code1),[code1 code1(end)],'linewidth',2);
title('CMI编码');set(gca,'YLim',[-0.2 1.2]);set(gca,'XGrid','on');
text((1:length(code1))-0.6,0.5*ones(length(code1),1),cellstr(num2str(code1')));
subplot(717),stairs(0:length(decode1),[decode1 decode1(end)],'linewidth',2);
title('CMI解码信号');set(gca,'YLim',[-0.2 1.2]);set(gca,'XGrid','on');
text((1:length(decode1))-0.6,0.5*ones(length(decode1),1),cellstr(num2str(decode1')));