1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/aJibm5py
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
在64QAM调制解调系统中,需要生成一定数量的数字信号,作为调制信号和参考信号。数字信号可以使用随机数生成器产生,也可以使用特定的算法生成。在本文中,我们采用了带噪声的随机数生成器产生数字信号,其中噪声是为了模拟实际通信中的信道噪声。
在64QAM调制解调系统中,需要将数字信号转换成模拟信号进行传输,这个过程称为信号调制。在QAM调制中,数字信号分为实部和虚部两个部分进行编码,然后将它们分别调制到不同的载波上,最后将两个载波叠加在一起。
4.部分源码
`timescale 1ns / 1ps
module TOPS_64QAM(
input i_clk,
input i_rst,
input signed[7:0]i_SNR,
input[1:0]i_en,
input i_dat,
output [5:0]o_ISET,
output signed[15:0]o_I64QAM,
output signed[15:0]o_Q64QAM,
output signed[15:0]o_I64QAMs,
output signed[15:0]o_Q64QAMs,
output signed[31:0]o_mod_T,
output signed[15:0]o_Nmod_T,
output signed[31:0]o_modc_R,
output signed[31:0]o_mods_R,
output signed[31:0]o_Ifir_R,
output signed[31:0]o_Qfir_R,
output [5:0]o_wbits,
output o_bits,
output [1:0]o_bits_head,
output [7:0]o_peak,
output o_en_data,
output o_en_pn,
output o_frame_start,
output signed[31:0]o_error_num,
output signed[31:0]o_total_num
);
reg[9:0]cnt;
always @(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
cnt <= 10'd0;
end
else begin
if(cnt == 79)
cnt <= 10'd0;
else
cnt <= cnt+10'd1;
end
end
reg dat_clk;
always @(posedge i_clk or posedge i_rst)
begin
if(i_rst)
begin
dat_clk <= 1'd0;
end
else begin
if(cnt == 39)
dat_clk <= 1'd1;
else
dat_clk <= 1'd0;
end
end
T64QAM T64QAMU(
.i_clk (dat_clk),
.i_clksample(i_clk),
.i_rst (i_rst),
.i_en (i_en),
.i_dat (i_dat),
.o_ISET (o_ISET),
.o_clk_3div(),
.o_I64QAM(o_I64QAM),
.o_Q64QAM(o_Q64QAM),
.o_I64QAMs (o_I64QAMs),
.o_Q64QAMs (o_Q64QAMs),
.o_cos (),
.o_sin (),
.o_modc (),
.o_mods (),
.o_mod (o_mod_T)
);
//加入信道
awgns awgns_u(
.i_clk(i_clk),
.i_rst(i_rst),
.i_SNR(i_SNR), //这个地方可以设置信噪比,数值大小从-10~50,
.i_din(o_mod_T[28:13]),
.o_noise(),
.o_dout(o_Nmod_T)
);
16QAM解调
R64QAM R64QAMU(
.i_clk (dat_clk),
.i_clksample(i_clk),
.i_rst (i_rst),
.o_clk_3div(),
.i_med (o_Nmod_T),
.o_cos (),
.o_sin (),
.o_modc (o_modc_R),
.o_mods (o_mods_R),
.o_Ifir (o_Ifir_R),
.o_Qfir (o_Qfir_R),
.o_wbits(o_wbits),
.o_bits (o_bits),
.o_bits_head(o_bits_head),
.o_peak(o_peak),
.o_en_data(o_en_data),
.o_en_pn(o_en_pn),
.o_frame_start(o_frame_start)
);
Error_Chech Error_Chech_u1(
.i_clk(dat_clk),
.i_rst(i_rst),
.i_trans({~i_dat,1'b1}),
.i_en_data(o_en_data),
.i_rec({~o_bits,1'b1}),
.o_error_num(o_error_num),
.o_total_num(o_total_num)
);
endmodule
0sj2_072m
---