RTL-SDR电视棒应该有不少人都玩过,几十块钱就可以接收到很宽频段的信号,不仅可以收听广播,还可以监听某些电台,甚至可以接收GPS信号进行定位,但它作为无线电设备的痛点就是只能收但不能发,不能自己发送信号,是不是有点手痒痒,如果恰巧手里有一块可以同时收发信号的Pluto SDR,那么玩法可就多了,但最基础的还是学会怎么发送信号,接下来使用Matlab编程的方法实现SDR发送信号。
声明:本文只涵盖了代码实现,没有涉及到Simulink实现,实际上使用界面化的Simulink会更加方便,但由于相关文章很多,本文概不赘述。
准备环境
想要使用Matlab对Pluto SDR开发需要先安装Communications Toolbox Support Package for Analog Devices ADALM-Pluto Radio,需要2017b及更新的版本。
代码实现
首先需要自己生成一个信号,这里以单音信号举例,使用DSP toolkit生成一个幅度0.5,频率100kHz的正弦信号,并规定采样率2MHz,每帧5k样本(即400帧/秒)。注意Pluto SDR处理的是复数信号,所以生成的正弦波需要是复数输出。
fs = 2e6;
sw = dsp.SineWave;
sw.Amplitude = 0.5;
sw.Frequency = 100e3;
sw.ComplexOutput = true;
sw.SampleRate = fs;
sw.SamplesPerFrame = 5000;
txWaveform = sw();
根据官方文档,想要发送信号,需要先创建一个sdrtx对象,然后对其属性进行修改,例如设备ID、中心频率(此处设定为2.415GHz)、基带采样率等,最后transmitRepeat
让连接到的设备一直重复发送设定好的单音信号。
tx = sdrtx('Pluto');
tx.RadioID = 'ip:192.168.1.10';
tx.CenterFrequency = 2.415e9;
tx.BasebandSampleRate = fs;
tx.Gain = -5;
transmitRepeat(tx,txWaveform);
若想让发送停止,在命令窗口输入release(tx)
即可。
结果呈现
使用另一个接收设备,将中心频率调整到2.415GHz附近,可以观察到2.4151GHz有一强度很高的信号,这就是我们的100MHz基带信号被搬移到了2.415GHz频段的结果。周围很多小尖峰是我们的单音信号的谐波分量,当发射端release(tx)
后,即停止发射信号后,这些小谐波都会消失,图上的这个频段会恢复寂静。