《gunradio软件无线电发送接收字符程序.docx》由会员分享,可在线阅读,更多相关《gunradio软件无线电发送接收字符程序.docx(11页珍藏版)》请在优知文库上搜索。
1、GNURADlO软件无线电benchmark程序发送接收文件测试笔记在GNlJRADlO软件无线电程序中,benchmark程序可以发射900MHZ,接收900MHZ的无线电信号。具体做法是,把两台装有BaSiC子板的USRPl母板分别连上两台电脑的USB端口上,接通电源,在UbUntU操作系统下,在其中一台电脑的终端提示符下键入:“Cdusrlocalsharegnuradioexampledigitalz*进入benchmark程序的目录,再键入:.benchmark-tx.py-f900Mz,这时候,和这台山脑USB端口连接的USRP母板上的LFTX子板通过电线就会发送一个900M11Z
2、的无线电信号,电脑显示器显示:表示正在发射无线电信号。这时,在另外的一台电脑上的终端提示符下键入:“Cdusrlocaulsharegnuradioexampledigitalz进入benchmark程序的目录,再键入:./benchmark_rx.py-f900M”这时候,和这台脑USB端口连接的USRP母板上的LFTX子板通过电线就会收到一个900MHZ的无线电信号,电脑显示器显示:ok=Truepktno=1202n_rcvd=ln_right=0表明接收信号正常。现在的问题是要从这个电脑发送一个文件到另外一个电脑,我查找了相关资料发现,benchmark具有发送文件的功能,但是开源程序
3、里没有这项功能,需要用户根据自己的需要修改程序来达到发送接收文件的功能。我通过研究发现,修改程序后,可以把这台电脑的aa.txt文件的hello“字符发送到另外一台电脑的tt.txt文件中。具体做法是,在发送端电脑的“usrlOCaisharegnuradioexampledigital”目录下新建aa.txt,tt.txt两个文本文件,在aa.txt中输入“hello并保存,然后在终端下输入:“vibenchmark_tx.py在vi编辑器下打开benchmark_tx.py程序,在第124行tb.start()#startflowgraph”,后输入f=open(zzusrlocalsha
4、regnuradioexamplesdigitalaa.txt”,r),a1ines=f.readlines()”两行新程序,第一行程序是以只读方式打开aa.txt文件,第二行程序的作用是以每行阅读的方式读出aa.txt中的文本内容,然后再赋值给IineS数组,接着把第140行程序payload=struct,pack(,!H*,pktno&Oxffff)+data改为payload=str(options,num)Str(Iines)这步的作用是,去掉了打包发送Pkno函数的功能,而加入发送IineS函数和options,num函数的功能。现在说一下options.num函数是从哪来的。首先
5、把程序的第95行至第100行,改为parser.add_oPtiOn-discontinuous,action=zstore-truezz,default=False,help二enablediscontinoustransmission(burstsof5packets),)parser.add_oPtiOr-from_filez,dest=zfrom-file,default=None,help二USCintputfileforpacketcontents)parser.add_oPtiOn(-T,-to_file,dest=z*to-file,z,default=None,help=,z
6、Outputfileformodulatedsamples)parser.add_oPtion(-n,一num”,type二int,dest=,znum,default=l000,help二Sendmessage)parser.add_oPtion(-e,-file”,dest=zfilename,z,help二WritereporttoFILE,z,metavar=zzFILEzz)parser,add-option(zz-p/-Pdbk,action=zzstore-true,dest=,pdcl,;default=False,help二Writepdbkdatatooracledb)Pa
7、rSCr.add_oPtiOn(-z,一Zdbk,action=zzstore-truez,dest=zdcl,default=False,help二Writezdbkdatatooracledb)简单说一下,在终端输入wbenchmark_tx-f900M-111500”时,程序以900MHZ的频率发送数组options,num中的数字1500和IineS数组,因为parser.add_option(-n,一num”,type二int,dcst=nu,default=1000,help二Sendmessage)定义了一个属性是num的OPtiOrLnum函数通过提示符-nxxx”来返回一个值
8、给option,num数组,上面其他程序的作用是定义了在终端提示符下发送文件-W,接收文件写入给数据库-p,读取数据库-z,其他功能这里暂时不讨论。修改完成后保存文件,退出Vi编辑器。下来在接收端的电脑上的/usr1ocalshare/gnuradio/exampledigitalnarrowband”目录下新建aa.txt,tt.txt两个空白文本文件,然后在终端下输入:“vibenchmark_rx.pyz在Vi编辑器下打开benchmark_rx.py程序,把第79行到第98行的内容改为globaln_rcvd,n_rightglobaln_datadefmain():globaln_r
9、cvd,n_rightglobaln_datan_rcvd=0n_right=0n_data=str()defrx_calIback(ok,payload):globaln_rcvd,n_rightglobaln_data(pktno,)=struct,unpack(,!H,PayIoad0:2)n_data=payload0:4096f=open(/usrlocalsharegnuradio/examples/digital/tt.八txt,W)f.write(payload)n_rcvd+=1ifok:n_right+=1print,zok=%5spktno=%4dn_rcvd=%4dn_
10、right-%4dn_data=%5s%(ok,pktno,n_rcvd,n_right,n_data)其中,n_data=payload0:4096定义变量n_data用来显示接收的options.num数组和IineS数组。还有上述f=open(/usrlocalshare/gnuradio/examples/digital/narrowband/tt.txt,w)f.write(payload)两行程序实现了以写入方式打开tt.txt文本文件,然后把接收的payload数组写入tt.txt中。保存修改退出Vi编辑器后,在发送端的电脑/usrlocalshare/gnuradio/exam
11、ple/digitai的目录下键入.benchmark-tx.py-f900M-n1900后,电脑显示表示发送正常,然后在接收端电脑usrlocalsharegnuradioexample/digitai的目录下键入.benchmark-tx.py-f900M电脑显示Ok-Truepktno-12598n_rcvd=458n_right=458n_data-1900,hellon,表示接收正常。用“ctrl+c”键停止接收,打开接收端电脑usrlOCaIsharegnuradioexampledigital的目录下的tt.txt文件,发现原来是空文件的tt.txt,出现he11on显示,表示发
12、送接收正常.说明发送端电脑上的aa.txt文件中的“hello”字符已经传送到接收端电脑的tt.txt文件中。给发送端电脑的aa.txt文件中添加字符,如把hello”改为“hellopython,接收端点脑上的tt.txt文件中显示“helloPythonn表明接受正常,当aa.txt中字符的长度超过3571个字节时,接收端就会显示乱码,因为每次程序只能发送低于3571字节的文本,一旦文本超过了3571字节,发送的信息量太大就会使程序读入数据出错,接收端就会收到乱码,要传送更多字节的文本就要修改程序,这个问题还在研究,现在不做讨论。下面测试一下能不能用其他子板正常发送接收文本。把上面的两个B
13、aSiC子板换成两个WBX子板,WBX子板上都连有天线。测试后发现接收端的tt.txt就会显示乱码和误码。例如原来发送aa.txt文本中的hc11o”,接收到的tt.txt文本却是为造成这个结果的原因是WBX子板靠天线发送信号,而LFRX子板是通过屏蔽线传输信号。WBX子板发送无线电后,由于空间中的干扰,无线电信号在传输中会产生衰减和变化,另外的WBX子板接收到的无线电信号就会和发送的无线电信号不同。要想传输的内容不发生变化,就要修改程序,使每次只发送一个数据,这样接收就不容易产生误码和乱码。修改程序后,把benchmark_tx.Py中的z/payload=data+Str(Iines)+c
14、hr(options,num&Oxff)改为z/payload=Str(Iines)”作用是只把IineS的值赋给发送函数PaIoad,相当于只发送了IineS数组。同时把发送端电脑的aa.txt文件里的“hell。”改为“h”,只发送一个字符h,减少了传送的数据量,此时运行接收.benchmark-rx.Py-f900M和发送.benchmark-tx.Py-f900M发现接收端电脑的tt.txt文本显示h,;表明接收成功附件:bcnchmark_rx.py源码ft!usrbinpython#!/USrbinenvpython# Copyright2010,2011,2013FreeSoft
15、wareFoundation,Inc.# ThisfileispartofGNURadio# GNURadioisfreesoftware;youcanredistributeitand/ormodify# itunderthetermsoftheGNUGeneralPublicLicenseaspublishedby# theFreeSoftwareFoundation;eitherversion3,or(atyouroption)# anylaterversion.# GNURadioisdistributedinthehopethatitwillbeuseful,# butWITHOUTANYWARRANTY;withouteventheimpliedwarrantyof# MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.Seethe# GNU