openofdm的complex_to_mag_sq分析

Openwifi 开源项目解读(一) Openwifi wifi 80211 无线网卡 基带 FPGA linux 驱动 开源 阅读详情

module complex_to_mag_sq (
    input clock,
    input enable,
    input reset,

    input signed [15:0] i,
    input signed [15:0] q,
    input input_strobe,

    output [31:0] mag_sq,
    output mag_sq_strobe
);

reg valid_in;
reg [15:0] input_i;
reg [15:0] input_q;
reg [15:0] input_q_neg;

complex_mult mult_inst (
    .clock(clock),
    .reset(reset),
    .enable(enable),
    
    .a_i(input_i),
    .a_q(input_q),
    .b_i(input_i),
    .b_q(input_q_neg),
    .input_strobe(valid_in),

    .p_i(mag_sq),
    .output_strobe(mag_sq_strobe)
);

always @(posedge clock) begin
    if (reset) begin
        input_i <= 0;
        input_q <= 0;
        input_q_neg <= 0;
        valid_in <= 0;
    end else if (enable) begin
        valid_in <= input_strobe;
        input_i <= i;
        input_q <= q;
        input_q_neg <= ~q+1;
    end
end
endmodule

这里用到一个复数乘法器,法则是(a+bi)(c+di)=(ac-bd)+(bc+ad)i

在进入乘法器之前之前做了变换,将其中的d去了反,因此这个模块实现的运算结果是

(ac+bd)+(bc+ad)i  

此模块用在前导码检测,具体作用后续再学习研究

openofdm:802.11 OFDM解码器的可合成的模块化Verilog实现 开放OFDM 该项目包含 802.11 OFDM PHY 解码器的 Verilog 实现。 特点是: 完全可合成(在Ettus Research USRP N210平台上测试) 完全支持传统 802.11a/g 支持 802.11n for MCS 0 - 7 @ 20 MHz 带宽 使用包含的 Python 解码器进行交叉验证 模块化设计,易于修改和扩展 请参阅完整文档。 环境设置 该项目具有以下依赖项: :用于编译 Verilog 文件和模拟。 :用于波形可视化。 输入和输出 简而言之,顶级dot11 Verilog 模块以 32 位 I/Q 样本(每个 16 位)作为输入,并在 802.11 数据包中输出解码字节。 采样率为 20 MSPS,时钟频率为 100 MHz。 这意味着该模块每 5 个时钟滴答需要一对 I/Q 样本。 执照 常见问题 问:是否需要更改主机驱动 立即下载

相关推荐

从建模到调参:基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程解析

本文详细解析了基于Simulink的两轮差速机器人轨迹跟踪PID控制全流程,涵盖运动学建模、仿真环境搭建、PID控制器设计与实现等关键环节。通过Simulink仿真和可视化调试技巧,帮助开发者掌握移动机器人运动控制的核心技术,提升轨迹跟踪精度与性能优化能力。

weixin_28717683的博客 236

openofdm初探之一: 运行仿真

openofdm是github上一个项目,这个项目实现了ofdm的解码,我记录一下自己的探索过程。刚刚搞明白了如何仿真,这里记录一下分享给大家。 1,sudo apt-get install git iverilog gtkwave make -y 2,sudo gitclone https://github.com/jhshi/openofdm 3,在步骤2的执行目录多了一个openofdm目录,进入这个目录。cd openofdm。 4,cd verilog之后进行make ,出现了...

mcupro的专栏 3188

RimWorld Mod开发避坑指南:从Defs命名规范到XML结构详解(附实战代码)

本文深入解析RimWorld Mod开发中Defs文件的编写规范与高级技巧,涵盖命名冲突预防、XML结构优化及高级功能实现。通过实战代码示例,帮助开发者避开常见陷阱,提升Mod兼容性与稳定性,特别适合RimWorld Mod开发者参考。

weixin_30790841的博客 439

openofdm02:Short Preamble Detection

openofdm02:Short Preamble Detection

m0_46521579的博客 725

[Multisim][模电实验]简易函数信号发生器的设计与实现_北京邮电大学2019级信通院电子电路实验下

本文记述了笔者设计并实现以±12V供电电压输出1KHZ~10KHZ频率连续可调的方波、三角波和正弦波的过程。其中,方波输出电压峰峰值为12V(误差<20%),占空比可调、三角波输出电压峰峰值为8V(±20%),正弦波输出电压峰峰值≥1V。

lgc0208的博客 4万+

车牌识别系统

随这图形图像技术的发展,现在的车牌识别技术准确率越来越高,识别速度越来越快。无论何种形式的车牌识别系统,它们都是由触发、图像采集、图像识别模块、辅助光源和通信模块组成的。车牌识别系统涉及光学、电器、电子控制、数字图像处理、计算视觉、人工智能等多项技术。触发模块负责在车辆到达合适位置时,给出触发信号,控制抓拍。辅助光源提供辅助照明,保证系统在不同的光照条件下都能拍摄到高质量的图像。图像预处理程序对抓拍的图像进行处理,去除噪声,并进行参数调整。然后通过车牌定位、字符识别,最后将识别结果输出。 牌照自动识别是一

FPGA/MATLAB学习教程/源码/项目合作开发 2万+

(五)OpenOFDM解码

介绍了解码的过程解调:复数到位 解交织:对每个 OFDM 符号内的比特进行混洗 卷积解码:去除冗余并纠正潜在的位错误 解扰。

qq_53732840的博客 1533

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由(如何解决OVS网桥绑定失败以及打开ovs后无法访问飞牛nas等问题)

飞牛NAS新增虚拟机功能,如果使用虚拟机网卡直通安装ikuai软路由

XiaoqiangClub的博客 1万+

开源项目OpenOFDM简介及使用教程

开源项目OpenOFDM简介及使用教程 1. 项目介绍 OpenOFDM是一个开源的Verilog实现,用于解码802.11系列的OFDM(正交频分复用)信号。该项目支持802.11a/g标准的所有比特率以及802.11n(20MHz带宽,MCS 0-7)。设计以模块化方式进行,易于扩展,并且可被综合到FPGA中。它已经在USRP N210平台上进行了测试。 2. 项目快速启动 环境准备 确保您已...

gitblog_00072的博客 1087

NX二次开发点通过云配准获取相同体

先找到体的参考方向(这个参考方向对于相同体重合之后是相同的),这个时候我们的思路是三个不共线的点确定一个坐标系,然后和绝对方向求转换矩阵。然后获取体的所有边的几何中心,把这些点通过转换矩阵转换之后存起来,再和另外一个体转换之后的点数据作对比,在误差范围内配对点的数量等于体获取点的数量就是相同体

qq_39541524的博客 1638

内容审核与文本安全技术综述:检测、过滤与对齐

检测质量高度依赖数据。毒性/仇恨/冒犯语言检测领域形成了一批经典数据集,但它们的标签体系差异很大:例如 OLID(OffensEval)强调“是否冒犯—冒犯类型—目标对象”三层结构;HateXplain 在“hate/offensive/normal”三分类之外,还提供目标群体与人类标注的 rationale span;RealToxicityPrompts 则不做离散标签,而是用毒性分数来研究“模型续写时的毒性退化”。ACL 汇编。

nmdbbzcl的博客 1357

(四)OpenOFDM子载波均衡和导频校正

在OpenOFDM中,上述任务都是由该equalizer.v模块来实现的。它首先存储第一个LTS,然后计算两个LTS的平均值并将其存储为通道增益。 对于每个输入的OFDM符号,它首先获得当前符号中导频子载波的极性,然后使用导频子载波计算剩余CFO并执行信道增益校正。

qq_53732840的博客 3304

利用 Python 爬虫进行舆情监测的实战方法

舆情监测是指对互联网上的公众舆论进行监测和分析的过程。它可以帮助企业和组织了解公众对其品牌、产品或服务的看法,以及市场竞争情况。通过舆情监测,企业可以及时发现潜在的问题和机会,从而做出相应的决策。通过本实战案例,我们了解了如何利用 Python 爬虫进行舆情监测的整个流程。从数据采集到数据分析,再到可视化展示,每一步都提供了详细的代码示例和注释。希望这些方法和技巧能够帮助你在实际工作中更好地进行舆情监测,从而为企业的决策提供有力的支持。wordcloud。

u014481728的博客 1052

openofdm中complex_to_mag的分析

一个复数我们看他的幅度运算很简单,就是根据勾股定理,用sqrt(I**2 + Q**2)算出复数点在平面坐标上距离原地的长度。但是这里牵扯到了平方和开方,在FPGA里面难以实现。 http://dspguru.com/dsp/tricks/magnitude-estimator 给出了一种简单方法, Mag ~=Alpha * max(|I|, |Q|) + Beta * min(|I|, |Q|) 其实就是说能量约等于 I,Q绝对值(正数数值)的最大值和最小值的加权之和。这两个权ALPHA和...

mcupro的专栏 810

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

openofdm初探之四:将openofmd测试文件转换成USRP的测试向量

openofdm的原作者从用usrp n210接在路由器上,生产了很多测试向量用于进行openofdm的仿真,我们当然可以用来进行仿真,并且肯定可以得到正确的结果。这里我在想的,将这些测试向量发射出去,之后用咱们fpga+ad9361平台接收回来,之后用openofdm在fpga里解析。 这个是个稍微复杂的实验,我这些文字主要是做一个将作者提供的测试向量转换成usrp可以识别的发射数据格式。 首先看看作者提供的bin_to_mem.y文件,这文件是将二进值的原始采样处理成verilog仿真软件的是rea

mcupro的专栏 641

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

openofdm 01:Power Trigger

openofdm 01:power_trigger模块

m0_46521579的博客 1514

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

(一)OpenOFDM数据包检测

这部分的工作主要是:检测到短前导码,但这个工作要在“有意义”的信号下进行,所以有了power trigger的存在。1、当信号来临时,跳过一系列低频率的无用样本,用power trigger设定频率的阈值去检测信号的到来,确定短前导码的开始。2、利用短前导码的重复性去检测数据包的到来,计算样本的相关性,如果在一定样本范围内这个相关性的值很高,就说明这部分可能是短前导码(为什么说是可能,因为在输入非0的常数)

qq_53732840的博客 927

openofdm:802.11 OFDM PHY 解码器的开源实现

openofdm:802.11 OFDM PHY 解码器的开源实现 在无线通信领域,正交频分复用(OFDM)技术以其优越的频谱效率和抗多径衰落特性,被广泛应用于现代无线局域网标准中。今天,我们将为您介绍一个名为openofdm的开源项目,它为开发者提供了一个基于Verilog语言的802.11 OFDM物理层(PHY)解码器的实现。 项目介绍 openofdm项目包含了一个完全可综合的Verilo...

gitblog_01088的博客 918

openofdm04:Symbol Alignment

openofdm04:Symbol Alignment学习笔记

m0_46521579的博客 480

OFDM_RX源码探究(二)sync_long

OFDM_RX源码探究(二)sync_long

weixin_46151667的博客 1106

OPENOFDM仿真:将FFT输入输出保存为文件

在openofdm的sync_long.v文件里面有FFT 模块,实现时域向频域的转换。每次给FFT模块输入16位(IQ各位1位)64组复数,得到IQ各为23位的64组复数。我们这里写点代码,将FFT模块的每此64组输入和64组输出记录下来保存在单独命名的文件并实现驶入输出的对应。 首先我们要实现文件名的可以动态生成。这里思路是修改文件名称的后2个字节。 1,动态生成文件名 reg [40*8-1:0] lw_fft_in_name = "./sim_out/lw/lw_fft_inXX" ; ...

mcupro的专栏 857

(二)OpenOFDM频偏校正

总结:在这个章节分别借助短前导码和长前导码完成了CFO粗校正和CFO精校正,都是先计算出偏移的相位,再根据这个相位将后面的样本全部都修正,消除CFO的影响。其实精细校正和前面的粗略校正是一个思路,先计算出相位的偏移,再将之后的样本全都按照公式修正。,是由发射器和接收器的本地振荡器 (LO) 之间的差异引起的。也就说我利用短前导码粗略地估计了这个相位偏移,并且通过计算出的值把从长前导码开始的后面的一切样本按照公式进行粗略的矫正。借助长前导码内的长训练序列,可以获得对 CFO 的更精细估计。

qq_53732840的博客 2009

(零)OpenOFDM接收端整体思路

一旦捕获射频信号并将其下变频至基带,解码管道就会启动,包括: OFDM,多载波调制的一种。通过频分复用实现高速串行数据的并行传输, 它具有较好的抗多径衰落的能力,能够支持多用户接入。OFDM主要思想是:将信道分成若干正交子信道,将高速数据信号转换成并行的低速子数据流,调制到在每个子信道上进行传输。之后所有的流程都是在接收到信号之后的处理过程,即图中的下半部分。信道增益估计:在频域中估计信道增益,用于信号均衡和功率控制。卷积解码:使用卷积码的逆映射来纠正接收到的数据中的错误。

qq_53732840的博客 605

openofdm初探之二:PDF阅读笔记123

笔记一: 从射频芯片下变频出来的基带信号进入解码流水线经历了以下处理步骤: 1,包检测 2,中心频率校准 3,快速傅里叶变换 (后续的操作将在频域上) 4,信道增益估计 5,解码 6,去交织 7,卷积译码 8,解扰 笔记二:顶层模块以及定义 下图是顶层模块: 下表是信号说明: 我梳理一下: clock: 时钟内部都采用posedge enable:模块使能,高电平有效。 reset:模块复位,高电平有效 set_stb,set_addr,set_data:是设.

mcupro的专栏 1084

openofdm初探之六:vivado环境下替代divider.v

divider是一个32位除以24位的有符号整数除法器,结果取商,忽略小数。直接用VIVADO的DIVIDER GENERATOR 生成。 上图设置了32位除以24的有符号除法器。我们看到小数部分是24位,实际无所谓,在逻辑代码中会被忽略实际综合中也会被优化掉从而不占用逻辑资源。 上图设置了clocks per division是1,这样生成的除法器面积大运行快。可以选择其他数值在资源占用和速度方面折衷。 上图可见输出结果的高32位是商,是我们需要的。 上述的IP保存位div_gen...

mcupro的专栏 1012
上一篇: openofdm中calc_mean模块分析
下一篇: RIFFA之LINUX驱动学习之一:CIRC_QUEUE文件
mcupro
博客等级 码龄17年 1558粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值