Sora软件部分分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Sora系统架构图 硬件部分包括一块无线控制板(RCB),以及一系列可替换射频前端模块。RCB为射频前端模块和个人PC之间提供了一个基于PCIe总线标准的接口,可支持高速的数字信号采样。同时RCB上包含了一个存储器,用以缓存预先计算好的数据波形,这一功能可以显著的降低延时。 UMX编程 首先要了解什么是ARO以及ARO的工作原理 Sora平台支持射频前端模块,不同的射频前端可能采用不同的芯片组,工作方式也不一样。为了避免这些复杂的操作,Sora将无线电射频硬件抽象成一个对象,称为抽象无线电对象(ARO)。 ARO为应用软件提供了一个统一的接口用以控制和读写不同的射频硬件。ARO与射频硬件具有一一对应的关系。 一个ARO包括一个发送信道,一个接收信道和一组统一的控制寄存器。 应用程序通过ARO控制射频前端的过程: 当应用程序执行写控制寄存器操作时,这一命令通过ARO传到RCB上,再由RCB转发到射频前端模块上,最后由射频前端模块上的固件将这一命令翻译成射频芯片特定的操作指令。 在抽象无线电对象中,接收信道表示为一个数字信号样本流。接收到的信号在射频前端被数字化,然后传给RCB,最后由RCB通过直接内存访问(DMA)写入计算机内存中。 Sora ARO通过两“步”方式发送一个数字信号。首先,应用程序将调制好的数字信号样本转存到RCB的存储器上;然后,应用程序指示ARO将一个转存好的信号从射频前端硬件上发送出去。这两步可以独立,异步执行。在ARO进行转存时,每一个信号都被分配了唯一的标号,在第二步时,ARO将使用这个标号来指定要发送的信号。 UMX编程流图及对应函数 配置合适的无线接收机参数; 具体函数:ConfigureRadio(); 可配置参数包括:载波频率,频偏校正,发送增益,接收机第一级放大器增益,接收机第二级放大器增益。特别的,现有的Sora射频硬件没有自动增益控制功能。 为发射信道分配一个转存数据缓存区; 具体函数:SoraUAllocBuffer(TxSampleBufferSize); 作用: 这个缓存区将在sora信号发送过程中使用。 在转存缓存区里填写调制好的数字信号样本; 具体函数:process(); 自己的处理流图 将数字样本块转存到RCB存储器上; 具体函数:SoraURadioTransferEx(TARGET_RADIO,TxSampleBuf,TxSampleBufSize,TxID); 指示RCB存储器发送已经转存好的信号样本块; 具体函数:SoraURadioTx(TARGET_RADIO,TxID); 在程序终止前去初始化(de-initialize)UMX库。 具体函数:SoraUCleanUserExtension(); // umx_main函数中内容 // 首先,创建一个ARO,然后将ARO的接收通道映射到用户态。 PVOID RxBuffer = NULL ; ULONG RxBufferSize = 0 ; SORA_RADIO_RX_STREAM RXStream ; PVOID TxSampleBuffer = NULL ; ULONG TxSampleBufferSize = _M(4) ; void umx_main() { HRESULT hr; // Create a ARO hr = SoraURadioStart(TARGET_RADIO); if(FAILED(hr)){ printf(Fail to start an ARO (%d)\n,TARGET_RADIO); return ; } // Map Rx channel buffer hr = SoraURadioMapRxSampleBuf(TARGET_RADIO,RxBUffer,RxBufferSize); if(FAILED(hr)){ printf(Fail to map rx buffer!\n); return ; } // 获得ARO接收流对象用来访问接收到的样本数据,然后设置合适的无线电射频参数。 hr = SoraURadioAllocRxStream(RxStream,TARGET_RADIO,(PUCHAR)RxBuffer,RxBufferSize); if(FAILD(hr)){ printf(Fail to allocate a RX stream!\n); goto error_exit();

文档评论(0)

富贵礼包 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档