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

2010-12-29 14:19 2293 13 14 分类: 消费电子

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

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

以下是2ASK的调制波形:


tu.jpg





由仿真波形可以看到,发送的码元依次为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); //调用了ISE的IP 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

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户1406868 2011-12-4 09:45

如何调用ISE的IP Core生成正弦函数
相关推荐阅读
用户1587532 2012-12-04 14:56
被忽略的硬件常识
          在特权同学的《都是IO弱上拉惹的祸》一文中,提及了Altera的CPLD在初始化时管脚通常会处于弱上拉状态。在实际示波器采样来看,就表现在上电初 期IO脚会有一个短暂(当时是持...
用户1587532 2012-12-04 14:56
都是IO弱上拉惹的祸
         开发的一款液晶驱动器,接收MCU过来的指令和数据进行图像显示。使用了一片可编程(带使能和PWM调节控制)的背光芯片。在CPLD设计中,上电复位状态将背光使能拉低(关闭),直到MC...
用户1587532 2011-12-29 09:39
四通道波形动态演示效果
 ">http:// http://v.youku.com/v_show/id_XMzM3MDY2NjYw.html   这效果,Cortex-M3可以吗?     ...
用户1587532 2011-12-21 12:54
高速绘图显示,还是FPGA给力
  示波器的效果,曾经以为难于上青天,殊不知咱用FPGA一样能够轻松效仿。目前只是单通道的显示效果,随后送上4通道独立或叠加的波形效果。          感兴趣的朋友不妨去看看他的详细参数:...
用户1587532 2011-10-12 10:23
Keil存储空间自定义分配
Keil存储空间自定义分配          看来Capital-Micro的软件支持包做得还不够到位啊,在51编程环境KeilC中使用Astro II器件光有个Capital Micro D...
用户1587532 2011-09-22 16:38
源同步信号跨时钟域采集的两种方法
源同步信号跨时钟域采集的两种方法            对于数据采集接收的一方而言,所谓源同步信号,即传输待接收的数据和时钟信号均由发送方产生。FPGA应用中,常常需要产生一些源同步接口信...
EE直播间
更多
我要评论
1
13
关闭 站长推荐上一条 /3 下一条