当前位置: 首页 > java >正文

USRP B210 TX_IQ处理

文章目录

      • FIFO模块
      • chdr_xxxx_to_16sc_chain模块
      • new_tx_deframer模块
      • new_tx_control模块
      • DUC模块
        • 1、数据拆分:I/Q 通道分离
        • 2、两级半带插值滤波
        • 3、 CIC 插值滤波
        • 4、 数字上变频(NCO 混频)
        • 5、 增益调整与限幅
        • 6. 输出映射
      • tx_responder模块
      • b200_io模块

在这里插入图片描述

FIFO模块

tx_tdata(64 位,USB传输过来,总线时钟域bus_clk)通过FIFO同步到射频时钟域radio_clk,tx_tdata_r

chdr_xxxx_to_16sc_chain模块

将 64 位 CHDR 格式的tx_tdata_r转换为 16 位复数样本格式,tx_data_i[63:0](实部 + 虚部各 16 位)

new_tx_deframer模块

解帧与样本生成:
将格式化后的数据流解包为样本数据txsample_tdata(176 位,包含多样本信息)。
生成txsample_tvalid(样本有效)和txsample_tready(准备好接收样本)信号。

new_tx_control模块

根据配置寄存器(SR_TX_CTRL)生成控制信号:
sample[31:0]:选通样本数据进入 DUC 链。
生成序列编号seqnum、源 IDsid等元数据,用于响应生成

DUC模块

输入32位sample[31:0]数据

1、数据拆分:I/Q 通道分离

sample 的高 16 位和低 16 位分别对应 I 通道 和 Q 通道 的基带信号:

// 从sample中提取I/Q数据(各16位,扩展为18位定点数)
hb47_int hb1_i0 (.data_in({sample[31:16], 2'b00}),  // I通道:高16位 + 2位零扩展(18位)...
);
hb47_int hb1_q0 (.data_in({sample[15:0], 2'b00}),   // Q通道:低16位 + 2位零扩展(18位)...
);
  • sample[31:16]:I 通道原始数据(16 位),扩展为 18 位定点数(补 2 位 0)。
  • sample[15:0]:Q 通道原始数据(16 位),扩展为 18 位定点数(补 2 位 0)。
2、两级半带插值滤波

第一级半带插值滤波:

hb_interp #(.IWIDTH(18),.OWIDTH(18),.ACCWIDTH(WIDTH)) hb_interp_i (.clk(clk), .rst(rst), .bypass(~enable_hb1),        //enable_hb1=0,直接输出输入数据.cpo(cpo),                    // 插值速率.stb_in(strobe_hb1),          .data_in({sample[31:16], 2'b0}),  // I通道输入.stb_out(strobe_hb2),         .data_out(hb1_i)              // 第一级滤波后的I通道数据(18位)
);
// Q通道同理,处理sample低16位
  • cpo = enable_hb2 ? ({interp_rate,1’b0}) : interp_rate
    插值速率interp_rate由ctrl_tdata通过USB总线传输过来

第二级半带插值滤波:

small_hb_int #(.WIDTH(18)) small_hb_interp_i (.clk(clk), .rst(rst), .bypass(~enable_hb2),        //若enable_hb2=0,直接输出输入数据.stb_in(strobe_hb2),        .data_in(hb1_i),              // 第一级滤波后的I通道数据(18位).output_rate(interp_rate),    // 最终插值速率(8位,决定过采样倍数).stb_out(strobe_cic),        .data_out(hb2_i)              // 第二级滤波后的I通道数据(18位)
);
// Q通道同理
3、 CIC 插值滤波

进一步提高采样率,支持大倍数过采样(最大 128 倍)

cic_interp_i (.signal_in(hb2_i),  // 第二级半带滤波后的I通道数据(18位).signal_out(i_interp),  //CIC插值后的I通道数据(18位)
);
cic_interp_q (.signal_in(hb2_q),  // 第二级半带滤波后的Q通道数据(18位).signal_out(q_interp),  // CIC插值后的Q通道数据(18位)
);
4、 数字上变频(NCO 混频)

通过 CORDIC 算法 实现正交混频,将基带信号搬移到目标载波频率:

//zwidth = 24;
cordic_z24 cordic (.xi({i_interp, {(cwidth-18){1'b0}}}),  // I通道数据扩展为24位.yi({q_interp, {(cwidth-18){1'b0}}}),  // Q通道数据扩展为24位.zi(phase[31:32-zwidth]),  // NCO相位 32位相位累加器.xo(da_c),  // 混频后的I通道信号(24位).yo(db_c),  // 混频后的Q通道信号(24位)
);
5、 增益调整与限幅

增益调整:

// I通道增益调整
mult_i (.A(da_c[23:6]), .B(scale_factor), .P(prod_i));  // 截取24位中的高18位相乘
// Q通道增益调整
mult_q (.A(db_c[23:6]), .B(scale_factor), .P(prod_q));//prod_i\prod_q为36位

scale_factor[17:0]同样是由ctrl_tdata通过USB总线传输过来

setting_reg #(.my_addr(BASE+1), .width(18)) sr_1(.clk(clk),.rst(rst),.strobe(set_stb),.addr(set_addr),.in(set_data),.out(scale_factor),.changed());

限幅处理:
确保不超过前端输入范围

clip_i (.in(prod_i[35:0]), .out(i_clip));  // 36位输入 → 33位输出
clip_q (.in(prod_q[35:0]), .out(q_clip));
6. 输出映射

最终,限幅后的 33 位信号被截取为 WIDTH 位( 24 位),输出到模拟前端:

assign tx_fe_i = i_clip[32:33-WIDTH];  // 截取高WIDTH位(24位)
assign tx_fe_q = q_clip[32:33-WIDTH];

tx_responder模块

24 位 I/Q 信号的高 16 位([23:8])赋值给tx输出:

   always @(posedge radio_clk) begintx[31:16] <= (run_tx) ? tx_fe_i[23:8] : tx_idle[31:16];tx[15:0]  <= (run_tx) ? tx_fe_q[23:8] : tx_idle[15:0];end

根据 TX 处理结果(如 ACK / 错误码)生成响应包txresp_tdata_r。
包含序列编号seqnum、错误码error_code等元数据,用于反馈给主机。

b200_io模块

通过ODDR2将基带数据(tx_i0/tx_q0/tx_i1/tx_q1)串行化tx_codec_d[11:0]然后发送给AD9363

http://www.xdnf.cn/news/4739.html

相关文章:

  • Ceph PG unfound/lost 问题排查与解决
  • 记录Token反序列化OAuth2Authentication(主要是直接存储用户信息的UserDetails )
  • [matlab]private和+等特殊目录在新版本matlab中不允许添加搜索路径解决方法
  • 医院信息集成平台是什么?怎么促进医院信息化建设?
  • sui在windows虚拟化子系统Ubuntu和纯windows下的安装和使用
  • 皇冠CAD(CrownCAD)建模教程:小型风力发电机
  • [逆向工程]什么是HOOK(钩子)技术(二十一)
  • MySQL回表详解!
  • 视频添加字幕脚本分享
  • AI学习路径
  • GrassRoot备份项目
  • 剖析 FFmpeg:从基本功能到过滤器,实现音视频处理的灵活性
  • python编译exe执行时报错:OSError:[WinError6]句柄无效
  • http协议理解
  • LLM 论文精读(三)Demystifying Long Chain-of-Thought Reasoning in LLMs
  • Qt 编译 sqldrivers之psql
  • Linux中的防火墙
  • 【RAG】indexing 中的 Hierarchical Indexing(分层索引)
  • Matlab 四分之一车体被动和模糊控制对比
  • 文件包含 任意文件读取
  • B站搜索关键词全攻略:掌握B站搜索关键词的运作机制
  • 深度学习-160-Dify工具之从模板创建应用示例
  • 评论系统表结构设计--简单模型
  • 每日学习Java之一万个为什么(待完善)
  • [原创](现代Delphi 12指南):[macOS 64bit App开发]: 如何获取自身程序的所在的目录?
  • Mac 平台获取地区标识符号
  • Windows (可永久)暂停更新用以解决兼容性、性能与稳定性问题
  • CH32V208GBU6沁恒绑定配对获取静态地址
  • 高能数造全固态电池干法电极高品质原纤化技术:驱动干法和全固态电池制造新进程
  • inotify事件驱动机制