【Pluto SDR】简单模拟通信系统
引言
我是一名通信工程的一名大三学生。这是,第一次写小文章分享呢。以前包括现在也一直钦佩CSDN博客上一些大佬们的分享,所以这次拿着自己的期末报告来稍稍分享一下。如果以下分享有什么问题,大家可以在评论区指点哈~
首先,我们从SDR的概念入手,帮助大家稍稍了解。
软件无线电,即Software Defined Radio,SDR。通俗来讲,SDR就是基于通用的硬件平台上用软件来实现各种通信模块。
概念中有两个关键词,“通用硬件平台”和“软件”。“通用硬件平台”就是说我们能基于这个硬件平台实现各种各样的通信功能,而不是说一个硬件平台只能实现一种通信功能,那么本次实验我们利用的“通用硬件平台”就是Pluto Radio;“软件”来实现通信模块是相对于传统的无线电技术来讲的,传统的无线电通信模块都是用硬件电路来设计,一个通信电路只能完成一种通信功能,开发周期长,开发成本高,而且一旦设计好后功能就无法改变。软件化可以加快通信模块的开发速度,降低开发成本,便于调试和维护。
我们可以用下图来简单看看软件无线电基站与传统的无线电基站的区别。图片一个是传统的大基站,另一个是基于软件无线电的小型化基站。传统的商用基站体积较大,需要设计很多专用的硬件电路;而SDR基站体积较小,大部分通信功能由软件实现。
比较通用的SDR系统分类是以SDR的硬件平台来分类。SDR系统分为三类:基于FPGA的SDR系统,基于DSP的是SDR系统和基于GPP的SDR系统。
其中,GPP,General Purpose Processor,通用处理器。我们可以简单的把GPP理解为电脑,即我们使用的台式机、笔记本等。基于GPP能高效地开发各种通信模块、通信系统,因为我们可以很方便的基于各种高级编程语言、各种链接库来实现各种通信功能,如编码、调制等。而且,基于GPP的SDR系统开发相比其他两种具有较低的开发门槛,较低的开发成本,开发周期也较短、便于调试等。
接下来的实验中我们均利用电脑对Pluto Radio进行通信收发控制。
模拟通信系统模型
通常,按照通信传输的信号类型区分,可以将通信系统分为模拟通信系统和数字通信系统。
本次实验,我们的目标是对模拟信号的发送和接收。所以,我们先讨论一下模拟通信系统模型。
在模拟通信系统模型中,一般分为两种,一种是基带模拟信号传输,另一种是带通信号传输。
由于无线电通信往往需要通过自由空间这一信道,所以基带传输无法实现,则需要进行第二种传输方式——将有用信号进过调制器,通过天线发射;将接收天线上接收到的信号通过解调器,即可得到恢复的信号,为信宿所用。
基于SDR的Pluto模拟信号收发
为了探寻Pluto Radio收发前后信道对信号的影响,采用多种基本简单信号进行试验——正弦波、锯齿波、三角波以及方波。
(1)正弦波的试验
下图为待发送的信号——一个周期的正弦波
统一Pluto Radio的发射机和接收机的各项参数:
1、中心频率为2.5GHz
2、基带采样速率为1MHz
3、设置接收机中心频率增益来源为手动,并设置接收机增益为40dB,发射机增益为0dB。
4、设置接收机每次接收数据的采样数目,根据发送数据的点数而定。
在接收数据的过程中,可能会发现存在自动增益控制的过程,所以会选择先接收并丢弃前几帧数据,继而再接收一帧数据进行分析。
以上是接收端的一帧数据。可以发现其接收了好几个周期的信息,且幅度整体发生变化,即平均功率未平衡。不过,基本波形未出现明显的畸变。
以类似的方法,对锯齿波、三角波以及方波进行试验。
(2)锯齿波的试验
下图为待发送的信号——一个周期的锯齿波。
下图是接收信号,发现其在每个周期的起始位置出现了明显的畸变现象;同时在锯齿部分也存在了不平滑现象。
(3)三角波的试验
下图为待发送的信号——一个周期的三角。
下图是接收信号,因为不存在高频剧烈谐波分量存在,所以转折处畸变较小;同时在锯齿部分也存在不平滑现象。
(4)方波的试验
下图为待发送的信号——五个周期的方波。
下图是接收信号,由于信号存在无限的谐波分量,所以在采样过程中将其滤除了部分极高频的分量,而未被滤除的较高频分量则形成了过冲现象。
总结与分析
综上实验,我们实现了一个基于Pluto Radio和MATLAB平台的简易模拟通信系统。
由于理论基带采样频率的限制,所以对于方波这种存在丰富的谐波分量的简单波形则无法完美接收。
总的来说,本次实验对模拟通信系统的理论的理解,对系统的实现等方面有了进一步的理解和认识。
代码
以下是发送端的MATLAB代码
%-------------------变量初始化--------------------------
clc;clear;close all
sps = 8;%采样速率 单位:采样点数/符号
N = 0;%绘图编号
%%
%模拟信号发生器
Num = 100;%信号长度
dt = 1/Num;
t = dt : dt : 1;
s = sin(2*pi*t)%正弦波模拟信号
% s = t;%锯齿波模拟信号
% s = [(dt:dt:0.5),(0.5:-dt:dt)]%三角波模拟信号
% s = square(10*pi*t,50);%方波模拟信号
redun = zeros(1,10)+1i*zeros(1,10);%尾部信号冗余
Tdata = complex([s]);
%绘制待发序列
N = N+1;figure(N);hold on;grid on;
plot((dt:dt:dt*length(Tdata)),Tdata);
xlabel("Time");ylabel("Amplitude");
set(gca, 'XTickMode', 'manual', 'XTick', [0.25,0.5,0.75,1]);
title("Signal from Transmitting Terminal")
%%
%Pluto发送器
tx = sdrtx('Pluto','CenterFrequency',2.5e+09,...
'BasebandSampleRate',1e6,...
'Gain',0);
%Pluto接收器
rx = sdrrx('Pluto','CenterFrequency',2.5e+09,...
'OutputDataType','double',...
'BasebandSampleRate',1e6,...
'SamplesPerFrame',5000,...
'GainSource','Manual',...
'Gain',40);
%%
%信号发送
tx.transmitRepeat(Tdata');
%信号接收
for k=1:3
rx();
end
Rx_Sig = rx();
release(tx);%释放Pluto
%%
%绘制接收到的信号
N = N+1;figure(N);hold on;grid on;
plot((dt:dt:dt*length(Rx_Sig(end-500:end))),Rx_Sig(end-500:end));
xlabel("Time");ylabel("Amplitude");
% set(gca, 'XTickMode', 'manual', 'XTick', [0.25,0.5,0.75,1]);
title("Signal from Transmitting Terminal")