跨境派

跨境派

跨境派,专注跨境行业新闻资讯、跨境电商知识分享!

当前位置:首页 > 综合服务 > 培训机构 > 基于MATLAB的HDB3编码及解码的实现

基于MATLAB的HDB3编码及解码的实现

时间:2024-05-04 10:01:06 来源:网络cs 作者:亙句 栏目:培训机构 阅读:

标签: 解码  实现  编码 

写在前面:AHU《通信与编码课程设计》报告基于MATLAB的HDB3编码及解码的实现,本文相较CSDN大多数MATLAB代码,去除了高斯噪声和滤波器部分,以达到直观展示HDB3编解码的过程,同时增加了实现HDB3码双极性半占空比归零码波形的功能,最符合AHU宝宝体制的答辩论文()

若侵权请联系作者删除。

一、选题背景

        数字基带信号是数字信号的电脉冲表示,电脉冲的形式称为码型。通常把数字信号的电脉冲表示过程称为码型编码或码型变换,在有线信道中传输的数字基带信号又称为线路传输码型。由码型还原为数字信息称为码型译码。

        传号交替反转码常记作AMI码。在AMI码中,二进制码0用0电平表示,二进制码1则交替地用+1和-1的半占空比归零码表示。AMI码位定时频率分量为0,但只要将基带信号经全波整流变为单极性归零码,便可提取位定时信号。但当信息中出现连0码时,由于AMI码中长时间不出现电平跳变,因而定时提取会遇到困难。

         n阶高密度双极性码记作HDBn码,可看作AMI码的一种改进型。使用这种码型可以解决AMI码中出现连0串时难以提取位定时信号的问题。

        本文的目的便是对如何实现基于MATLAB的HDB3编码及解码进行论证,要求为:

        (1)用MATLAB实现HDB3码的编码及解码; 

        (2)先产生并输出随机序列,对随机序列编码,输出编码后的随机序列,然后解码,并输出解码之后的序列,并与原始序列进行比较。

二、方案论证(设计理念)

        n阶高密度双极性码记作HDBn码,可看作AMI码的一种改进型。使用这种码型的目的是解决原信码中出现连0串时所带来的问题。HDBn码中应用最广泛的是HDB3码。在HDB3码中,每当出现4个连0码时用取代节B00V或000V代替,其中B表示符合极性交替规律的传号,V表示破坏极性交替规律的传号,也称为破坏点。当两个相邻V脉冲之间的传号数为奇数时,采用000V取代节;若为偶数时采用BOOV取代节。这种选取原则能确保任意两个相邻V脉冲间的B脉冲数目为奇数,从而使相邻V脉冲的极性也满足交替规律。原信码中的传号都用B脉冲表示。

        HDB3的编码流程可表示为以下三个步骤:

        第一步,找到使用取代节的位置,即出现4个连0码的地方;

        第二步,确定使用哪一种类型的取代节,选择的原则是保证相邻V脉冲之间的B脉冲个数为奇数;

        第三步,确定取代节当中B脉冲和V脉冲的极性,注意B脉冲的极性要保持交替反转,而V脉冲的极性是破坏极性交替反转规律的。

        对于一串给定的码元序列,按照HDB3码的编码原则画出的波形可以有不同的形式。第一位码的极性可正可负,即可随意选择。第一个取代节可用000V也可用B00V,取决于对第一位码元之前的码元的判断。如果认为第一个4连0之前的取代节为000V+(或B00V+),且该取代节与第一个4连0之间的传号为奇数(或偶数),则第一个取代节取000V-(或B0OV-)。如果认为第一个4连0之前的取代节为000V-(或B00V-),且该取代节与第一个4连0之间的传号为奇数(或偶数),则第一个取代节取000V+(或B00V+),在本文中,第一个取代节使用000V。

        虽然HDB3码编码较复杂,但解码规则很简单,就是把原来的取代节(4个连零)找到即可,若3连0前后非零脉冲同极性,则将最后一个非零元素译为零,如+1000+1就应该译成10000,否则不用改动;若2连0前后非零脉冲极性相同,则两零前后都译为零,如-100-1,就应该译为0000,否则也不用改动。再将所有的-1变换成+1后,就可以得到原消息代码。

        基于上述理论,本文的所要实现的功能为:使用MATLAB仿真软件,先产生并输出一段随机序列,作为基带信号,然后对随机序列编码,生成HDB3码,输出编码后的随机序列,最后对HDB3码进行解码,并输出解码之后的序列,并与原始序列进行比较。

        预期现象应为:在无高斯白噪声的环境下,即理想环境下,MATLAB编译并显示基带信号序列,HDB3码序列以及对HDB3码解码后的序列的波形图,并且基带信号序列和HDB3码解码后的序列是相同的。

三、过程论述

1、基本参数

        在实现基于MATLAB的HDB3编码及解码前,应对必要参数进行配置:

        M:基带信号随机序列的码元数;

        L:每个码元中采样的次数;

        Ts:每个码元的宽度,即每个码元的持续时间为0.001秒;

        Rb:码元速率,其值为1kBaud,根据码元持续时间计算,并由于是二进制传输系统,其值与信息速率相等,即1kbit/s;

        dt:采样间隔,每个码元持续时间内采样100次,即采样间隔为10^{-4}秒;

%20        TotalT:基带信号随机序列持续总时间=码元数*每个码元持续时间;

%20        t:时间,0到TotalT-dt的间隔为1的序列,作为时间轴;

%20        Fs:采样间隔的倒数即采样频率.此处为100kHz。

%20
%20%20

clear%20all;%20%%20清除所有变量

%20%20

close%20all;%20%%20关闭所有窗口

%20%20

clc;%20%%20清屏

%20%20

%20%20

%20%20

%%%20基本参数

%20%20

M=20;%20                                %%20产生码元数

%20%20

L=100;%20                               %%20每个码元采样次数

%20%20

Ts=0.001;%20                          %%20每个码元的宽度,即码元的持续时间为0.001秒

%20%20

Rb=1/Ts; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20码元速率1kHz

%20%20

dt=Ts/L; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20采样间隔

%20%20

TotalT=M*Ts;                      %%20总时间=码元数*每个码元持续时间

%20%20

t=0:dt:TotalT-dt; %20 %20 %20 %20 %20 %20 %20 %20 %20%%20时间

%20%20

Fs=1/dt;%20                             %%20采样间隔的倒数即采样频率.此处为100kHz

%20%20

%20

%202、产生基带信号随机序列%20        基带信号是单极性非归零波形,并要求为一随机序列,故使用randi函数产生序列。

%20        如下所示,[0,1]表示限制序列的取值为0和1,所以能产生M个随机二进制码,并合为基带随机序列。由于随机信号产生连0信号较少,不能完全体现HDB3码的性质,故本文中也提供了测试序列以完整展示HDB3码特征。

%20
%20%20

%%%20产生单极性波形

%20%20

code=randi([0,1],1,M);%20                                        %%20产生M个二进制随机码

%20%20

%%20code=[0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1];%20%%20测试编码

%20
%203HDB3码编码%20(1)确定0000码组位置%20        对基带序列进行HDB3码编码,第一步是找到4连0码的位置。

%20        寻找连零码的原理是设置一个计数器,计数器遇0自加1,遇1清零,当计数器满4时,先将0000码组统一转换为B00V码组,后续再进行判断。其处理过程为将当前位置0码转为V码,当前位置往前第三个0码转为B码,其中2代表V,3代表B,将其与原始序列区分开来,计数器清零重新开始计数。

%20
%20%20

%%%20HDB3编码

%20%20

%%20Encode%20=%20[0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1];%20%%20测试编码

%20%20

Encode%20=%20code; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20原二进制码

%20%20

count%20=%200; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20用来记录连0%20的个数

%20%20

 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20将四个连0用B00V取代

%20%20

for%20i%20=%201:M

%20%20

        if(Encode(i)%20==%201)

%20%20

                count%20=%200;%20                                                   %%20遇到1,连0的计数器清零

%20%20

        else

%20%20

                count%20=%20count%20+%201;

%20%20

                if%20count%20==%204                        %%20将四个连0(0000)转成取代节,2代表V,3代表B

%20%20

                        Encode(i)%20=%202;%20                                    %%20将连0码转换为B00V取代节

%20%20

                        Encode(i-3)%20=%203;

%20%20

                        count%20=%200; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20计数器清零

%20%20

                end

%20%20

        end

%20%20

end

%20
%20(2)HDB3码编码%20        设置pV和pB作为存储V码和B码的变量。用于判断B码与V码的相对位置,从而计算两个相邻V脉冲间的信号1脉冲数。第一个取代节可用000V也可用B00V,在本文中,第一个取代节使用000V,故要将第一个B00V取代节中的B恢复0码。

%20
%20%20

count_1%20=%200;%20        %%20计数V,B之间的1的个数

%20%20

pV%20=%200;%20                %%20存储V的位置

%20%20

pB%20=%200;%20                %%20存储B的位置

%20%20

flagB%20=%201;

%20%20

%20%20

%20%20

for%20i%20=%201:M

%20%20

        if%20(Encode(i)%20==%203)%20&&%20(flagB%20==%201)%20        %flagB的作用为仅对第一个B生效

%20%20

                Encode(i)%20=%200;%20                                %%20将第一个B置0,避免干扰取代节选择

%20%20

                flagB%20=%200;

%20%20

        end

%20%20

%20%20

        if%20Encode(i)%20==%202 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20找到前一个取代节的V

%20%20

                pV%20=%20i;

%20%20

        else%20if%20Encode(i)%20==%203%20                            %%20找到后一个取代节的B

%20%20

                pB%20=%20i;

%20%20

        end

%20%20

end

%20%20

%20%20

        if(pB%20>%20pV)%20                                            %%20判断取代节选择B00V还是000V

%20%20

                for%20j%20=%20pV+1%20:%20pB-1                        %20%%20不要将B和V的值包含进去

%20%20

                        count_1%20=%20count_1%20+%20Encode(j);%20%%20计算两个传号之间1的个数

%20%20

                end

%20%20

                if%20mod(count_1%20,%202)%20==%201                %20%%20奇数个,B为0

%20%20

                        Encode(pB)%20=%200; %20 %20 %20 %20 %20 %20 %20 %20 %20  %20%%20即使用000V作为取代节

%20%20

                else

%20%20

                        Encode(pB)%20=%201;%20                    %%20偶数个,B为1,仍使用B00V作为取代节

%20%20

                end

%20%20

                pV%20=%200;

%20%20

                pB%20=%200;

%20%20

                count_1%20=%200; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20将变量归零,等待下一次找两个取代节的成功

%20%20

        end

%20%20

end

%20
%20        在遍历基带信号后,V码和B码的位置被依次确定并存储,再进行判断,若B码的位置在V码之后,即可判定这段间隔为两取代节之间的间隔。已知取代节的选取规则为:当两个相邻V脉冲之间的传号数为奇数时,采用000V取代节,若为偶数时采用BOOV取代节。则遍历除选定V码和B码位置间隔的所有位置,计算两个传号之间1的个数,并使用模2运算判断。若1的个数为奇数个,将B码恢复0码,即后一个取代节使用000V作为取代节;若1的个数为偶数个,将B码恢复为1码,即仍使用B00V作为取代节。随后将变量归零,等待下一次找两个取代节的成功。

%20        取代节确定之后,需要将修改过后的基带序列统一编译为传号的双极性码,即HDB3码序列。

%20        设置even和evenV两个变量来翻转1和V(2)的极性,B(3)码都在上一流程中转换为1码了。先将第一个1码翻转为-1码,这样设置even值为0,第二个1码极性为1,随后序列就能进入循环,不断地翻转极性。遍历Encode序列,1码则根据前一个码的极性翻转,而第一个V的极性与前一个非零符号相同,随后的V码极性翻转与1码翻转形式相同。

%20%20
%20%20

even%20=%200;%20                        %%20用来翻转1的极性

%20%20

evenV%20=%200;                       %%20用来翻转V的极性

%20%20

%20%20

%20%20

for%20i%20=%201:M%20%%20统一确定极性

%20%20

        if%20Encode(i)%20==%201

%20%20

                Encode(i)%20=%20-1;%20%%20第一个1转成-1

%20%20

                break;

%20%20

        end

%20%20

end

%20%20

%20%20

%20%20

for%20i%20=%201:M

%20%20

        if%20Encode(i)%20==%201%20%%20将1的极性正负翻转

%20%20

                if%20even%20==%200

%20%20

                        Encode(i)%20=%201;

%20%20

                else

%20%20

                        Encode(i)%20=%20-1;

%20%20

                end

%20%20

                even%20=%20~even;

%20%20

        else%20if%20Encode(i)%20==%202%20%%20将V的极性正负翻转,同时变回数值1

%20%20

                evenV%20=%20even;%20%%20第一个V的极性与前一个非零符号相同

%20%20

                if%20evenV%20==%200

%20%20

                        Encode(i)%20=%20-1;

%20%20

                else

%20%20

                        Encode(i)%20=%201;

%20%20

                end

%20%20

                evenV%20=%20~evenV;

%20%20

                end

%20%20

        end

%20%20

end

%20
%20(3)绘制基带信号和HDB3码波形%20        绘制基带序列信号波形时,将原来code的第一行复制L次,得到一个L*M的矩阵,物理上即反映为信号的采样冲激序列,再将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵,即得到了采样信号,是时间和信号数值构成的坐标矩阵,即可以反映为单极性不归零矩形脉冲波形。在绘制HDB3码序列信号波形时,除了上述步骤外,再将L*M的矩阵的后M/2行清零,即可以反映为双极性半占空比矩形脉冲波形。

%20
%20%20

%%%20绘制波形

%20%20

fz=ones(1,L);%20                            %%20定义复制的次数L,L为每码元的采样点数

%20%20

x1=code(fz,:); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20  %%20将原来code的第一行复制L次,称为L*M的矩阵

%20%20

jidai=reshape(x1,1,L*M);%20          %%20产生单极性不归零矩形脉冲波形,将刚得到的L*M矩阵,

%20%20

 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20按列重新排列形成1*(L*M)的矩阵

%20%20

x2=Encode(fz,:);%20                       %%20将原来Encode的第一行复制L次,称为L*M的矩阵

%20%20

x2(50:100,:)=0; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20将L*M的矩阵的后M/2行清零,形成半占空比波形

%20%20

hdb3=reshape(x2,1,L*M); %20 %20 %20 %20 %20%%20将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

%20%20

%20%20

%20%20

figure(1); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20绘制第1幅图

%20%20

subplot(311); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20窗口分割成3*1的,当前是第1个子图

%20%20

plot(t,jidai,'LineWidth',2); %20 %20 %20 %20 %20 %20%%20绘制基带码元波形,线宽为2

%20%20

title('基带信号波形'); %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20标题

%20%20

xlabel('时间/s'); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20x轴标签

%20%20

ylabel('幅度');%20                             %%20y轴标签

%20%20

axis([0,TotalT,-0.1,1.1])               %%20坐标范围限制

%20%20

%20%20

%20%20

subplot(312)                               %%20窗口分割成3*1的,当前是第2个子图

%20%20

plot(t,hdb3,'LineWidth',2); %20 %20 %20 %20 %20 %%20绘制HDB3的波形

%20%20

title('HDB3信号波形') %20 %20 %20 %20 %20 %20 %20 %20 %20%%20标题

%20%20

xlabel('时间/s'); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20x轴标签

%20%20

ylabel('幅度');%20                             %%20y轴标签

%20%20

axis([0,TotalT,-1.1,1.1]); %20 %20 %20 %20 %20 %20 %20%%20坐标范围限制

%20
%20        同理,对Encode序列也进行上述操作,便可以得到绘制HDB3码波形的数据。

%20

图1  部分采样数据

        最后将数据转化为图形形式表示出来。

(4)HDB3码解码

        HDB3码解码原理与实施过程相对简单。

        首先将原来的取代节(0000)找到,然后计算连0数,若3连0前后非零脉冲同极性,则将最后一个非零元素译为零,即将000V恢复为0000,否则不用改动;若2连0前后非零脉冲极性相同,则两零前后都译为零,即将B00V恢复为0000,否则也不用改动。再将所有的-1变换成+1后,就可以得到原消息代码。

%% HDB3解码部分

Decode = Encode;                         % 输入HDB3码

count = 0;

for j = 1 : M

        if Decode(j) == 0

                count = count + 1;

                if count == 3            % 若3连0前后非零脉冲同极性,则将最后一个非零元素译为零

                        if Decode(j + 1) * Decode(j - 3) == 1

                                Decode(j + 1) = 0;

                        end

                end

                if count == 2            % 若2连0前后非零脉冲极性相同,则两零前后都译为零

                        if Decode(j+1) * Decode(j-2) == 1

                                Decode(j - 2) = 0;

                                Decode(j + 1) = 0;

                        end

                end

        else

                count = 0;

        end

end

for n = 1 : M                                 %极性变换

        if Decode(n) == -1               %再将所有的-1变换成+1后,就可以得到原消息代码

                Decode(n) = 1;

        end

end

(5)绘制HDB3码解码波形

        与绘制基带信号和HDB3码波形同理。

x3=Decode(fz,:);                            % 将原来Decode的第一行复制L次,称为L*M的矩阵

hdb3_jiema=reshape(x3,1,L*M);   % 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵

subplot(313)                                  % 窗口分割成3*1的,当前是第3个子图

plot(t,hdb3_jiema,'LineWidth',2);   % 绘制经过解码后的信号

axis([0,TotalT,-0.1,1.1]);                 % 设置坐标范围

title('HDB3解码波形');                    % 标题

xlabel('时间/s');                              % x轴标签

ylabel('幅度');                                 % y轴标签

四、结果分析

        先运行一次程序。

图 2 随机序列HDB3码(1)

        清空工作区后,再次运转程序,可以观察到波形发生变化,所以最开始输入的序列是随机序列。

图 3 随机序列HDB3码(2)

        为便于观察HDB3码的特征,将随机序列替换为测试序列再次运行程序。测试序列为code=[0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1]。

图 4测试序列HDB3码

        由测试序列运行产生的波形图可以看出,HDB3码序列为[0,B-,B+,0,0,0,V+,B-,0,0,V-,B+,0,0,V+,B-,0,B+,B-,B+],原基带信号中间的3个0000码组被分别替换为000V,B00V,B00V码组,并且极性符合HDB3码规则,1码仅起到传号的作用,而V码作为破坏性交替规律的传号,极性与前一个B码极性相同。

        分别对比图11,图12和图13的第一张图和第三张图,可以发现基带信号波形和HDB3码解码波形是相同的,即基带信号序列和HDB3码解码后的序列是相同的,符合预期目标。

五、课程设计总结

        这个就自己写了。(诶嘿)

最后插入一个完整程序:

clear all;                  % 清除所有变量close all;                  % 关闭所有窗口clc;                        % 清屏%% 基本参数M=20;                       % 产生码元数    L=100;                      % 每个码元采样次数Ts=0.001;                   % 每个码元的宽度,即码元的持续时间为0.001秒Rb=1/Ts;                    % 码元速率1kHzdt=Ts/L;                    % 采样间隔TotalT=M*Ts;                % 总时间=码元数*每个码元持续时间t=0:dt:TotalT-dt;           % 时间Fs=1/dt;                    % 采样间隔的倒数即采样频率.此处为100kHz%% 产生单极性波形code=randi([0,1],1,M);      % 产生M个二进制随机码% code=[0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1];  % 测试编码%% HDB3编码% Encode = [0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1];  % 测试编码Encode = code;              % 原二进制码count = 0;                  % 用来记录连0 的个数                            % 将四个连0用B00V取代for i = 1:M    if(Encode(i) == 1)        count = 0;          % 遇到1,连0的计数器清零    else        count = count + 1;        if count == 4       % 将四个连0(0000)转成取代节,2代表V,3代表B            Encode(i) = 2;  % 将连0码转换为B00V取代节            Encode(i-3) = 3;            count = 0;      % 计数器清零        end    endendcount_1 = 0;                 % 计数V,B之间的1的个数pV = 0;                      % 存储V的位置pB = 0;                      % 存储B的位置flagB = 1;   for i = 1:M    if (Encode(i) == 3) && (flagB == 1)    %flagB的作用为仅对第一个B生效        Encode(i) = 0;      % 将第一个B置0,避免干扰取代节选择        flagB = 0;    end    if Encode(i) == 2       % 找到前一个取代节的V        pV = i;    else if Encode(i) == 3  % 找到后一个取代节的B            pB = i;        end    end    if(pB > pV)              % 判断取代节选择B00V还是000V        for j = pV+1 : pB-1  % 不要将B和V的值包含进去            count_1 = count_1 + Encode(j);  % 计算两个传号之间1的个数        end                if mod(count_1 , 2) == 1            % 奇数个,B为0            Encode(pB) = 0;                 % 即使用000V作为取代节        else            Encode(pB) = 1;  % 偶数个,B为1,仍使用B00V作为取代节        end                pV = 0;        pB = 0;        count_1 = 0;         % 将变量归零,等待下一次找两个取代节的成功    endend                             even = 0;                    % 用来翻转1的极性evenV = 0;                   % 用来翻转V的极性for i = 1:M                  % 统一确定极性    if Encode(i) == 1        Encode(i) = -1;      % 第一个1转成-1         break;    endendfor i = 1:M    if Encode(i) == 1        % 将1的极性正负翻转        if even == 0            Encode(i) = 1;        else            Encode(i) = -1;        end        even = ~even;    else if Encode(i) == 2   % 将V的极性正负翻转,同时变回数值1            evenV = even;    % 第一个V的极性与前一个非零符号相同            if evenV == 0                Encode(i) = -1;            else                Encode(i) = 1;            end            evenV = ~evenV;        end    endend%% 绘制波形fz=ones(1,L);               % 定义复制的次数L,L为每码元的采样点数x1=code(fz,:);              % 将原来code的第一行复制L次,称为L*M的矩阵jidai=reshape(x1,1,L*M);    % 产生单极性不归零矩形脉冲波形,将刚得到的L*M矩阵,                            % 按列重新排列形成1*(L*M)的矩阵x2=Encode(fz,:);            % 将原来Encode的第一行复制L次,称为L*M的矩阵x2(50:100,:)=0;             % 将L*M的矩阵的后M/2行清零,形成半占空比波形hdb3=reshape(x2,1,L*M);     % 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵figure(1);                  % 绘制第1幅图subplot(311);               % 窗口分割成3*1的,当前是第1个子图 plot(t,jidai,'LineWidth',2);% 绘制基带码元波形,线宽为2title('基带信号波形');       % 标题xlabel('时间/s');           % x轴标签ylabel('幅度');             % y轴标签axis([0,TotalT,-0.1,1.1])   % 坐标范围限制subplot(312)                % 窗口分割成3*1的,当前是第2个子图 plot(t,hdb3,'LineWidth',2); % 绘制HDB3的波形 title('HDB3信号波形')        % 标题xlabel('时间/s');           % x轴标签ylabel('幅度');             % y轴标签axis([0,TotalT,-1.1,1.1]);  % 坐标范围限制%% HDB3解码部分Decode = Encode;          % 输入HDB3码count = 0;                  for j = 1 : M      if Decode(j) == 0         count = count + 1;        if  count == 3      % 若3连0前后非零脉冲同极性,则将最后一个非零元素译为零            if Decode(j + 1) * Decode(j - 3) == 1                Decode(j + 1) = 0;            end        end        if count == 2       % 若2连0前后非零脉冲极性相同,则两零前后都译为零            if Decode(j+1) * Decode(j-2) == 1                Decode(j - 2) = 0;                Decode(j + 1) = 0;            end        end    else         count = 0;       endendfor n = 1 : M               %极性变换    if Decode(n) == -1      %再将所有的-1变换成+1后,就可以得到原消息代码        Decode(n) = 1;        endendx3=Decode(fz,:);            % 将原来Decode的第一行复制L次,称为L*M的矩阵hdb3_jiema=reshape(x3,1,L*M);% 将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵        subplot(313)                % 窗口分割成3*1的,当前是第3个子图 plot(t,hdb3_jiema,'LineWidth',2); % 绘制经过解码后的信号axis([0,TotalT,-0.1,1.1]);  % 设置坐标范围title('HDB3解码波形');       % 标题xlabel('时间/s');           % x轴标签ylabel('幅度');             % y轴标签

本文链接:https://www.kjpai.cn/news/2024-05-04/164653.html,文章来源:网络cs,作者:亙句,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

文章评论