matlab - HDB3编码译码数字信号调制解调 - 图文 一、HDB3码的编码和译码1、试验要求:驾驭HDB3码的编码规那么,利用MATLAB设计并实现HDB3码的编码和译码 2、原理简述: 编码规那么: 1〕 先将消息代码变换成AMI码,假设AMI码中连0的个数小于4,此时的AMI码就是HDB3码; 2〕 假设AMI码中连0的个数大于3,那么将每4个连0小段的第4个0变换成与前一个非 0符号(+1或-1)同极性的符号,用表示(+1+,-1-); 3〕 为了不破坏极性交替反转,当相邻符号之间有偶数个非0符号时,再将该小段的 第1个0变换成+B或-B,符号的极性与前一非零符号的相反,并让后面的非零符号从符号起先再交替改变 例如: 消息代码: 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1 AMI码: +1 0 0 0 0 -1 0 0 0 0 +1 -1 0 0 0 0 +1 -1 HDB3码:+1 0 0 0 +V -1 0 0 0 -V +1 -1 +B 0 0 +V -1 +1 简易编码方法: 原理:HDB3码既要包含AMI的交替特性使输出无直流特性,又要不出现四个以上的连0,因此可以先满意后者。
1〕把\换为取代节 规那么:先将\分别开来,第一个\干脆变为\,然后数相邻两个\之间\的个数,奇数那么变为\,偶数那么变为\ 2〕更新符号 依据教材有:B总是与其前面的1或V符号相反,V总是与前面的1或B相符号一样,1总是与前面的V或B符号相反,就可以编符号了 例如: 消息代码:1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 中间码: 1 0 0 0 V 1 0 0 0 V 1 1 B 0 0 V 1 1 B 0 0 V B 0 0 V 1 1 1 0 0 0 V 1 HDB3码:+1 0 0 0 +V -1 0 0 0 -V +1 -1 +B 0 0 + V -1 +1 -B 0 0 -V +B 0 0 +V -1 +1 -1 0 0 0 -V +1解码规那么:1〕虽然编码很困难,但解码规那么很简洁,假设3连“0”前后非零脉冲同极性,那么将最终一个非零元素译为零,如+1010+1 就应当译成“10100”;假设2连 “0”前后非零脉冲极性一样,那么两零前后都译为零,如-101-1,就应当译为0000.2〕再将全部的-1变换成+1后,就可以得到原消息代码。
3、程序运行结果 运行程序 可自定义二进制序列,第一个窗口显示所输入的二进制码元,其次个窗口为HDB3编码后的结果,最终一个窗口为解码后的窗口 4、程序源代码 % ch7example6prog1.m % AMI码的编码 xn=[1 0 1 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0];% 输入单极性码 yn=xn;% 输出yn初始化 num=0;% 计数器初始化 for k=1:length(xn) if xn(k)==1 num=num+1; % \计数器 if num/2 == fix(num/2) % 奇数个1时输出-1,进展极性交替 yn(k)=1; else yn(k)=-1; end end end % HDB3编码 num=0; % 连零计数器初始化 yh=yn; % 输出初始化 sign=0; % 极性标记初始化为0 V=zeros(1,length(yn));% V脉冲位置记录变量 B=zeros(1,length(yn));% B脉冲位置记录变量 for k=1:length(yn) if yn(k)==0 num=num+1; % 连“0”个数计数 if num==4 % 假如4连“0” num=0; % 计数器清零 yh(k)=1*yh(k-4); % 让0000的最终一个0变更为与前一个非零符号一样极性的符号 V(k)=yh(k); % V脉冲位置记录 if yh(k)==sign % 假如当前V符号与前一个V符号的极性一样 yh(k)=-1*yh(k); % 那么让当前V符号极性反转,以满意V符号间相互极性反转要求 yh(k-3)=yh(k); % 添加B符号,与V符号同极性 B(k-3)=yh(k); % B脉冲位置记录 V(k)=yh(k); % V脉冲位置记录 yh(k+1:length(yn))=-1*yh(k+1:length(yn)); % 并让后面的非零符号从V符号起先再交替改变 end sign=yh(k); % 记录前一个V符号的极性 end else num=0; % 当前输入为“1”那么连“0”计数器清零 end end % 编码完成re=[xn',yn',yh',V',B']; % 结果输出: xn AMI HDB3 V&B符号 % HDB3解码 input=yh; % HDB3码输入 decode=input; % 输出初始化 sign=0; % 极性标记初始化 for k=1:length(yh) if input(k) ~= 0 if sign==yh(k) % 假如当前码与前一个非零码的极性一样 decode(k-3:k)=[0 0 0 0];% 那么该码判为V码并将*00V清零 end sign=input(k); % 极性标记 end end decode=abs(decode); % 整流error=sum([xn'-decode']); % 解码的正确性检验,作图subplot(3,1,1);stairs([0:length(xn)-1],xn);axis([0 length(xn) -2 2]); subplot(3,1,2);stairs([0:length(xn)-1],yh);axis([0 length(xn) -2 2]); subplot(3,1,3);stairs([0:length(xn)-1],decode);axis([0 length(xn) -2 2]);二、数字带通系统的调制解调1、试验要求:利用MATLAB程序设计语言实现数字带通系统的调制解调。
2、原理简述:数字调制:用数字基带信号限制载波,把数字基带信号变换为数字带通信号〔已调信号〕的过程成为数字调制数字调制与模拟调制的根本原理一样,但数字信号有离散取值的特点因此数字调制技术有两种方法:①利用模拟调制的方法实现数字调制,即把数字调制看成是模拟调制的特例把数字基带信号当成是模拟信号的特别状况处理;②利用数字信号的离散取值特点通过开关键限制载波,从而实现数字调制这种方法称为键控法,比方对载波的振幅,频率和相位进展键控,便可得到振幅键控ASK,频移键控FSK和相移键控PSK三种根本的数字调制方式 振幅键控ASK振幅键控利用载波的幅度改变来传递数字信息,而其频率和初始相位保持不变在2ASK中,载波的幅度只有两种改变状态,分别为对应二进制信息“0”或“1”常用的二进制振幅键控方式称为通断键控,2ASK信号的一般表达式为 其中 2ASK有两种根本的解调方法:非相干解调和相干解调,解调方式如下: 非相干解调方式:带通滤波器——全波整流器——低通滤波器——抽样判决器——输出 想干解调方式:带通滤波器——相乘器——低通滤波器——抽样判决器——输出 频移键控FSK频移键控是利用载波的频率改变来传递数字信息。
在2FSK中,载波的频率随二进制基带信号在f1和f2两个频率点检改变一个2FSK信号可以看成是两个不同载频的2ASK信号的叠加其产生方式有两种:①采纳模拟调频来实现②也可采纳键控法实现,即在二进制基带矩形序列的限制下通过开关电路对两个不同的独立频率源进展选通但相邻码元之间的相位不必须连续2FSK信号的常用解调方法也采纳相干解调和非相干解调两种方式其解调原理是将2FSK信号分解为上下两路2ASK信号分别进展解调,然后进展判决 相移键控PSK二进制相移键控2PSK相移键控是利用载波的相位改变来传递数字信息,而振幅和频率保持不变在2PSK中,通常用初始相位0和π分别表示二进制“1”和“0”与2ASK信号的产生方式相比,只是对s(t)的要求不同,在2ASK中是单极性的,而在2PSK中是双极性的基带信号2PSK信号的解调通常采纳相干解调法 二进制差分相移键控2DPSK 2PSK相干解调时,由于载波复原中相位有0、π模糊性,导致解调过程出现“反向工作”现象,复原出的数字信号“1”“0”倒置,使得2PSK难以实际应用而2DPSK是利用前后相邻码元的载波相对相位改变传递数字信息,对于一样的基带数字信息序列,由于初始相位不同,2DPSK的相位可以不同。
也就是说,2DPSK信号的相位并不干脆代表基带信号,而前后码元相对相位的差才唯一确定信号符号2DPSK信号的解调方法为相干解调〔极性比拟法〕加码反变换法 其原理为:带通滤波器——相乘器——低通滤波器——抽样判决器——码反变换——输出 3、程序运行结果 2ASK调制后的信号以及2ASK解调后的信号 2PSK基带信号,2PSK调制后的信号以及2PSK解调后的信号 2FSK调制后的信号以及运用2FSK解调后的信号本文来源:网络收集与整理,如有侵权,请联系作者删除,谢谢!第8页 共8页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页第 8 页 共 8 页。