matlab如何实现单极性归零码型设计?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab如何实现单极性归零码型设计?相关的知识,希望对你有一定的参考价值。

参考技术A 归零码
  信号电平在一个码元之内都要恢复到零的编码方式,它包括曼彻斯特编码和差分曼彻斯特编码两种编码方式。 
  return to zero code (RZ)
  一种二进制信息的编码,用极性不同的脉冲分别表示二进制的“1”和“0”,在脉冲结束之后要维持一段时间的零电平。能够自同步,但信息密度低。
  它是码元中间的信号回归到0电平,判断的方法是"从正电平到零电平的转换边表示的码元为0,而从负电平到零电平转换边表示码元1",使得这种编码为自定时的编码.
单极性归零码
  单极性归零码(RZ)即是以高电平和零电平分别表示二进制码1 和0,而且在发送码1 时高电平在整个码元期间T 只持续一段时间τ,其余时间返回零电平.在单极性归零码中,τ/T 称为占空比.单极性归零码的主要优点是可以直接提取同步信号,因此单极性归零码常常用作其他码型提取同步信号时的过渡码型.也就是说其他适合信道传输但不能直接提取同步信号的码型,可先变换为单极性归零码,然后再提取同步信号.
(一)用到的函数: f2t函数和t2f函数。
function x=f2t(X)
global dt df t f T N
%x=f2t(X)
%x为时域的取样值矢量
%X为x的傅氏变换
%X与x长度相同并为2的整幂
%本函数需要一个全局变量dt(时域取样间隔)
X=[X(N/2+1:N),X(1:N/2)];
x=ifft(X)/dt;
function X=t2f(x)
global dt df N t f T
%X=t2f(x)
%x为时域的取样值矢量
%X为x的傅氏变换
%X与x长度相同,并为2的整幂。 
%本函数需要一个全局变量dt(时域取样间隔)
H=fft(x);
X=[H(N/2+1:N),H(1:N/2)]*dt;
(二),主程序
global dt t f df N T
close all
k=input('取样点数=2^k, k取10左右');
if isempty(k), k=13; end
z=input('每个信号取样点数=2^z,z<k');
if isempty(z), z=5; end
f0=input('f0=取1(kz)左右');
if isempty(f0), f0=1; end
N=2^k
L=2^z;M=N/L;
Rb=2;
Ts=0.5 %码元宽度是0.5us
dt=Ts/L; %时域采样间隔
df=1/(N*dt) %MHz
T=N*dt %截短时间
Bs=N*df/2 %系统带宽
f=[-Bs+df/2:df:Bs]; %频域横坐标
t=[-T/2+dt/2:dt:T/2]; %时域横坐标
EP=zeros(size(f))+eps;
for ii1=1:30
b=round(rand(1,M)); %产生随机码
s=zeros(1,N);
for ii=1:L/2;
s(ii+[0:M-1]*L)=b;
end
S=t2f(s); %S是s的傅氏变换
a=f2t(S); %a是S的傅氏反变换
a=abs(a);
P=S.*conj(S)/T; %功率谱
EP=(EP*(ii1-1)+P+eps)/ii1;
figure(1) %输出的功率画图
plot(f,10*log10(EP),'b');
grid
axis([-15,15,-100,20]);
xlabel('f (KHz)');ylabel('P (V/KHz)') ;title('功率谱图')
figure(2) %输出信号波形画图
plot(t,a,'b')
grid
axis([-3,3,0,1.3]);
xlabel('t (ms)');ylabel('s(t) (V)');title('单极性RZ的时域图')
end

通信原理实验三 数字基带码型产生实验

一、实验目的

1、掌握数字基带传输码型的特点;
2、掌握常用的数字基带传输码的产生方法;
3、能用matlab编写程序产生一些常用的码型,如RZ、NRZ、AMI、HDB3、双相码等。

二、实验器材

计算机,MATLAB软件

三、实验原理

1、数字基带信号

设消息代码由二进制符号0和1组成
(1)单极性码:基带信号的0电位及正电位分别与二进制符号的0与1对应;
(2)双极性码:二进制符号0、1分别与正、负电位相对应;
(3)单极性归零码:有电脉冲比码元宽度窄,每个脉冲都回到零电位;
(4)双极性归零码:相邻脉冲之间必定留有零电位的间隙。
(5)差分波形:用相邻码元的电平的跳变和不变来表示消息代码,以电平跳变表示“1”,以电平不变表示“0”。

2、基带传输码的要求

(1)能从其相应的基带信号中获取定时信息;
(2)相应的基带信号无直流成分和只有很少的低频成分;
(3)不受信源统计特性的影响,即能适应于信源的变化;
(4)尽可能地提高传输码型的传输效率;
(5)具有内在的检错能力。

3、基带传输常用码型

(1)AMI码-传号交替反转码
编码规则:“1” 交替变成“+1” 和“-1” ;“0” 仍保持为“0” 。

消息码 1 1 0 0 1 0 1
AMI码 +1 -1 0 0 +1 0 -1

特点:无直流成分,且只有很少的低频成分,编码简单,提取定时信号困难。
(2)HDB3码-三阶高密度双极性码
编码规则:先检查消息代码中的连0情况,当没有4个或4个以上连0时,按AMI码的编码原则;当有时则将每4个连0小段的第4个0变换成与前一个非0符号同极性的符号。但这可能会破“环极性交替反转”的规律。这个符号被称为破环符号,用V表示(即+1记为+V,-1记为-V)。为使附加V符号后原码仍为无直流分量,还必须保证相邻V符号也极性交替。这一点,当相邻V符号之间有奇数个非0符号时,是能保证的;当有偶数个非0符号时,则不能保证,这时再将该小段的第1个0变换成+B或-B,B符号的极性与前一个非0符号极性相反,并让后面的非0符号从V符号开始在交替变化。

(3)、双相码-曼彻斯特码
编码规则为:每个二进制代码分别用两个具有不同相位的二进制新码去取代的码。0→01;1→10。

(4) 差分双相码(差分曼彻斯特码):
编码方法:不仅与当前的信息有关,而且与前一个信息也有关,也就是说同一个码元的电平有关,即用中央时刻的电平跳变来表示信息。与绝对双相码的不同的是:对于信息1,则前半时间的电平与前一码元的后半时间电平相同,后半时间与本码元前半时间值相反;对信息0,则前半时间的电平与前一码元的后半时间值相反,后半时间值与本码元前半时间值相反。
(5)CMI码-传号反转码
编码规则:“1”码交替用“11”和“00”表示;“0”码用“01”表示。

四、实例演示

1、产生一组单极性不归零码和归零码,并绘制出其时域波形(10个);

(1)程序

方法一:

clear all
M=10;            %产生码元数    
Ts=1;     %每个码元的宽度,即码元的持续时间
L=200;    %每码元复制次数
dt=Ts/L;
TotalT=M*Ts;                     %总时间
wave=round(rand(1,M));   %产生单极性不归零码
% 产生单极性不归零波形 
t=0:dt:TotalT-dt;
for i=1:M
    if wave(i)==1
        for j=1:L
            dnrz((i-1)*L+j)=1;
        end
    else
        for j=1:L
            dnrz((i-1)*L+j)=0;
        end
    end
end
subplot(2,1,1)
plot(t,dnrz)
axis([0,TotalT,-0.1,1.1])
%产生单极性归零波形
for i=1:M
    if wave(i)==1
        for j=1:L/2
            drz((2*i-2)*L/2+j)=1;
            drz((2*i-1)*L/2+j)=0;
        end
    else
        for j=1:L
            drz((i-1)*L+j)=0;
        end
    end
end
subplot(2,1,2)
plot(t,drz)
axis([0,TotalT,-0.1,1.1])

方法二程序如下:

2)单极性不归零码

clear all
M=10;                      	%产生码元数    
L=100;                           %每码元复制L次
Ts=1;           %每个码元的宽度,即码元的持续时间
dt=Ts/L;                        %采样间隔
TotalT=M*Ts;                     %总时间
t=0:dt:TotalT-dt;                     %时间
%产生单极性波形
wave=round(rand(1,M));          %产生二进制随机码,M为码元个数
fz=ones(1,L);               %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:);   %复制的第1行复制L次
dnrz=reshape(x1,1,L*M);       %重排成1行 ,L*M列数组
subplot(2,1,1)
plot(t, dnrz)
axis([0 TotalT -0.1 1.1])
%产生单极性归零波形
N=M*L;						%总点数
zkb=0.5;                %zkb为占空比
drz=zeros(1,N);
for i=1:zkb*L                           
   drz(i+[0:M-1]*L)=wave; 
end
subplot(2,1,2)
plot(t, drz)
axis([0 TotalT -0.1 1.1])

2.双极性码型的部分程序

  (1)产生双极性码的函数:
    wave=sign(randn(1,M));
  (2) 产生双极性不归零波形
snrz=dnrz*2-1;          %由单极性不归零波形转换成双极性不归零的波形
   (3)产生双极性归零波形
     srz=zeros(1,N);
    for i=1:zkb*L                           
      srz(i+[0:M-1]*L)=snrz(i+[0:M-1]*L); %由双极性不归零波形转换成双极性归零的波形
end

3.AMI码的时域波形

程序如下:
clear all
M=10;            %产生码元数    
Ts=1;     %每个码元的宽度,即码元的持续时间
L=200;    %每码元复制次数
dt=Ts/L;
TotalT=M*Ts;                     %总时间
t=0:dt:TotalT-dt;
N=M*L;						%总点数
wave=round(rand(1,M));         %产生二进制随机码,M为码元个数
% 产生单极性不归零波形 
fz=ones(1,L);               %定义复制的次数L,L为每码元的采样点数
x1=wave(fz,:);   %复制的第1行复制L次
dnrz=reshape(x1,1,L*M);       %重排成1*L*M数组
subplot(2,1,1)
plot(t, dnrz)
axis([0 TotalT -0.1 1.1])
amiwave=zeros(1,N);
% 产生AMI码波形 
lastcode=1;
for i=0:M-1                            
    if (wave(i+1)==1)               %有跳变
        if (lastcode==1)
            amiwave(i*L+1:i*L+L)=1;
            lastcode=-1;
        else
            amiwave(i*L+1:i*L+L)=-1;
            lastcode=1;
        end
    else
         amiwave(i*L+1:i*L+L)=0;
    end
end

subplot(2,1,2)
plot(t,amiwave)
axis([0,TotalT,-1.1,1.1])

4. HDB3 码的部分程序

hdb3wave=zeros(1,N);
lastcode=1;                             %上一个1状态
vonevcount=0;                           %相邻V之间连1数目
zerocount=0;                            %连零数目
for i=0:M-1                             %
if (wave(i+1)==1)               %有跳变
   zerocount=0;
        if (lastcode==1)
            hdb3wave(i*L+1:i*L+L)=-1;
            lastcode=-1;
            vonevcount=vonevcount+1;
        else
            hdb3wave(i*L+1:i*L+L)=1;
            lastcode=1;
            vonevcount=vonevcount+1;
        end
    else
        zerocount=zerocount+1;
        if (zerocount==4)
            if (mod(vonevcount,2)==1)           %相邻V之间有奇数个1
                if (lastcode==1)        %插入000+V
                    hdb3wave(i*L+1:i*L+L)=1;
                else                    %插入000-V
                    hdb3wave(i*L+1:i*L+L)=-1;
                end
                vonevcount=0;
            else
                if (lastcode==1)        %插入-B00-V
                    hdb3wave((i-3)*L+1:(i-3)*L+L)=-1;
                    hdb3wave(i*L+1:i*L+L)=-1;
                    lastcode=-1;
                else                    %插入+B00+V
                    hdb3wave((i-3)*L+1:(i-3)*L+L)=+1;
                    hdb3wave(i*L+1:i*L+L)=1;
                    lastcode=1;
                end
                vonevcount=0;
            end
            zerocount=0;
        else
            hdb3wave(i*L+1:i*L+L)=0;
        end
    end
end

五、实验内容

1、产生一组双极性码和双极性不归零码,并绘制出其时域波形;
2、产生一组随机数字序列,并绘制该码对应的HDB3码和双相码的时域波形。

以上是关于matlab如何实现单极性归零码型设计?的主要内容,如果未能解决你的问题,请参考以下文章

单极性归零码需要解码吗?Matlab代码

求帮忙翻译论文摘要

信号处理基于数字基带信号波形仿真matlab源码

归零码和不归零码单极性码和双极性码

matlab不归零码为啥循环乘以占空比就可以变为归零码?

matlab 的时间序列怎么用?