世界的本质是旋转(5)-在复平面上驱动软件无线电SDR交换BPSK波形

news2024/11/18 9:25:32

在上一篇文章中,我们介绍了复平面、拍照采样的一些思维实验。从本节开始,转入现实应用,通过控制复平面向量的位置,实现一个完整的BPSK全双工通信通道。

发射方:通过控制复平面向量在各个时刻的位置来携带信息的技术,属于通信原理中调制的概念。
接收方:从采样(拍照)结果找回信息经历的计算,是通信原理中解调的概念。

本文基于C语言SDR实验平台taskBus开展实验。文章从复平面向量的旋转起步,以图、代码为主,并没有严谨专业的理论推导。一些工程方法比起专业的通信技术而言是非常单薄且作坊的,俗称野路子、小高炉炼钢铁,希望读者仅仅以娱乐或者批判的眼光看待本文。SDR是成人的大玩具,我们的口号是娱乐至上!

完整的工程参考taskbus_course的a2课程,可执行包参考taskBus的Release版本。

1. 通用软件无线电的特点

在开始本文前,笔者已经花了4天左右的时间,利用USRP B200min构造了稳健的BSPK双工通道,用自己的思路和直接的纯C代码实现了调制解调,体会到软件无线电实现BPSK一些有趣的不同:

  1. 传统通过电路实现的解调器感觉复杂的部分,在计算机上一个 atan 就解决了。
  2. 符号时钟同步、载波同步的环路,就是一个角度变量的更新和迭代,使得相机的旋转与残频的旋转同步,类似旋转打地鼠
  3. BPSK只判断相位符号,不测量向量长度,因而在多径衰落下,影响也不大。
  4. USRP自带一个滤波器,即使没有成型,也不会频谱泄露。

BPSK

通用计算机的优势,使得调制解调代码出奇的短,并非常直接,易于理解。

2. 调制:使用向量的位置携带信息驱动USRP B210

在前文中,我们观察的是简单的向量转动的叠加。如果把叠加后向量的位置看做一个质点,显然每次拍照时,质点都会在复平面留下影像。如果我们通过设置质点的位置,让每 Ts 秒质点必然出现在某些特定的位置上,则可以用这种时间:位置的对应关系,来表征信息。

比如,希望质点位于(0,1)时表示二进制信息1,位于(0,-1)时表示二进制信息0,则可以携带二进制信息。下图携带的信息是 1 0 1 1 0 1 1 0 1 0 0 0 0 0

raw
USRP B210/B200mini 只要输入上述复平面的 x,y坐标,就能实现发射。这种复平面上的 x,y坐标数组构成的数据流被称为“基带信号”,表示为一组整数。SDR硬件会帮助我们进行DUC(上变频)与DA转换,驱动模拟电路产生无线电波。

对USRP B210来说,可以直接在当前采样率(拍照速率)下给出上述波形,接收的时候,注意以2倍以上的速率接收即可. 从比特生成USRP IQ 发射波形的代码:

std::vector<short> emit_one_pack(std::vector<char> bits)
{
   std::vector<short>  signal;
	for (int i=0;i<bits.size();++i)
	{
		signal.push_back((packagedta[i]==1?1:-1) * 8192);
		signal.push_back(0);
	}
	return signal;
}

此时,采样率设置多大,调制速率就是多少波特。如250KHz的发射采样率,则调制速率就是250KHz。在我们的范例工程里,注意要把模块“a2psk_mod”的“shaping_filter”开关关闭,则实现的就是上述功能。

成型滤波设置

3 空中波形的实际情况

虽然我们递交给USRP 小盒子的是离散的坐标,但一定要有概念,就是发射到空中的是连续的电磁信号。同时,所有的SDR设备都是带限的。这种阶跃的状态最终生成的是连续的波形。就像您用力甩一个长绳子,绳子上的各个质点的纵向轨迹也是连续的行为。

另一方面,为了降低对带外其他频率的干扰,一般会使用成型滤波抑制带外频谱分量,导致更为平缓的过度。比如,我们在4倍采样率下,看到的中间状态是这样的,红色的点是我们的信息点,蓝色的圈圈是中间状态:

带限
观察上述现象的octave代码如下。代码里,使用成型滤波模拟了 USRP B210设备帮助我们做的事情。

mulrate = 4;
symlen = 1000;
dta1_bits = randint (1, symlen, 2);
dta2_symbols = pskmod (dta1_bits, 2, 0, "gray");
dta3_sig = zeros(1,symlen*mulrate);
dta3_sig(1:mulrate:end) = dta2_symbols;
[fir_rcos]=rcosfir(0.25,[-3,3],mulrate,1,'sqrt');
dta4_baseband = conv(dta3_sig,fir_rcos,'same');
f = figure();
filename = 'output.gif';
dta4_draw = imag(dta4_baseband)+1j*real(dta4_baseband);
hold on;
DelayTime = 0.5;
plot([0,1],[0,0],'k');
plot([0,0],[-1,1],'k');
for t = 1:100
  plot([t-1,t],[0,0],'k');
  if mod(t - 1,mulrate)==0
    plot(dta4_draw(t),'r*');
  endif
  if t>1
    plot([t-1,t],[real(dta4_baseband(t-1)),real(dta4_baseband(t))],'r');
    if mod(t - 1,mulrate)==0
      plot([t],[real(dta4_baseband(t))],'r*');
    else
      plot([t],[real(dta4_baseband(t))],'bo');
    endif
  end
  xlim([0,t]);
  pause(DelayTime );
  drawnow

  % 存为Gif
  frame = getframe(f);
  im = frame2im(frame);
  [imind,cm] = rgb2ind(im);
  if t == 1;
    imwrite(imind,cm,filename,'gif','DelayTime', DelayTime , 'Compression' , 'lzw');
  else
    imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime', DelayTime , 'Compression' , 'lzw');
  end
end
hold off

一些感性的认识是:

  1. 复平面上质点的运动是连续的。质点不可能从一个位置“阶跃”到另一个位置。
  2. 由于带宽限制,运动轨迹很平滑,看起来像是一些余弦的叠加。
  3. 滤波使得原本恰好为正负1的y坐标分散了,在各个定时时刻上无法恰巧等于1或者-1.

4. 用C语言实现1/4速率成型滤波(非必须)

上文从0,1序列生成基带波形的 C语言代码非常直接,下文把成型滤波也加进去了,以对带宽进行限制,同时实现了4倍速率插值。完整的代码要参考文章开头的git代码库。注意的是使用自定义的滤波器提高了波形质量,但同样的采样率下,生成的调制速率降低了4倍。因此,要像上文驱动一个250KBd的BPSK波形,需要 1MHz的TX采样率。因此实际应用中,自己做不做成型,还是交给USRP的硬件滤波器来限制带宽,取决于连接SDR设备的网速,以及对码间串扰等滤波器特性的要求。

std::vector<short> emit_one_pack(std::vector<char> bits)
{
	static const double fir_rcos_q25[25] = {-0.018773,0.0030136,0.032677,0.047094,0.02655,-0.027522,-0.085225,-0.099447,-0.032147,0.11904,0.31118,0.472,0.53463,0.472,0.31118,0.11904,-0.032147,-0.099447,-0.085225,-0.027522,0.02655,0.047094,0.032677,0.0030136,-0.018773};
	static double fir_cache[25] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
	static unsigned long long fir_clock = 0;
	std::vector<short> signal;
	for (int i=0;i<bits.size();++i)
	{
		for (int sym = 0; sym< 4;++sym)
		{
			//环状滤波器滤波成型
			fir_cache[fir_clock % 25] = sym==0?(bits[i]==1?1:-1):0;
			double fval = 0;
			for (int f=0;f<25;++f)
				fval += fir_cache[(fir_clock + 1 + f) % 25] * fir_rcos_q25[f];
			++fir_clock;
			//X,Y
			signal.push_back(fval * 8192);
			signal.push_back(0);//BPSK Y (Q路)是0.
		}
	}
	return signal;
}

5. 下节预告:噪声背景下的接收

至此,已经可以把一串010101发到空中啦。下一节,我们会看到噪声叠加后,上述波形的取值进一步分散了,波形抖动的很厉害,只能大概看到各个点的符号, 而且其X坐标也不再是0,原本在Y轴上的点产生了位移:

recv

不仅如此,接收机接收到的坐标与发射机的坐标之间,存在着细微的偏差。首先是红色坐标位置生成的速率有误差,而后,上下变频有误差。接收机解决的主要问题都是围绕这些误差的同步来开展的。

  1. 时钟误差导致收发双方生产、消费红色样点的速率有差别。发射机生产10000个点,接收机相同时间消费9990个点。
  2. 频率误差,导致整体坐标系以一个很低的转速发生旋转。
  3. 初始相位差,使得接收机看到的点x,y坐标都不是0.

下一节我们看看收到的数据是如何处理的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1488429.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode234题:回文链表(python3)

代码思路&#xff1a;将链表的值复制到数组列表中&#xff0c;再使用双指针法判断&#xff0c;不断更新current_node的值。 # Definition for singly-linked list. # class ListNode: # def __init__(self, val0, nextNone): # self.val val # self.next…

水泵远程自动控制系统

随着科技的不断进步和工业的快速发展&#xff0c;传统的水泵管理方式已经无法满足现代水利系统的需求。为了应对这一挑战&#xff0c;HiWoo Cloud水泵远程自动控制系统&#xff0c;旨在通过智能化、网络化的技术手段&#xff0c;实现对水泵的远程监控、自动调节和智能管理&…

可让照片人物“开口说话”阿里图生视频模型EMO,高启强普法

3 月 1 日消息&#xff0c;阿里巴巴研究团队近日发布了一款名为“EMO&#xff08;Emote Portrait Alive&#xff09;”的 AI 框架&#xff0c;该框架号称可以用于“对口型”&#xff0c;只需要输入人物照片及音频&#xff0c;模型就能够让照片中的人物开口说出相关音频&#xf…

海外代购系统独立站,商品采集API接口系列

海外代购系统独立站是一个完整的电商平台&#xff0c;专为代购业务设计。这样的系统通常具备商品采集、库存管理、订单处理、支付集成、物流追踪等功能。其中&#xff0c;商品采集是整个系统的基础&#xff0c;而API接口是实现商品采集的关键。 请求示例&#xff0c;API接口接…

3 月 4 日-5 月 3 日|2024 乐鑫全球开发者大会演讲征集中!

乐鑫信息科技 (688018.SH) 全球开发者大会作为一年一度的技术盛宴&#xff0c;旨在为全球开发者们提供一个交流、分享、学习的平台。在这里&#xff0c;您可以与来自世界各地的同行们在线交流&#xff0c;共同探讨技术的最新动态和发展趋势。 30 场技术演讲每年 前沿创新、物…

企业必备监管工具:让管理更简单,效率倍增!

微信作为当前广泛使用的沟通工具&#xff0c;成为企业监管的重要对象。因此&#xff0c;使用微信管理系统成为企业必备的监管工具之一。下面就给大家分享微信管理系统的监管功能&#xff0c;让大家的管理更简单、更高效&#xff01; 1、敏感词监控 设置完成后&#xff0c;一旦…

leetcode日记(36)全排列

想思路想了很久……思路对了应该会很好做。 我的思路是这样的&#xff1a;只变化前n个数字&#xff0c;不断增加n&#xff0c;由2到nums.size()&#xff0c;使用递归直到得到所有结果 代码如下&#xff1a; class Solution { public:vector<vector<int>> permut…

【Python】变量的引用

&#x1f6a9; WRITE IN FRONT &#x1f6a9; &#x1f50e; 介绍&#xff1a;"謓泽"正在路上朝着"攻城狮"方向"前进四" &#x1f50e;&#x1f3c5; 荣誉&#xff1a;2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

光纤激光打标机如何在不锈钢产品上镭雕出白色效果

光纤激光打标机在不锈钢产品上镭雕出白色效果的关键在于对激光打标参数的精确控制。这涉及到激光的功率大小、打标速度、点与点之间的间距以及激光的频率等多个方面。 在镭雕过程中&#xff0c;激光能量与不锈钢表面发生相互作用&#xff0c;产生热效应和化学效应。通过调整激光…

什么是同源策略?如何检测跨站点 WebSocket 劫持漏洞?post 表单跳转跨域问题、Ajax跨域请求、浏览器特性和安全策略、WebSocket 协议连接

什么是同源策略?如何检测跨站点 WebSocket 劫持漏洞?post 表单跳转跨域问题、Ajax跨域请求、浏览器特性和安全策略、WebSocket 协议连接。 同源策略(Same Origin Policy)是一种浏览器安全机制,用于保护用户的信息和数据安全。它限制了来自不同源(协议、域名、端口)的网页…

c语言游戏实战(10):坤坤的篮球回避秀

前言&#xff1a; 这款简易版的球球大作战是博主耗时两天半完成的&#xff0c;玩家需要控制坤坤在游戏界面上移动&#xff0c;来躲避游戏界面上方不断掉下来的篮球。本游戏使用C语言和easyx图形库编写&#xff0c;旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代…

灾备建设中异地副本含义及使用

异地副本是指将备份数据存放在不同的地理位置&#xff0c;确保数据的安全性和可用性。这种备份方法可以降低数据丢失的风险&#xff0c;因为即使一个位置出现机房级灾难&#xff0c;导致数据出现故障&#xff0c;也可以从另一个位置的数据副本中恢复使用。 在进行异地副本备份…

LeetCode每日一题【c++版】- leetcode 2369. 检查数组是否存在有效划分【动态规划】

题目描述 题目链接&#xff1a;2369.检查数组是否存在有效划分 描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums&#xff0c;你必须将数组划分为一个或多个连续子数组。如果获得的这些子数组中每个都能满足下述条件 之一 &#xff0c;则可以称其为数组的一种有效划分…

JVM常用排查命令

top命令 top命令是我们最常用的Linux命令之一&#xff0c;它可以实时的显示当前正在执行的进程的CPU使用率&#xff0c;内存使用率等系统信息。top -Hp pid 可以查看线程的系统资源使用情况。 vmstat命令 vmstat是一个指定周期和采集次数的虚拟内存检测工具&#xff0c;可以…

Android 拍照本地图片选择框架适配

前言 通常技术方案的选择、会带来后续一些不可控的东西&#xff0c;这也是没法避免的&#xff0c;程序开发者中同时面对、测试、领导、产品各种要求。同时在网络上查找的资料也只是很旧的&#xff0c;不一定适合新设备&#xff0c;需要推倒重新弄 1、解决方案通过意图选择器做…

如何关闭谷歌浏览器“提示密码泄露”的弹窗

使用谷歌浏览器的时候&#xff0c;经常看见图中的提示&#xff0c;大致意思是&#xff1a; 你的密码被外泄&#xff0c;建议你立即检查和修改密码。 只要你不修改密码&#xff0c;这个弹窗就会不停地弹出来提示你。 那么怎么关闭这个弹窗呢&#xff1f; 第一个方法很简单&am…

情感分析(文本分类)数据集汇总

想在推荐前对评论做一些情感分析方面的工作,参考网上其它博主的博客大概整理了一下情感分析方面的数据集的内容&#xff0c;大致分为两类——多分类和二分类&#xff08;俺比较关注的&#xff09;&#xff0c;中英文的数据集都汇总整理了一下&#xff0c;后面会关注一下相关的比…

processing绘制笑脸

笑脸效果图&#xff1a; processing代码&#xff1a; void setup(){size(1000,1000);//Canvas sizebackground(#ffcc33);//Canvas background color } void draw(){ strokeWeight(12);//face-width12px fill(#ffffcc);//face arc(500,500,200,200,0,TWO_PI);//face-size strok…

智慧公厕:打造智慧城市的环卫明珠

在城市建设中&#xff0c;公共卫生设施的完善和智能化一直是重要环节。而智慧公厕作为智慧城市建设的重要组成部分&#xff0c;发挥着不可替代的作用。本文以智慧公厕源头实力厂家广州中期科技有限公司&#xff0c;大量精品案例现场实景实图&#xff0c;解读智慧公厕如何助力打…

【物联网应用案例】从0到N,智慧农业的数据价值

智慧农业全方位渗透到农业的每一个环节&#xff0c;云端解决方案更推动了研究人员、农艺师及农民间的密切协作&#xff0c;为研发企业提供了既经济又具扩展性的完美方案。 据IDC预计&#xff0c;到2036年&#xff0c;农场收集的数据量将增加800%以上&#xff0c;这凸显了农业数…