热度 14
2010-12-29 14:19
2290 次阅读|
1 个评论
ASK--又称幅移键控法。载波幅度是随着调制信号而变化的。其最简单的形式是,载波在二进制调制信号控制下通断, 这种方式还可称作通-断键控或开关键控(OOK) 。 MASK,又称多进制数字调制法。在二进制数字调制中每个符号只能表示0和1(+1或-1)。但在许多实际的数字传输系统中却往往采用多进制的数字调制方式。与二进制数字调制系统相比,多进制数字调制系统具有如下两个特点: 第一:在相同的信道码源调制中,每个符号可以携带log2M比特信息,因此,当信道频带受限时可以使信息传输率增加,提高了频带利用率。但由此付出的代价是增加信号功率和实现上的复杂性。第二,在相同的信息速率下,由于多进制方式的信道传输速率可以比二进制的低,因而多进制信号码源的持续时间要比二进制的宽。加宽码元宽度,就会增加信号码元的能量,也能减小由于信道特性引起的码间干扰的影响等。 以下是2ASK的调制波形: 由仿真波形可以看到,发送的码元依次为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 maskout; output rdymask; wire coen;//基带信号发送使能,高有效 wire codein;//发送2bit基带码元 wire sin_out,cos_out; wire ce;//正余弦发生器使能信号 wire 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 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 codein;//发送2bit基带码元 output coen; reg coen; reg codein; reg source;//从高到低连续发送该16bit码元信号(两个码元为一组发送) reg 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 ,source }; 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 pha; reg ce; reg 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((pha16'h8000)(pha16'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 codein; input sin_out; output maskout; output rdymask; reg code0,code; reg rdymask; reg 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 ,sin_out ,sin_out }; 2'b10: maskout = {sin_out ,sin_out }; 2'b11: maskout = {sin_out ,sin_out ,sin_out }+{sin_out ,sin_out }; default maskout = 16'dx; endcase end else rdymask = 0; code0 = codein; code = code0; end endmodule