用电平 1 来表示二元信息中的“1”,用电平 0 来表示二元信息中的“0”,电平在整个码元的时间里不变,记作 NRZ 码。二元信息序列 100110000101 的单极性非归零码波形如图所示:
它与单极性非归零码不同之处在于输入二元信息为 1 时,给出的码元前半时间为 1,后半时间为 0,输入 0 则完全相同。二元信息序列 100110000101 的单极性归零码波形如图所示:
用 MATLAB 实现双极性非归零码同单极性一样,只需将 snrz.m 中的判断得到 0 信息后的语句 y((i-1)*grid+j)=0;中的 0 改为-1 即可。
此种码型比较特殊,它使用前半时间 1,后半时间 0 来表示信息 1;采用前半时间-1,后办时间 0 来表示信息 0。因此它具有三个电平,严格来说是一种三元码(电平 1,0,-1)。码型如图所示:
双极性归零码包含了丰富的时间信息,每一个码元都有一个跳变沿,便于接收方定时。同时对随机信号,信息 1 和 0 出现概率相同,所以此种码元几乎没有直流分量。
该码型又称曼彻斯特(macheser)码,此种码元方法采用一个码元时间的中央时刻从 0到 1 的跳变来表示信息 1,从 1 到 0 的跳变来表示信息 0。或者说是前半时间用 0、后半时间用 1 来信息表示 1,前半时间用 1、后半时间用 0 来信息表示 0。二元信息序列 100110000101的数字双相码波形如图所示:
数字双相码的好处是含有丰富的定时信息,每一个码元都有跳变沿,遇到连续的 0 或 1 时不会出现长时间维持同一电平的现象。另外,虽然数字双相码有直流但对每一个码元其直流分量是固定的 0.5,只要叠加-0.5 就转换为没有直流了,实际上是没有直流的,方便传输。
MATLAB 实现数字双相码同双极性归零码的实现类似,只要将语句
y(grid/2*(2i-2) +j)= 1;
y(grid/2(2i-1)+j)=0;
改为
y(grid/2(2i-2) +j)=0;
y(grid/2(2i-1)+j)=1;
将语句
y(grid/2(2i-2) +j)=-1;
y(grid/2(2i-1)+j)=0;
改为:
y(grid/2(2i-2) +j)=1;
y(grid/2(2*i-1)+j)=0;
即可。函数文件为 macheser.m。
若把数字双相码中用绝对电平表示的波形改成用电平的相对变化来表示的话,比如相邻周期的方波如果同相则表示“0”,反相则表示“1”,就形成了差分码,通常称为条件双相码,也叫差分曼彻斯特码。也可这样描述,差分曼彻斯特码不仅与当前的信息元有关,并且与前一个信息元也有关,确切地说应该是同前一个码元的电平有关。差分曼彻斯特码也使用中央时刻的电平跳变来表示信息,与数字双相码不同之处在于对信息 1,则前半时间的电平与前一个码元的后半时间电平相同,在中央处再跳变;对信息 0,则前半时间的电平与前一个码元的后半时间电平相反(即遇 0 取 1,遇 1 取 0)。二元信息序列 100110000101 的差分曼彻斯特码波形如图 6 所示:
差分曼彻斯特码在遇到传输电平极性反转情况时同前面介绍的几种码相比不会出现译码错误。
1.function y=text4_1(x)
2.grid = 300;
3.t=0:1/grid:length(x);
4.for i=1:length(x)
5. if(x(i)==1)
6. for j=1:grid
7. y((i-1)*grid+j)=1;
8. end
9. else
10. for j=1:grid
11. y((i-1)*grid+j)=0;
12. end
13. end
14.end
15.y=[y,x(i)];
16.M=max(y);
17.m=min(y);
18.subplot(2,1,1);
19.plot(t,y);
20.axis([0,i,m-0.1,M+0.1]);
21.title('1 0 0 1 1 0 0 0 0 1 0 1');
1.function y=text4_2(x)
2.grid = 300;
3.t=0:1/grid:length(x);
4.for i=1:length(x)
5. if(x(i)==1)
6. for j=1:grid/2
7. y(grid/2*(2*i-2)+j)=1;
8. y(grid/2*(2*i-1)+j)=0;
9. end
10. else
11. for j=1:grid/2
12. y((i-1)*grid+j)=0;
13. end
14. end
15.end
16.y=[y,x(i)];
17.M=max(y);
18.m=min(y);
19.subplot(2,1,1);
20.plot(t,y);
21.axis([0,i,m-0.1,M+0.1]);
22.title(' 1 0 0 1 1 0 0 0 0 1 0 1');
1.function y=text4_3(x)
2.grid = 100;
3.t=0:1/grid:length(x);
4.for i=1:length(x)
5. if(x(i)==1)
6. for j=1:grid
7. y((i-1)*grid+j)=1;
8. end
9. else
10. for j=1:grid
11. y((i-1)*grid+j)=-1;
12. end
13. end
14.end
15.y=[y,x(i)];
16.M=max(y);
17.m=min(y);
18.subplot(2,1,1);
19.plot(t,y);
20.axis([0,i,m-0.1,M+0.1]);
21.title('1 0 0 1 1 0 0 0 0 1 0 1');
1.function y=text4_4(x)
2.grid = 300;
3.t=0:1/grid:length(x);
4.for i=1:length(x)
5. if(x(i)==1)
6. for j=1:grid/2
7. y(grid/2*(2*i-2)+j)=1;
8. y(grid/2*(2*i-1)+j)=0;
9. end
10. else
11. for j=1:grid/2
12. y(grid/2*(2*i-2)+j)=-1;
13. y(grid/2*(2*i-1)+j)=0;
14. end
15. end
16.end
17.y=[y,x(i)];
18.M=max(y);
19.m=min(y);
20.subplot(2,1,1);
21.plot(t,y);
22.axis([0,i,m-0.1,M+0.1]);
23.title('1 0 0 1 1 0 0 0 0 1 0 1');
1.function y=text4_5(x)
2.grid = 300;
3.t=0:1/grid:length(x);
4.for i=1:length(x)
5. if(x(i)==1)
6. for j=1:grid/2
7. y(grid/2*(2*i-2)+j)=0;
8. y(grid/2*(2*i-1)+j)=1;
9. end
10. else
11. for j=1:grid/2
12. y(grid/2*(2*i-2)+j)=1;
13. y(grid/2*(2*i-1)+j)=0;
14. end
15. end
16.end
17.y=[y,x(i)];
18.M=max(y);
19.m=min(y);
20.subplot(2,1,1);
21.plot(t,y);
22.axis([0,i,m-0.1,M+0.1]);
23.title('1 0 0 1 1 0 0 0 0 1 0 1');
1.function y=text4_6(x)
2.grid = 300;
3.t=0:1/grid:length(x);
4.for i=1:length(x)
5. if(x(i)==1)
6. for j=1:grid/2
7. y(grid/2*(2*i-2)+j)=0;
8. y(grid/2*(2*i-1)+j)=1;
9. end
10. else
11. for j=1:grid/2
12. y(grid/2*(2*i-2)+j)=1;
13. y(grid/2*(2*i-1)+j)=0;
14. end
15. end
16.end
17. for j=2:length(x)
18. if(x(i)==1)
19. for j=1:grid/2
20. y(grid/2*(2*i-2)+j)=1-y(grid/2*(2*i-3)+grid/4);
21. y(grid/2*(2*i-1)+j)=1-y(grid/2*(2*i-2)+j);
22. end
23. else
24. for j=1:grid/2
25. y(grid/2*(2*i-2)+j)=y(grid/2*(2*i-3)+grid/4);
26. y(grid/2*(2*i-1)+j)=1-y(grid/2*(2*i-2)+j);
27. end
28. end
29. end
30.y=[y,y(i*grid)];
31.M=max(y);
32.m=min(y);
33.subplot(2,1,1);
34.plot(t,y);
35.axis([0,i,m-0.1,M+0.1]);
36.title('1 0 0 1 1 0 0 0 0 1 0 1');
关于matlab所有的文件