算法之 正交解调

verlog 语言编写 前访真通过.........

 


// 1. 无符号--> 有符号

// 2. 正交解调 --> 1. 乘上 cos 2. 乘上SIN

// 3. 正交解调 --> 低通滤波


module Demodulation(input wire clk,
input wire clk_enable,
input wire reset_n,
input wire[9:0] din_data,
output wire[9:0] dout_data
);



//
// 无符号--> 有符号
wire [9:0] SigData;
assign SigData = din_data - 10'd512;

 

//
// Sig_I = 信号 * cos
// Sig_Q = 信号 * sin

reg[9:0] value_cos;
reg[9:0] value_sin;
reg[1:0] value_num;
always @(posedge clk or negedge reset_n)
begin
if(!reset_n) begin
value_num <= 0;
end else begin
value_num <= value_num + 2'd1;
end
end


always @(posedge clk or negedge reset_n)
begin
if(!reset_n) begin
value_cos <= 1;
end else begin
case (value_num)
00: value_cos <= 1;
01: value_cos <= 0;
10: value_cos <= -1;
11: value_cos <= 0;
endcase
end
end

always @(posedge clk or negedge reset_n)
begin
if(!reset_n) begin
value_sin <= 0;
end else begin
case (value_num)
00: value_sin <= 0;
01: value_sin <= 1;
10: value_sin <= 0;
11: value_sin <= -1;
endcase
end
end



wire [9:0] Sig_I;
wire [9:0] Sig_Q;

assign Sig_I = SigData * value_cos;
assign Sig_Q = SigData * value_sin;




// 对 I Q 信号分别进行低通滤波



wire [9:0] Sig_out_I;
wire [9:0] Sig_out_Q;


LPF_Filter low1( .clk(clk),
.clk_enable(1),
.reset(reset_n),
.filter_din(Sig_I),
.filter_dout(Sig_out_I)
);

LPF_Filter low2( .clk(clk),
.clk_enable(1),
.reset(reset_n),
.filter_din(Sig_Q),
.filter_dout(Sig_out_Q)
);

// 求平方和的平方根


sqrt sq1( .clk(clk),
.clk_enable(1),
.reset_n(reset_n),
.sqrt_x(Sig_out_I),
.sqrt_y(Sig_out_Q),
.out_data(dout_data));


// 进行平滑...似乎不需要



endmodule

 

 

 

 

 

 

 

 

 

// wire [19:0] tmp_x;
// wire [19:0] tmp_y;

// assign tmp_x = sqrt_x[9]?({sqrt_x[9],10'b11111_11111,sqrt_x[8:0]}):({sqrt_x[9],10'b00000_00000,sqrt_x[8:0]});
// assign tmp_y = sqrt_y[9]?({sqrt_y[9],10'b11111_11111,sqrt_y[8:0]}):({sqrt_y[9],10'b00000_00000,sqrt_y[8:0]});


module LPF_Filter( input wire clk,
input wire clk_enable,
input wire reset,

input wire[31:0] DinTick,
output wire[31:0] OutTick,

input wire [9:0] filter_din,
output wire [9:0] filter_dout);

wire [31:0] filter_in;
wire [31:0] filter_out;

assign filter_in = filter_din[9]?({filter_din[9],22'b11_11111_11111_11111_11111,filter_din[8:0]}):({filter_din[9]

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值