基于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次,即采样间隔为秒;
%20TotalT:基带信号随机序列持续总时间=码元数*每个码元持续时间;
%20t:时间,0到TotalT-dt的间隔为1的序列,作为时间轴;
%20Fs:采样间隔的倒数即采样频率.此处为100kHz。
%20%20%20%20clear%20all;%20%%20清除所有变量
%20%20close%20all;%20%%20关闭所有窗口
%20%20clc;%20%%20清屏
%20%20%20%20
%20%20
%%%20基本参数
%20%20M=20;%20 %%20产生码元数
%20%20L=100;%20 %%20每个码元采样次数
%20%20Ts=0.001;%20 %%20每个码元的宽度,即码元的持续时间为0.001秒
%20%20Rb=1/Ts; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20码元速率1kHz
%20%20dt=Ts/L; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20采样间隔
%20%20TotalT=M*Ts; %%20总时间=码元数*每个码元持续时间
%20%20t=0:dt:TotalT-dt; %20 %20 %20 %20 %20 %20 %20 %20 %20%%20时间
%20%20Fs=1/dt;%20 %%20采样间隔的倒数即采样频率.此处为100kHz
%20%20%20
2、产生基带信号随机序列
%20基带信号是单极性非归零波形,并要求为一随机序列,故使用randi函数产生序列。
%20如下所示,[0,1]表示限制序列的取值为0和1,所以能产生M个随机二进制码,并合为基带随机序列。由于随机信号产生连0信号较少,不能完全体现HDB3码的性质,故本文中也提供了测试序列以完整展示HDB3码特征。
%20%20%20%20%%%20产生单极性波形
%20%20code=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
3、HDB3码编码
%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%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%20Encode%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%20count%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%20for%20i%20=%201:M
%20%20if(Encode(i)%20==%201)
%20%20count%20=%200;%20 %%20遇到1,连0的计数器清零
%20%20else
%20%20count%20=%20count%20+%201;
%20%20if%20count%20==%204 %%20将四个连0(0000)转成取代节,2代表V,3代表B
%20%20Encode(i)%20=%202;%20 %%20将连0码转换为B00V取代节
%20%20Encode(i-3)%20=%203;
%20%20count%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%20end
%20%20end
%20%20end
%20
(2)HDB3码编码
%20设置pV和pB作为存储V码和B码的变量。用于判断B码与V码的相对位置,从而计算两个相邻V脉冲间的信号1脉冲数。第一个取代节可用000V也可用B00V,在本文中,第一个取代节使用000V,故要将第一个B00V取代节中的B恢复0码。
%20%20%20%20count_1%20=%200;%20 %%20计数V,B之间的1的个数
%20%20pV%20=%200;%20 %%20存储V的位置
%20%20pB%20=%200;%20 %%20存储B的位置
%20%20flagB%20=%201;
%20%20%20%20
%20%20
for%20i%20=%201:M
%20%20if%20(Encode(i)%20==%203)%20&&%20(flagB%20==%201)%20 %flagB的作用为仅对第一个B生效
%20%20Encode(i)%20=%200;%20 %%20将第一个B置0,避免干扰取代节选择
%20%20flagB%20=%200;
%20%20end
%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%20pV%20=%20i;
%20%20else%20if%20Encode(i)%20==%203%20 %%20找到后一个取代节的B
%20%20pB%20=%20i;
%20%20end
%20%20end
%20%20%20%20
if(pB%20>%20pV)%20 %%20判断取代节选择B00V还是000V
%20%20for%20j%20=%20pV+1%20:%20pB-1 %20%%20不要将B和V的值包含进去
%20%20count_1%20=%20count_1%20+%20Encode(j);%20%%20计算两个传号之间1的个数
%20%20end
%20%20if%20mod(count_1%20,%202)%20==%201 %20%%20奇数个,B为0
%20%20Encode(pB)%20=%200; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20即使用000V作为取代节
%20%20else
%20%20Encode(pB)%20=%201;%20 %%20偶数个,B为1,仍使用B00V作为取代节
%20%20end
%20%20pV%20=%200;
%20%20pB%20=%200;
%20%20count_1%20=%200; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20将变量归零,等待下一次找两个取代节的成功
%20%20end
%20%20end
%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%20even%20=%200;%20 %%20用来翻转1的极性
%20%20evenV%20=%200; %%20用来翻转V的极性
%20%20%20%20
%20%20
for%20i%20=%201:M%20%%20统一确定极性
%20%20if%20Encode(i)%20==%201
%20%20Encode(i)%20=%20-1;%20%%20第一个1转成-1
%20%20break;
%20%20end
%20%20end
%20%20%20%20
%20%20
for%20i%20=%201:M
%20%20if%20Encode(i)%20==%201%20%%20将1的极性正负翻转
%20%20if%20even%20==%200
%20%20Encode(i)%20=%201;
%20%20else
%20%20Encode(i)%20=%20-1;
%20%20end
%20%20even%20=%20~even;
%20%20else%20if%20Encode(i)%20==%202%20%%20将V的极性正负翻转,同时变回数值1
%20%20evenV%20=%20even;%20%%20第一个V的极性与前一个非零符号相同
%20%20if%20evenV%20==%200
%20%20Encode(i)%20=%20-1;
%20%20else
%20%20Encode(i)%20=%201;
%20%20end
%20%20evenV%20=%20~evenV;
%20%20end
%20%20end
%20%20end
%20
(3)绘制基带信号和HDB3码波形
%20绘制基带序列信号波形时,将原来code的第一行复制L次,得到一个L*M的矩阵,物理上即反映为信号的采样冲激序列,再将刚得到的L*M矩阵,按列重新排列形成1*(L*M)的矩阵,即得到了采样信号,是时间和信号数值构成的坐标矩阵,即可以反映为单极性不归零矩形脉冲波形。在绘制HDB3码序列信号波形时,除了上述步骤外,再将L*M的矩阵的后M/2行清零,即可以反映为双极性半占空比矩形脉冲波形。
%20%20%20%20%%%20绘制波形
%20%20fz=ones(1,L);%20 %%20定义复制的次数L,L为每码元的采样点数
%20%20x1=code(fz,:); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20将原来code的第一行复制L次,称为L*M的矩阵
%20%20jidai=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%20x2=Encode(fz,:);%20 %%20将原来Encode的第一行复制L次,称为L*M的矩阵
%20%20x2(50:100,:)=0; %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20将L*M的矩阵的后M/2行清零,形成半占空比波形
%20%20hdb3=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%20subplot(311); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20%%20窗口分割成3*1的,当前是第1个子图
%20%20plot(t,jidai,'LineWidth',2); %20 %20 %20 %20 %20 %20%%20绘制基带码元波形,线宽为2
%20%20title('基带信号波形'); %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20标题
%20%20xlabel('时间/s'); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20x轴标签
%20%20ylabel('幅度');%20 %%20y轴标签
%20%20axis([0,TotalT,-0.1,1.1]) %%20坐标范围限制
%20%20%20%20
%20%20
subplot(312) %%20窗口分割成3*1的,当前是第2个子图
%20%20plot(t,hdb3,'LineWidth',2); %20 %20 %20 %20 %20 %%20绘制HDB3的波形
%20%20title('HDB3信号波形') %20 %20 %20 %20 %20 %20 %20 %20 %20%%20标题
%20%20xlabel('时间/s'); %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %20 %%20x轴标签
%20%20ylabel('幅度');%20 %%20y轴标签
%20%20axis([0,TotalT,-1.1,1.1]); %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,作者:亙句,版权归作者所有,如需转载请注明来源和作者,否则将追究法律责任!