原创 基于fpga的FSK调制

2015-3-17 21:07 972 13 13 分类: FPGA/CPLD

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 [15:0]signal_out;

wire [9:0]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 [9:0]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

文章评论0条评论)

登录后参与讨论
我要评论
0
13
关闭 站长推荐上一条 /2 下一条