【Gnuradio结合hackrf 通过FSK调制实现文本文件的发送与接收】


Gnuradio结合hackrf 通过FSK调制实现文本文件的发送与接收

 

一、实现目标

1、将我们要发送的文件封装成帧;

2、通过FSK调制与解调实现文件的传输;

3、将接受到的文件进行非实时的采样处理还原我们发送的文本文件;

二、实现过程

1、将我们要发送的文本文件封装成帧

(1)首先我们要选择文本文件,例如send.txt我们在文件中输入我们要发送的字符串,在本次实验中我输入的是“Hello World!Xiaoming”,输入完后保存文件并退出。


(2)     利用自己编写的Python程序data_send.py将我们的要发送的文本文件send.txt封装成简单的数据帧

data_send.py的截图



①首先在帧头写入同步序列

代码部分:

serial =[1,0,1,1,0,1,0,0]

serial=serial*2

for i inserial:

    f.write(chr(i))

通过代码可以看出,将[1,0,1,1,0,1,0,0,1,0,1,1,0,1,0,0]作为我们的同步序列(为了后面的帧同步),将同步序列以字节的形式写入code.txt文件中

②接着写入数据的大小长度(以字节为单位)

代码部分:

str1 =intTo2Str(length,8)

for i in range(8):

       temp = str1[i]

       temp = int(temp)

       f.write(chr(temp))

计算我们要发送文本文件的大小,此处我用一个字节表示文本的字节数,即在本次试验中我们最多能够发送256字节(稍稍改变代码,可实现更多字节的传输),本次实验的为20字节,并以追加的方式写入code.txt文件中。

③写入数据

源代码:

 for i in range(length):

       str1 = intTo2Str(ord(send[i]),8)

       for i in range(8):

              temp = str1[i]

              temp = int(temp)

              f.write(chr(temp))

通过循环,我们将要发送的字符串,依次转换为字节,并追加写入code.txt文件中。

④写入结束标志

源代码:

serial =[1,1,1,1,1,1,1,1]

for i inserial:

    f.write(chr(i))

f.close()

我们通过数据长度就可以确定数据的长度,所以结束标志并不是为了判断数据段的结束。我们知道我们的帧会被循环的发送出去,而我们的结束标志则是为了避免产生相同的同步序列。

⑤运行data_read.py,我们打开code.txt,因为我们发现会出现乱码,就说明我们基本正确。我们写入code.txt是0或1的字节,用数字的方式写入文件。


2、将我们要发送的文本通过hackrf发送出去

(1)发送端的grc流程图


 

流程图介绍:

①通过File source模块读取我们的code.txt中以保存的数据,因为我们的0,1是以字节的方式存入,所以File source模块数据类型参数选择Byte,还有记住选择code.txt的文件路径。我们可以从Vector wave看出读取出来的是0,1序列。

②Char to Float模块将字节数据类型转变为Float,方便后面的数据操作,例如乘除。

③接着我们把0,1变为-0.5和0.5,接着在乘以2,即-1,1,接着在每个数字后年插入0,达到的效果是从[0,1,,,]序列变为[-1,0,1,0,,,,,]等。然后通过Repeat进行插值,即从[-1,0,,,]变为[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,,,,,],通过这一系列的变化,达到的效果就是把读取出来的[0,1]序列用双极性方波,即从v

评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值