热度 13
2015-3-17 21:07
974 次阅读|
0 个评论
2.2 PSK调制的基本原理 2.2.1概述 相移键控(PSK)是一种用载波相位表示输入信号信息的调制技术。移相键控分为绝对移相和相对移相两种。 2.2.2PSK调制的原理 图2.2.2 PSK框图 相移键控通过载波的不同相位来发送内容,振幅保持不变和频率保持不变。实现框图如图2.2.1所示。在2PSK中,初始相位0表示二进制“0”。 初始相位π分别表示二进制“1”。因此,2PSK信号的时域表达式如2.1式所示。 ...................................................................................(2.2.1) 其中,表示第n个符号的绝对相位: ......................................................................(2.2.2) 所以,式(2.2.1)可以简化为 ...................................................................(2.2.3) 由于表示两种的信号波形相同,相位相差180度,所以2PSK信号表达成(2-4)式 ............................................................................................(2.2.4) 其中 .....................................................................................(2.2.5) 其中g(t)为矩形脉冲,而统计为 .................................................................................... (2.2.6) 2.2.3 PSK调制优点 数字信号调制载波,提高了抗干扰性,容易加密传输。 代码 module psk( data_in, sys_clk, en, sys_restn, signal_out ); ///////////////////////////////////////////////////////// input data_in; input sys_clk; input sys_restn; input en; output signal_out; wire address_sig; ////////////////////////////////////////////////////////// sin_data sin_data_ROM ( .address ( address_sig ), .clock ( sys_clk ), .q ( signal_out ) ); ///////////////////////////////////////////////////////// //数据两级缓存 reg data_in_frist; reg data_in_second; always @(posedge sys_clk or negedge sys_restn) begin if(!sys_restn) begin data_in_second = 1'b0; data_in_frist = 1'b0; end else begin data_in_frist = data_in; data_in_second = data_in_frist; end end /////////////////////////////////////////////////////////////////// assign phase_shift = data_in_frist^data_in_second; /////////////////////////////////////////////////////////////////// //2PSK phase_shift 180 reg count; always @(posedge sys_clk or negedge sys_restn) begin if(!sys_restn) count = 10'd0; else if(en) begin if(phase_shift) count = count + 10'd512; else count = count + 1'b1; end else count = count; end /////////////////////////////////////////////////////////// assign address_sig = count; endmodule