实验报告课程名称:通信原理指导老师:邓焰陈宏成绩:____________实验名称:伪随机序列编码及解码实验类型:基础规范型同组学生姓名:一、实验目的和要求(必填)二、实验内容和原理(必填)三、主要仪器设备(必填)四、操作方法和实验步骤五、实验数据记录和处理六、实验结果与分析(必填)七、讨论、心得0实验要求:1、环境与工具适应;2、伪随机编码,含5级m序列、M序列;3、归零码、差分码的编码与解码;4、双相码、CMI的编码与解码;5、AMI、PST、HDB3的编码与解码。15级m序列:实验原理:查找本原多项式表,得到5级m序列的本原多项式为x5+x2+1,即有C0=C2=C5=1,C1=C3=C4=0对照课本P380图12-4,以逻辑运算“异或”表示加法器的“加”运算,则可以得到以下的电路图:其中,上图中右下角BNAND6器件的使用是为了避免序列“00000”的出现。当只有为全零时,BNAND6输出才为1,此时5个D触发器的置位端有效,将“00000”置为“11111”装订线2仿真结果:上图两条粗线间恰为一个周期,共有31us,而一个状态占1us,即为31个状态,这与5级m序列的总状态数N=25-1=31相等。此外,经检验有430aaa从而得以验证结果的正确性。实验波形:25级M序列:实验原理:查找本原多项式表,得到5级m序列的本原多项式为x5+x2+1,即有C0=C2=C5=1,C1=C3=C4=0对照课本P380图12-4,以逻辑运算“异或”表示加法器的“加”运算,并在此基础上增加一条支路(a4、a3、a2、a1的或非)引到加法器,则可以得到以下的电路图:下图中左下角BAND6即为在5级m序列基础中新增的支路,其中多余的2个端口直接接地。3仿真结果:上图两条粗线间恰为一个周期,共有31us,而一个状态占1us,即为31个状态,这与5级M序列的总状态数N=25-1=31相等。此外,经检验符合课本P391递推方程(),从而得以验证结果的正确性。此外,上图虚线框中为全零序列“00000”。实验波形:43单极性归零码:实验原理:为方便起见,取占空比为50%。当原码为1,则编码为1→0;当原码为0,则编码恒为0。比对上述伪随机序列仿真结果的时钟脉冲序列和5级m(或M)序列,发现单极性归零码可以通过两者进行逻辑“与”得到,示意图如下所示。基于此可以得到归零码的编码电路。至于解码电路的得到,比对上图左下角的原码(也即解码)和右下角的编码并结合时钟脉冲,不难发现,若将时钟脉冲作为上升沿触发而将编码作为输入则可以得到原码波形。在此需要注意的是,虽然数电课程中讲的是上升沿触发要看触发前的状态,但由于实际器件存在延时,故在Quartus2仿真及实验过程中均是由触发后的状态决定,这一点已在实践中得到证明。由此借助上升沿触发的D触发器进行归零码的解码。其中,之所以在解码时又使用与门将时钟脉冲和5级m序列进行“与”运算而非直接从编码输出引出的原因,是从编码输出引出的相位和编码直接输出的相位差了180度,尽管两者都是同一点上的波形。仿真结果:实验波形:54差分码:实验原理:差分码是以跳变来表示高电平,以不变表示低电平,即0→1和1→0表示高电平;0→0和1→1表示低电平。编码过程如上所示,由编码规则不难发现,编码中要发生跳变就必须当原码为1时。因而,可以借助T触发器来实现。其中,CP脉冲作为上升沿触发,原码作为T端口输入。当然,也可以借助于D触发器,以下采用的是同组同学的电路图,思想是通过D触发器保存前一个状态,并将与当前状态进行异或运算。显然,若前后两个状态不同,异或后得到“1”,否则为“0”,这与差分的编码思想一致,只是此方法会至少滞后1个周期。基于此便可得到差分码的编码电路图。至于解码过程,若仍采用上述编码的后一种思想,则解码与编码同效。这是因为解码的原码编码编码解码CP原码编码6差分码便是原码,可以说是两者处于相同的地位。当然,这也可以从“异或”逻辑运算的特点得到。因此,仍将编码的前后状态进行“异或”运算便得到解码,只不过又至少滞后编码一个周期以上。正是因为该方法的编码和解码必然会有较大的延时滞后,故电路图上右上角存在两个为减少滞后时间而采用的D触发器,当然这其中的性价比不高。仿真结果:实验波形:编码原码原码解码75双相码:实验原理:双相码的编码规则是当原码为1时,则编码为1→0;当原码为0时,则编码为0→1。具体的波形表示为由上面波形图,不难发现,编码为CP脉冲与原码的“同或”,且解码为CP脉冲与编码的“同或”运算。基于此可得到电路图如下所示。仿真结果:实验波形:CP原码编码86CMI:实验原理:CMI的编码规则为当原码为1,编码为11与00相互交替;当原码为0,编码为01。由此可见,CMI码为1B2B码。由于当原码为1时存在交替现象,因此考虑采用VHDL语言进行编码。其中,设定一个变量用于记录“1”出现的状态,以此判别输出为11还是00。原码编码原码解码9其中,编码为位于右下角偏上模块而解码为其下方的模块,具体VHDL语言在下文给出。仿真结果:实验波形:原码编码解码原码10编码解码LIBRARYieee;USECMI_codeISPORT(Clk:instd_logic;CP:instd_logic;DataInput:instd_logic;DataOutput:outstd_logic);ENDCMI_code;ARCHITECTURECMIcodeOFCMI_codeISsignalControlSig:std_logic;--CMI码元控制信号signalcount:std_logic;--'00''11'signalDataBuffer:std_logic_vector(1downto0);--CMI码元寄存beginprocess(CP)--CMI编码进程beginifCP'eventandCP='1'thenCASEDataInputISWHEN'0'=DataBuffer=01;WHEN'1'=--基带信号为'1'则交替编为11和00;ifcount='0'thenDataBuffer=11;count='1';elseDataBuffer=00;count='0';endif;ENDCASE;endif;endprocess;process(Clk)--CMI码元输出进程beginifClk'eventandClk='1'thenifControlSig='1'thenDataOutput=DataBuffer(0);ControlSig='0';elseDataOutput=DataBuffer(1);ControlSig='1';endif;endif;endprocess;endCMIcode;LIBRARYieee;USECMI_decodeISPORT(Clk:instd_logic;CP:instd_logic;DataInput:instd_logic;DataOutput:outstd_logic);ENDCMI_decode;ARCHITECTURECMIdecodeOFCMI_decodeISsignalControlSig:std_logic;--CMI码元控制信号signalcount:std_logic;--'00''11'signalDataBuffer:std_logic_vector(1downto0);--CMI码元寄存beginprocess(Clk)--CMI码元输出进程beginifClk'eventandClk='1'thenifControlSig='1'thenDataBuffer(1)=DataInput;ControlSig='0';DataOutput=DataBuffer(1)xnorDataBuffer(0);elseDataBuffer(0)=DataInput;ControlSig='1';endif;endif;endprocess;endCMIdecode;117AMI:实验原理:AMI的编码规则为当原码为1时,编码为+1与-1相互交替;当原码为0时,编码为0保持不变。由于AMI为三电平码,故可以通过两路二电平码来表示,如下所示:其中,当(+)为高电平、(-)零电平时,表示+1;当(+)为零电平、(-)高电平时,表示-1;而(+)与(-)均为零电平时,表示0。因此,可以将三电平码AMI的编解码化为两路二电平码的编解码。为避免两路二电平码的不同步造成编码、解码出错,故采用VHDL语言对AMI进行编码,而解码部分则直接由两路二电平码进行“异或”运算得到。仿真结果:CP原码编码(+)(-)12实验波形:编码原码编码原码解码LIBRARYieee;USEAMI_codeISPORT(Clk:instd_logic;DataInput:instd_logic;DataOutput1:outstd_logic;DataOutput0:outstd_logic);ENDAMI_code;ARCHITECTUREAMIcodeOFAMI_codeISsignalcount:std_logic;--'01''10'signalDataBuffer:std_logic_vector(1downto0);beginprocess(Clk)beginifClk'eventandClk='1'thenCASEDataInputISWHEN'0'=DataBuffer=00;WHEN'1'=ifcount='0'thenDataBuffer=01;count='1';elseDataBuffer=10;count='0';endif;ENDCASE;DataOutput1=DataBuffer(1);DataOutput0=DataBuffer(0);endif;endprocess;endAMIcode;138PST:实验原理:PST为2B1T码,其编码规则如下所示,实验要求正负模式无条件轮流切换。其中,编码时需要设置一个变量用于记录此次编码所采用的模式。在该状态变量已决定所采用的编码模式后,对两位二进制原码进行相应的编码,这就是编码乃至解码部分所基于的思想。仿真结果:编码解码14LIBRARYieee;USEPST_codeISPORT(Clk:instd_logic;DataInput:instd_logic;DataOutput1:outstd_logic;DataOutput0:outstd_logic);ENDPST_code;ARCHITECTUREPSTcodeOFPST_codeISsignalcount:std_logic;--'01''10'signalDataBuffer:std_logic_vector(1downto0);signalDbuffer:std_logic_vector(1downto0);signalc1:std_logic;signalc2:std_logic;beginprocess(Clk)beginifClk'eventandClk='1'thenifcount='0'thenDbuffer=DataBuffer;DataBuffer(1)=DataInput;count='1';elseDataBuffer(0)=DataInput;count='0';endif;ifcount='0'thenCASEDbufferISWHEN00=DataOutput1='0';DataOutput0='1';WHEN01=DataOutput1='0';DataOutput0='0';WHEN10=ifc1='0'thenDataOutput1='1';DataOutput0='0';c1='1';elseDataOutput1='0';DataOutput0='1';c1='0';endif;WHEN11=DataOutput1='1';