基于FPGA的2PSK调制解调仿真

本文详细介绍了2PSK相干解调的基本原理,包括解调过程、关键参数设置及判决门限的确定。通过乘以载波并经过低通滤波器,结合1M判决脉冲,最终恢复原始信号。文章还提供了具体的模块实现代码,并分享了SignalTap仿真的结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前介绍了2ASK的解调方式是非相干解调。下面介绍相干解调,但用2PSK来进一步说明。

相干解调的思路很简单,就是把调制信号乘以载波,再通过低通滤波器,经判决脉冲输出。和之前一样,需要确认几个参数。

本示例时钟为50M,基带信号1M,载波4M,在仿真时解调时用的载波是和调制用的一样。为了恢复原来信号,判决脉冲也为1M。至于判决门限,由于相乘之后,正负都有,且正的部分对应1,负的部分对应0,所以自然地,判决门限应该为0。但由于负数表示为最高位是1,我们不能简单通过判断大于0来表示,因为所有的数据都大于0。因此我们只用判断最高位,若最高为为0,则说明是正数,则判为1,若最高位为1,则说明是负数,判为0。

先给出2PSK的调制,还是利用2选1开关。

module choose(
 input [7:0]data_in,
 input sel,
 output [7:0]data_out
);

reg[7:0]daout;

always @(sel)
begin
 if(sel)
  daout <= data_in;
 else 
  daout <= ~data_in;
end

assign data_out = daout;

endmodule

2PSK解调

module demod_psk(
 input clk,
 input clk_in,
 input [7:0]sin,
 input [7:0]data_in,
 output [13:0]fir_dout,
 output bit_data,
 output bit_sync
);

//例化乘法器模块
wire[15:0]lpm_out;
lpm_sin lpm_sin_inst(
 .dataa(data_in),
 .datab(sin),
 .result(lpm_out)
);

//例化FIR模块
wire source_valid;
wire [1:0] source_error;
wire [27:0]source_out;

My_fir U0(
    .clk                (clk),
    .reset_n            (1'b1),
    .ast_sink_data      (lpm_out[15:8]),
    .ast_sink_valid     (1'b1),
    .ast_sink_error     (2'd0),
    .ast_source_data    (source_out),
    .ast_source_valid   (source_valid),
    .ast_source_error   (source_error)
);
assign fir_dout = source_out[24:11];

wire demod = (fir_dout[13] == 1'b0) ? 1'b1 : 1'b0;

wire sync;//同步脉冲
assign sync = clk_in;

reg data_out;
always @(posedge sync)
begin
 data_out <= demod; 
end

assign bit_data = data_out;
assign bit_sync = sync;

endmodule

用Singal Tap仿真结果图
在这里插入图片描述
最后附上整个仿真文件代码,感兴趣者自行下载。
链接:https://pan.baidu.com/s/1ojijiwqUCqdx5oOIsNALgw
提取码:lb4o

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值