2ASK在FPGA中的实现(2)

2019-02-16 00:26

(式9)

将式(7)、式(8)和式(9)代入式(6),可得

2ASK信号的功率谱的特点

2ASK信号的功率谱由连续谱和离散谱两部分组成 2ASK信号的带宽是基带脉冲波形带宽的两倍

2 2ASK的实现方案

2.1 2ASK信号的调制

2ASK信号的产生实现比较简单,如图2-1:

图2-1 2ASK调制信号的产生框图

输入信号是01信号,通过二选一开关,当信号为零时直接输出0,当信号为一时,使信号和载波相乘,这样就可以产生2ASK调制信号。

载波可以用正弦波,也可以用数字载波。如用正弦波作为载波,则在解调的时候必须用上面原理介绍的解调方法。如选用数字载波,则在解调时只需要通过对一个信号周期内的调制信号进行脉冲计数,便可实现解调。

2.2 2ASK信号的解调

以正弦波为载波的2ASK解调在原理部分已经介绍,在此不再赘述。下面介绍以数字信号为载波的2ASK信号的解调。 解调框图如下:

6

图2-2 以数字信号为载波的2ASK信号解调框图

时钟计数器进行以信号周期为周期的循环计数,为判别模块提供判别时刻,调制信号计数器也是以信号周期为周期的循环计数器,将判别时刻的计数值送入判别模块进行判别,由此实现解调。

2.3 方案的选择

根据前面的分析,可以知道。用数字信号为载波来实现2ASK相对容易很多,原理也简单。传统的以正弦波为载波的2ASK,实现起来可以增进对通信原理的理解。两种实现方法各有各自的优点,本次实验从容易的开始做,因此选用数字载波。

3 2ASK的FPGA实现

3.1 2ASK调制解调的FPGA实现

3.1.1 2ASK调制部分的代码

module two_ASK(clk,reset,en,sig_S,out_rdy,carriers,modata);

input clk; input reset;

input en; output carriers; output sig_S,out_rdy;

7

output modata;

reg [1:0] cnt; reg carriers; wire modata; reg sig_S,out_rdy;

reg[2:0] addr; reg[2:0] count;

parameter COUNT=3'd7; always @(posedge clk) begin:initial_control if(reset) begin addr<=3'd0;

count<=3'd0; end

else if(en) begin

count<=count+1; if(count==COUNT) begin

always @(posedge clk) begin:Red_sig if(en) case(addr) 4'd0:sig_S<=0; 4'd1:sig_S<=0;

8

addr<=addr+1;

end

else addr<=addr; out_rdy<=1;

end

end

4'd2:sig_S<=1; 4'd3:sig_S<=0; 4'd4:sig_S<=0; 4'd5:sig_S<=1; 4'd6:sig_S<=1; 4'd7:sig_S<=1; endcase end

// 下面实现载波产生

always@(posedge clk) begin

endmodule

程序的前面一部分是产生01信号,后面的是产生载波,然后是使01信号和载波相乘,实现了调制。

assign modata=sig_S&carriers; if(reset)

begin cnt<=2'b00; carriers<=0; end else if(en) cnt<=cnt+1;

carriers<=~cnt[1];

end

3.1.2 2ASK解调部分代码

module ASK_two(clk,reset,in_rdy,modata,demodata,out_rdy,cnt,k);

input clk,reset,in_rdy; input modata; output demodata;

9

output out_rdy;

reg demodata; reg out_rdy;

output [2:0] cnt; output [2:0] k;

reg [2:0] cnt; reg [2:0] k; //时钟计数器 always@(posedge clk) begin if(reset) cnt<=3'b00; else if(in_rdy) begin if(cnt==3'b111) cnt<=3'b00; else

cnt<=cnt+1; end

end

// 2ASK调制信号计数器

always @(posedge clk) begin if(reset) k <= 3'b000; else if(in_rdy) begin if(modata) k<= k+1;

else k<=k;

//判别模块

// 此过程完成2_ASK信号的解调10


2ASK在FPGA中的实现(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:工地例会汇报材料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: