浙大通信原理大作业Word下载.doc
《浙大通信原理大作业Word下载.doc》由会员分享,可在线阅读,更多相关《浙大通信原理大作业Word下载.doc(16页珍藏版)》请在冰点文库上搜索。
实验波形:
25级M序列:
对照课本P380图12-4,以逻辑运算“异或”表示加法器的“加”运算,并在此基础上增加一条支路(a4、a3、a2、a1的或非)引到加法器,则可以得到以下的电路图:
下图中左下角BAND6即为在5级m序列基础中新增的支路,其中多余的2个端口直接接地。
上图两条粗线间恰为一个周期,共有31us,而一个状态占1us,即为31个状态,这与5级M序列的总状态数N=25-1=31相等。
此外,经检验符合课本P391递推方程(12.2-47),从而得以验证结果的正确性。
此外,上图虚线框中为全零序列“00000”。
3单极性归零码:
为方便起见,取占空比为50%。
当原码为1,则编码为1→0;
当原码为0,则编码恒为0。
比对上述伪随机序列仿真结果的时钟脉冲序列和5级m(或M)序列,发现单极性归零码可以通过两者进行逻辑“与”得到,示意图如下所示。
基于此可以得到归零码的编码电路。
至于解码电路的得到,比对上图左下角的原码(也即解码)和右下角的编码并结合时钟脉冲,不难发现,若将时钟脉冲作为上升沿触发而将编码作为输入则可以得到原码波形。
在此需要注意的是,虽然数电课程中讲的是上升沿触发要看触发前的状态,但由于实际器件存在延时,故在Quartus2仿真及实验过程中均是由触发后的状态决定,这一点已在实践中得到证明。
由此借助上升沿触发的D触发器进行归零码的解码。
其中,之所以在解码时又使用与门将时钟脉冲和5级m序列进行“与”运算而非直接从编码输出引出的原因,是从编码输出引出的相位和编码直接输出的相位差了180度,尽管两者都是同一点上的波形。
原码
编码
解码
4差分码:
CP
差分码是以跳变来表示高电平,以不变表示低电平,即0→1和1→0表示高电平;
0→0和1→1表示低电平。
编码过程如上所示,由编码规则不难发现,编码中要发生跳变就必须当原码为1时。
因而,可以借助T触发器来实现。
其中,CP脉冲作为上升沿触发,原码作为T端口输入。
当然,也可以借助于D触发器,以下采用的是同组同学的电路图,思想是通过D触发器保存前一个状态,并将与当前状态进行异或运算。
显然,若前后两个状态不同,异或后得到“1”,否则为“0”,这与差分的编码思想一致,只是此方法会至少滞后1个周期。
基于此便可得到差分码的编码电路图。
至于解码过程,若仍采用上述编码的后一种思想,则解码与编码同效。
这是因为解码的差分码便是原码,可以说是两者处于相同的地位。
当然,这也可以从“异或”逻辑运算的特点得到。
因此,仍将编码的前后状态进行“异或”运算便得到解码,只不过又至少滞后编码一个周期以上。
正是因为该方法的编码和解码必然会有较大的延时滞后,故电路图上右上角存在两个为减少滞后时间而采用的D触发器,当然这其中的性价比不高。
5双相码:
双相码的编码规则是当原码为1时,则编码为1→0;
当原码为0时,则编码为0→1。
具体的波形表示为
由上面波形图,不难发现,编码为CP脉冲与原码的“同或”,且解码为CP脉冲与编码的“同或”运算。
基于此可得到电路图如下所示。
6CMI:
CMI的编码规则为当原码为1,编码为11与00相互交替;
当原码为0,编码为01。
由此可见,CMI码为1B2B码。
由于当原码为1时存在交替现象,因此考虑采用VHDL语言进行编码。
其中,设定一个变量用于记录“1”出现的状态,以此判别输出为11还是00。
其中,编码为位于右下角偏上模块而解码为其下方的模块,具体VHDL语言在下文给出。
编码 解码
LIBRARYieee;
USEieee.std_logic_1164.ALL;
USEieee.std_logic_unsigned.ALL;
ENTITYCMI_codeIS
PORT
(Clk:
instd_logic;
CP:
DataInput:
DataOutput:
outstd_logic);
ENDCMI_code;
ARCHITECTURECMIcodeOFCMI_codeIS
signalControlSig:
std_logic;
--CMI码元控制信号
signalcount:
--'
00'
'
11'
signalDataBuffer:
std_logic_vector(1downto0);
--CMI码元寄存
begin
process(CP)--CMI编码进程
begin
ifCP'
eventandCP='
1'
then
CASEDataInputIS
WHEN'
0'
=>
DataBuffer<
="
01"
;
=>
--基带信号为'
则交替编为"
11"
和"
00"
ifcount='
count<
='
else
endif;
ENDCASE;
endif;
endprocess;
process(Clk)--CMI码元输出进程
begin
ifClk'
eventandClk='
then
ifControlSig='
then
DataOutput<
=DataBuffer(0);
ControlSig<
='
else
=DataBuffer
(1);
ControlSig<
endif;
endif;
endCMIcode;
ENTITYCMI_decodeIS
DataInput:
outstd_logic);
ENDCMI_decode;
ARCHITECTURECMIdecodeOFCMI_decodeIS
ifControlSig='
DataBuffer
(1)<
=DataInput;
ControlSig<
DataOutput<
=DataBuffer
(1)xnorDataBuffer(0);
else
DataBuffer(0)<
ControlSig<
endif;
endif;
endCMIdecode;
7AMI:
AMI的编码规则为当原码为1时,编码为+1与-1相互交替;
当原码为0时,编码为0保持不变。
由于AMI为三电平码,故可以通过两路二电平码来表示,如下所示:
(+)
(-)
其中,当(+)为高电平、(-)零电平时,表示+1;
当(+)为零电平、(-)高电平时,表示-1;
而(+)与(-)均为零电平时,表示0。
因此,可以将三电平码AMI的编解码化为两路二电平码的编解码。
为避免两路二电平码的不同步造成编码、解码出错,故采用VHDL语言对AMI进行编码,而解码部分则直接由两路二电平码进行“异或”运算得到。
编码
ENTITYAMI_codeIS
DataOutput1:
outstd_logic;
DataOutput0:
ENDAMI_code;
ARCHITECTUREAMIcodeOFAMI_codeIS
01'
10'
begin
process(Clk)
ifClk'
then
CASEDataInputIS
WHEN'
DataBuffer<
10"
DataOutput1<
=DataBuffer
(1);
DataOutput0<
=DataBuffer(0);
endAMIcode;
8PST:
PST为2B1T码,其编码规则如下所示,实验要求正负模式无条件轮流切换。
其中,编码时需要设置一个变量用于记录此次编码所采用的模式。
在该状态变量已决定所采用的编码模式后,对两位二进制原码进行相应的编码,这就是编码乃至解码部分所基于的思想。
ENTITYPST_codeIS
DataOutput1:
DataOutput0:
ENDPST_code;
ARCHITECTUREPSTcodeOFPST_codeIS
signalDbuffer:
signalc1:
std_logic;
signalc2:
ifClk'
ifcount='
then
Dbuffer<
=DataBuffer;
DataBuffer
(1)<
count<
else
DataBuffer(0)<
count<
endif;
then
CASEDbufferIS
WHEN"
DataOutput1<
DataOutput0<
DataOutput0<
ifc1='
thenDataOutput1<
c1<
else
DataOutput1<
ENDCASE;
else
CASEDbufferIS
WHEN"
DataOutput1<
ifc2='
c2<
endif;
DataOutput1<
endif;
endif;
endPSTcode;
ENTITYPST_decodeIS
DataInput1:
DataInput0:
DataOutput:
ENDPST_decode;
ARCHITECTUREPSTdecodeOFPST_decodeIS
signalcount:
signalDBuffer0:
signalDataBuffer1:
signalDataBuffer0:
signalDBuffer1:
signalDBuffer11:
ifcount='
DBuffer11<
=DBuffer1;
DBuffer1<
=DataBuffer1;
DataBuffer1
(1)<
=DataInput1;
DataBuffer1(0)<
=DataInput0;
else
DBuffer0<
=DataBuffer0;
DataBuffer0
(1)<
=DataInput1;
DataBuffer0(0)<
ifDBuffer1="
andDBuffer0="
thenDataOutput<
endif;
if(DBuffer1="
)or(DBuffer1="
)thenDataOutput<
if(DBuffer1="
)thenDataOutput<
ifDBuffer11="
if(DBuffer11="
)or(DBuffer11="
ifDBuffer11="
endif;
endPSTdecode;
9HDB3:
HDB3码是1B1T码,其编码规则:
1.当连0个数小于等于3个时,HDB3码就是AMI码;
2.当寄存器记录发现连续出现了4个0,那么就用B00V来取代这4个0;
3.V与前一个非0的脉冲(包括B)极性相同,B用来保证相邻的V极性变化;
4.B