从零开始USRP 02 一些基本的GNU Radio操作
上一集:环境搭建以及小demo
继续学习:https://blog.csdn.net/YOUNGAAAAA/article/details/128098154
我们可以先简单创建一个USRP图:
但是这个图目前是跑不了的,因为:
RuntimeError: LookupError: KeyError: No devices found for -----> Empty Device Address >>> Done (return code 1)
这里我暂时先不求甚解,就是说我没有硬件的话,软件是没办法给我模拟自发自收的是吧?
我们先简单讲一下搭了一个什么东西:首先,我们做了两个信号源,都是正弦信号,但是二者的频率不同,我们把这两个信号做乘法,得到一个输出,然后希望用一个USRP设备将这个输出发射出去,并用另一个USRP设备接收这个输出,从而显示在GUI上。
问题就在这个发射接收的过程,我应该是通过硬件来做的,对吧?软件应该是模拟不了这个东西,所以一直提示我找不到设备,因为我手头没有USRP设备,设备在清华。
Boulogeorgos实例章节一
本来其实是CPP自定义模块,但是作者曰:这一部分建议先看完GRC Boulogeorgos实例程序分析后再回过来看这个,就会清楚一些。
OK,那我就来看看什么是boulogeorgos
实例一:添加不同类型的布尔操作
比如我这里加了一个与门,那么结果就是0和1必须全部为1(黑色)的时候,2才能是黑色。
哦对了,与此同时,要注意一点,即Random Source只能生成int、short和byte,因此IO要对齐的话,throttle和number sink都要调整输入输出,保持一致才能跑通。
这个问题我遇到了(小白才会遇到):https://dsp.stackexchange.com/questions/74926/source-io-size-8-does-not-match-sink-io-size-4
实例2:添加数学操作(加法举例):
这里接了一个向量源,这个可以产生自己定义的数据,即放在一个vector里面,可以选择输出一组这个vector,也可以选择repeat输出这组向量。当然,0,0,0只是一个例子,你大可以如此定义:
Tag Strobe,据说是用于添加标签,可以看一下维基百科对它的解释:
就是说,这个Tags Strobe会给source打上tag,我们运行一下就能看到:
具体在哪打的,其实是按照间隔来的,我上面设置的是50,如果设置为1呢?
那就是每个数据后面都会被打上tag:
这个功能一般仅仅用来测试而已哈。
然后就是说Keep1inN,或者KeepMinN。前者是保留每M段的最后一项,后者是保留N项。
打个比方:
我们输入使用一个向量:
然后设置两个N均为4,其中一个保留最后一位(-1),另一个保留最后两位(都是负数),第三个我们保留所有的序列不做处理。但是有一点需要注意,即keep1inN,keep的是最后一位数,即the last one,但是keepMinN中keep的却是offset之后的数字,即如果想实现保留后两位,要调整一下offset从2之后keep。
结果如下:
与此同时我们还可以让窗口中对输入信号可选择:
实例3:画出一组数据的直方图
带着uniform的是平均分布的信号源,如果不带uniform,生成的是正态分布的数据源。结尾是一个立方图显示的组件。
再往后,讲了一下滤波器,高通低通带通带阻都可用。
但其中一个很厉害的东西就是,可以直接调用GNU的API组件,比如带通滤波器:
https://www.gnuradio.org/doc/doxygen/classgr_1_1filter_1_1firdes.html#ade3a7c3157b9c10f25c4608b414994de
直接把API copy过来就可以用,比如我连一个:
我用一个变量来保存我的滤波器的效果:firdes.complex_band_pass_2(1, 1, -0.1, 0.4, 0.01, 80, firdes.WIN_BLACKMAN_hARRIS)
然后我们就可以实现一个带通滤波:
然后更改变量,就可以更改自己的filter的效果了。
当然,与此同时,GNU里还定义了很多组件filter可以实现上述效果:
此外还有一些其他的组件,比如选择器、AGC、AM调制这些东西。
考虑到我现在的重点应该是USRP而不是信号处理,因此这些实验部分太过于复杂的就先停留在“知道”层面了,剩下的实验可以看:https://blog.csdn.net/YOUNGAAAAA/article/details/128068615
好的,我们看下一集:USRP从零开始第三集