原创 基于FPGA的多进制振幅键控(MASK)

2008-5-15 16:09 8774 19 22 分类: FPGA/CPLD

基于FPGA的多进制振幅键控(MASK<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 


ASK--又称幅移键控法。载波幅度是随着调制信号而变化的。其最简单的形式是,载波在二进制调制信号控制下通断, 这种方式还可称作通-断键控或开关键控(OOK)


MASK,又称多进制数字调制法。在二进制数字调制中每个符号只能表示01(+1-1)。但在许多实际的数字传输系统中却往往采用多进制的数字调制方式。与二进制数字调制系统相比,多进制数字调制系统具有如下两个特点: 第一:在相同的信道码源调制中,每个符号可以携带log<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />2M比特信息,因此,当信道频带受限时可以使信息传输率增加,提高了频带利用率。但由此付出的代价是增加信号功率和实现上的复杂性。 第二,在相同的信息速率下,由于多进制方式的信道传输速率可以比二进制的低,因而多进制信号码源的持续时间要比二进制的宽。加宽码元宽度,就会增加信号码元的能量,也能减小由于信道特性引起的码间干扰的影响等。


 


以下是2ASK的调制波形:(点击看大图)


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />


点击看大图 


       由仿真波形可以看到,发送的码元依次为10 11 01 00 01 11 00 10 10 11,从调制后波形看一看到,输出的波形与发送的码元相对应。11时振幅最大,00时振幅最小(为零)。


 


Verilog代码:


 


//顶层模块


module mask_top(clk,rst,en,maskout,rdymask);


input clk;


input rst;


input en;


output[15:0] maskout;


output rdymask;


 


wire coen;//基带信号发送使能,高有效


wire[1:0] codein;//发送2bit基带码元


wire[15:0] sin_out,cos_out;


wire ce;//正余弦发生器使能信号


wire[15:0] pha;//正弦发生器相位


wire clk_80;//主时钟的40分频信号


wire rdy;


 


clkfenpin clkfenpin(clk,rst,clk_80);


codesource          codesource(clk_80,rst,en,codein,coen);


phase    phase(clk,rst,coen,pha,ce);


cos        cos(pha,clk,ce,cos_out,sin_out,rdy); //调用了ISEIP Core生成正弦函数


mask     mask(clk,rst,codein,sin_out,rdy,maskout,rdymask);


 


endmodule


 


 


//时钟80分频模块


module clkfenpin(clk,rst,clk_80);


input clk;


input rst;


output clk_80;


 


reg[5:0] num;


reg clk_80;


 


always @ (posedge clk)


begin


       if(rst) begin num <= 6'd0; clk_80 <= 0; end


       else


       begin


              num <= num+1;


              if(num==6'd39) begin num <= 6'd0; clk_80 <=~clk_80; end


       end


end


 


endmodule


 


 


//基带码元产生模块


module codesource(clk,rst,en,codein,coen);


input clk;


input rst;


input en;


output[1:0] codein;//发送2bit基带码元


output coen;


 


reg coen;


reg[1:0] codein;


reg[15:0] source;//从高到低连续发送该16bit码元信号(两个码元为一组发送)


reg[3:0] num;


 


always @ (posedge clk or posedge rst)


begin


       if(rst)


       begin


              source <= 16'b1011010001110010;


              codein <= 1'bx;


              num <= 4'b1111;


              coen <= 0;


       end


       else if(en)


       begin


              coen <= 1;


              codein <= {source[num],source[num-1]};


              num <= num-2;


       end


       else


       begin


              source <= 16'b1011010001110010;


              codein <= 1'bx;


              num <= 4'b1111;


              coen <= 0;


       end


end


 


endmodule


 


 


//相位变化模块


module phase(clk,rst,coen,pha,ce);


input clk;


input rst;


input coen;


output ce;


output[15:0] pha;


 


reg ce;


reg[15:0] pha;


 


always @ (posedge clk)


begin


       if(rst) begin pha <= 16'h9b80; ce <= 0; end


       else if(coen)


       begin


              ce <= 1;


              pha <= pha+16'h0506;


              if((pha<16'h8000)&&(pha>16'h6087)) begin pha <= 16'h9b80; end


       end


       else begin pha <= 16'h9b80; ce <= 0; end


end


 


endmodule


 


 


//调制模块


module mask(clk,rst,codein,sin_out,rdy,maskout,rdymask);


input clk;


input rst;


input rdy;


input[1:0] codein;


input[15:0] sin_out;


output[15:0] maskout;


output rdymask;


 


reg[1:0] code0,code;


reg rdymask;


reg[15:0] maskout;


 


always @ (posedge clk)


begin


       if(rst) begin maskout <= 16'dx; rdymask <= 0; end


       else if(rdy)


       begin


              rdymask <= 1;


              case(code)


                     2'b00: maskout <= 16'h0000;


                     2'b01: maskout <= {sin_out[15],sin_out[15],sin_out[15:2]};


                     2'b10: maskout <= {sin_out[15],sin_out[15:1]};


                     2'b11: maskout <= {sin_out[15],sin_out[15],sin_out[15:2]}+{sin_out[15],sin_out[15:1]};


                     default maskout <= 16'dx;


                     endcase


       end


       else rdymask <= 0;


 


       code0 <= codein;


       code <= code0;


end


 


endmodule

文章评论3条评论)

登录后参与讨论

用户150012 2012-3-4 22:35

很久没有逛你的博客了 自从改版之后 这EDN博客风格太不习惯了 感觉很烂

用户216176 2010-6-3 16:50

特权同学加油,还等着你的书呢,呵呵

朱玉龙 2010-4-30 13:38

咋就能写这么快,555555

ilove314_323192455 2010-4-30 11:02

看来压力很大啊

用户1569463 2010-4-30 11:00

有签名书?

用户1584993 2010-4-30 10:48

你还欠了我一本圣经,记得啊

用户1584993 2010-4-30 10:48

期待出版,我要签名书留作纪念啊,航航哥

ilove314_323192455 2008-7-18 19:49

是这样的,你观察了波形了吧,如果基带码元是01,10,11,它们的高度关系是1:2:3。你再看代码,因为最高位bit15是符号位,我的想法其实是做移位,然后得到1:2:3的关系,具体为什么你可以再想想(要考虑好符号位)。

用户1371455 2008-7-18 10:24

楼主你好,请问一下调制模块中的:case中maskout的各个表达式,是怎么确定的? 我知道不同的code值对应于调制信号的不同幅度,但是这个幅度值又是怎么确定下来的呢??先谢过了 我的QQ是281108987,不介意的话可以加为好友,一起学习,呵呵!

用户1371455 2008-7-18 10:22

楼主你好,请问一下调制模块中的: case(code) 2'b00: maskout <= 16'h0000; 2'b01: maskout <= {sin_out[15],sin_out[15],sin_out[15:2]}; 2'b10: maskout <= {sin_out[15],sin_out[15:1]}; 2'b11: maskout <= {sin_out[15],sin_out[15],sin_out[15:2]}+{sin_out[15],sin_out[15:1]}; default maskout <= 16'dx; endcase 是怎么确定的,我知道不同的code值对应于调制信号的不同幅度,但是这个幅度值又是怎么确定下来的呢??先谢过了 我的QQ是281108987,不介意的话可以加为好友,一起学习,呵呵!
相关推荐阅读
特权ilove314 2016-06-30 21:16
例说FPGA连载6:FPGA开发所需的技能
例说FPGA连载6:FPGA开发所需的技能 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   前面的文字已经做了很多铺垫,相信读...
特权ilove314 2016-06-28 21:09
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-28 21:05
例说FPGA连载5:FPGA的优势与局限性
例说FPGA连载5:FPGA的优势与局限性 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   若要准确评估FPGA技术能否满足开...
特权ilove314 2016-06-26 22:11
例说FPGA连载4:FPGA语言与厂商介绍
例说FPGA连载4:FPGA语言与厂商介绍 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   Verilog与VHDL 说到FP...
特权ilove314 2016-06-23 21:26
例说FPGA连载3:FPGA与其它主流芯片的比较
例说FPGA连载3:FPGA与其它主流芯片的比较 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   FPGA、ASIC和ASSP...
特权ilove314 2016-06-21 20:32
例说FPGA连载2:FPGA是什么
例说FPGA连载2:FPGA是什么 特权同学,版权所有 配套例程和更多资料下载链接: http://pan.baidu.com/s/1c0nf6Qc   2015年伊始,Intel欲出资百亿美金收...
我要评论
3
19
关闭 站长推荐上一条 /2 下一条