【通信原理】数字基带传输的线路码型

数字基带传输的线路码型

简单介绍数字基带传输的线路码型的信号波形的特点,以及生成方法。注意观察频谱。文末附Matlab代码。

以下包括双极性NRZ、单极型NRZ、双极型RZ、单极型RZ、差分码,曼切斯特码/数字双相码、密勒码、CMI码、AMI码、HDB3码。

参数:Rb = 20 bps;fs = 200 Hz;仿真时间2s。

PART1

  1. 双极性NRZ

    • “1”对应“+1V”,“0”对应“-1V”
    • 双极性的优点是抗噪能力强一些
    • 缺点是生成电路需要正负双电源供电。
    • 不归零信号抗噪声能力较强
  2. 单极性NRZ

    • “1”对应“+1V”,“0”对应“0V”
    • 单极性的优点是可以采用单电源供电
    • 缺点是具有直流分量,只能在直流耦合的电路中使用。如果在交流耦合的电路中,比如通过一个电容器,则会过滤掉直流分量。
  3. 双极性RZ

    • “1”对应“+1V”,“0”对应“-1V”。维持其电平半个bit时间( T b / 2 T_b/2 Tb/2),将电平回到零电平。
    • 归零信号跳变边缘丰富,易于定时
  4. 单极性RZ

    • “1”对应“+1V”,“0”对应“0V”。“1”维持正电平半个bit时间( T b / 2 T_b/2 Tb/2),将电平回到零电平。
  5. 差分码

    • “1”对应“上跳电平”或者“下跳电平”,“0”保持上一bit对应的电平。
    • 第一个bit如果为1,上跳或者下跳则由电路复位后保持的电平确定。本仿真中初相(或者说第0个bit)为0。
    • 生成方法是进行 m _ n e w i = x o r ( m i , m i − 1 ) m\_new_i = xor( m_i,m_{i-1}) m_newi=xor(mi,mi1)

请添加图片描述

PART2

  1. 数字双相码/曼切斯特码
    • “1”对应“下跳电平”,“0”对应“上跳电平”。
    • 数字双相码没有直流分量,包含丰富的定时信息
    • 但占用的带宽加大。用于10Mbps的以太网中。
  2. 密勒码/延迟调制码
    • “1”对应“上跳电平”或者“下跳电平”,“0”对应负或正电平,连0时要交替。密勒码是数字双相码使用下降沿触发一级触发器后的结果,克服了数字双相码的定时相位不确定性。
  3. 传号反转码(CMI)
    • “1”对应交替的正或负电平,“0”对应“上跳脉冲”。
    • 没有直流分量,跳变丰富,容易接收、易于检错。
  4. 交替传号反转码(AMI)
    • “1”——交替的(+1)或(-1),“0”对应“0V”。
    • 长连“0”串时,无法提取时钟
    • AMI码3电平信号,是北美电话系统中的接口标准之一。
  5. HDB3码
    • 规则:先将码改为AMI码,然后将四连0调整为“0 0 0 V”或者“B 0 0 V”,保证V和前面的B同极性(不同极性的时候就调整为“B 0 0 V”),同时V、B各自正负交替出现。
    • HDB3具有AMI码的优点,译码简单,且容易提取定时时钟。

请添加图片描述

PART3 Matlab代码

% ---------------------------------------------
% 作者:wsg
% 日期:2022124% 邮箱:shouguo19@163.com
% 主题:基带传输的线路码型的仿真
% 参考:李晓峰《通信原理(第二版)》,第四章第九节。
% ---------------------------------------------

% 基本参数
Rb = 20;              % 信息bit速率
t_span = 2;           % 仿真时间
fs = 200;            % 采样频率

unitBitSa = fs/Rb;          % 单位原始信息采样点数
bit_length = Rb*t_span;     % 信息序列长度

t = transpose(0:1/fs:(t_span-1/fs));    % 仿真时间轴 
N_points = length(t);
f = (1/N_points:1/N_points:1/2)*fs;     % 频率轴

m = randi([0 1], bit_length, 1);        % 随机产生的bit序列

name_list = ["双极性NRZ","单极性NRZ","双极性 RZ", "单极性 RZ", "差分码",...
             "曼切斯特码", "密勒码", "传号反转码CMI", "交替传号反转码AMI","HDB3码"];

%% part1
rz_gt = zeros(unitBitSa,1);
rz_gt(1:unitBitSa/2) = ones(unitBitSa/2, 1);    % 归零码生成滤波器
nrz_gt = ones(unitBitSa,1);                     % 不归零码生成滤波器

% 1. 双极性NRZ
s1 = filter(nrz_gt, 1, upsample(m*2-1, unitBitSa));

% 2. 单极性NRZ
s2 = filter(nrz_gt, 1, upsample(m, unitBitSa));

% 3. 双极性 RZ
s3 = filter(rz_gt, 1, upsample(m*2-1, unitBitSa));

% 4. 单极性 RZ
s4 = filter(rz_gt, 1, upsample(m, unitBitSa));

% 5. 差分码
m5 = zeros(bit_length,1);
tmp = 0;    % 初相
for i = 1:bit_length
    tmp = xor(tmp,m(i));
    m5(i) = tmp;
end
s5 = filter(nrz_gt, 1, upsample(m5, unitBitSa));


%% part2
down_pulse = zeros(unitBitSa,1)-1;
down_pulse(1:unitBitSa/2) = ones(unitBitSa/2, 1);
up_pulse = flipud(down_pulse);

% 6. 曼切斯特码/数字双相码
m_tmp = [m,~m]';
m6 = m_tmp(:);
s6 = filter(ones(unitBitSa/2,1),1,upsample(m6*2-1,unitBitSa/2));


% 7. 密勒码/延迟调制码
bph = [m,~m]';
bph = bph(:);

m7 = zeros(bit_length*2,1);
tmp = 0;
for i = 1:bit_length*2
    if isequal([tmp,bph(i)], [1,0])
        m7(i) = ~m7(i-1);
    else
        if i==1  
            m7(i) = tmp;
        else
            m7(i) = m7(i-1);
        end
    end
    tmp = bph(i);
end
s7 = filter(ones(unitBitSa/2,1),1,upsample(m7*2-1,unitBitSa/2));


% 8. CMI
s8 = zeros(N_points,1);
flag = 1;
for i = 1:bit_length
    if m(i)==1
        if flag == 1 
            s8((1:unitBitSa)+(i-1)*unitBitSa) = 1;
        else 
            s8((1:unitBitSa)+(i-1)*unitBitSa) = -1;
        end
        flag = ~flag;
    else
        s8((1:unitBitSa)+(i-1)*unitBitSa) = up_pulse;
    end
end


% 9.AMI
s9 = zeros(N_points,1);
flag = 1;
for i = 1:bit_length
    if m(i)==1
        if flag == 1 
            s9((1:unitBitSa)+(i-1)*unitBitSa) = 1;
        else 
            s9((1:unitBitSa)+(i-1)*unitBitSa) = -1;
        end
        flag = ~flag;
    else
        s9((1:unitBitSa)+(i-1)*unitBitSa) = 0;
    end
end

% 10. HDB3
m10 = zeros(bit_length,1);
flagb = 0;
flagv = 1;
for i = 1:bit_length
    if m(i)==1
        flagb = ~flagb;
        if flagb == 1 
            m10(i) = 1;
        else 
            m10(i) = -1;
        end
    else
        m10(i) = 0;
        if i>3 && isequal(m10(i-3:i),zeros(4,1))    
            if flagv == flagb
                if flagv == 1
                    m10(i) = 1;
                else
                    m10(i) = -1;
                end
            else
                if flagv == 1
                    m10(i-3:i) = [1;0;0;1];
                else
                    m10(i-3:i) = [-1;0;0;-1];
                end
                flagb = ~flagb;
            end
            flagv = ~flagv;
        end
    end
end
s10 = filter(ones(unitBitSa,1),1,upsample(m10,unitBitSa));

%% 绘图
figure(3)
for i = 1:5
    s = eval("s"+num2str(i));
    S = abs(fft(s));

    subplot(5,2,i*2-1)
    plot(t,s);xlabel("t/s");ylim([-1.2 1.2]);title(name_list(i))
    subplot(5,2,i*2)
    plot(f,S(1:N_points/2));xlabel("f/Hz");
end

figure(2)
for i = 1:5
    s = eval("s"+num2str(i+5));
    S = abs(fft(s));

    subplot(5,2,i*2-1)
    plot(t,s);xlabel("t/s");ylim([-1.2 1.2]);title(name_list(i+5))
    subplot(5,2,i*2)
    plot(f,S(1:N_points/2));xlabel("f/Hz");
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值