大连理工大学通信系统仿真实验 EX7
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连理工大学实验预习报告
学院(系):信通学院专业:电子信息工程班级:电子1201班
姓名:陈宇学号:201244201 组:___
实验时间:实验室:创新园大厦C221 实验台:
指导教师签字:成绩:
实验七GNU Radio实验
一、实验目的和要求
(1)了解python语言程序。
(2)了解傅里叶变换,掌握usrp观测无线信号频谱图和时域图的方法
(3)了解如何生成和发送一个信号数据包,了解benchmark之间的通信机制,了解benchmark 如何传输文件
(4)了解GRC的信号处理模块、流程图及其使用方法,了解DPSK调制解调原理
(5)了解GRC的信号处理模块、流程图及其使用方法、了解GMSK调制解调原理
二、实验原理和内容
(1)实验一是一个GNU Radio ―Hello World‖的例子。
它产生两个sine波形并且把他们输出到声卡,一个输出到声卡的左声道,一个输出到右声道。
dial_tone.py
1 #!/usr/bin/env python
2 from gnuradio import gr
3 from gnuradio import audio
4 class my_top_block(gr.top_block):
5 def __init__(self):
6 gr.top_block.__init__(self)
7 sample_rate = 32000
8 ampl = 0.1
9 src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_W A VE, 350, ampl)
10 src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_W A VE, 440, ampl)
11 dst = audio.sink (sample_rate, "")
12 self.connect (src0, (dst, 0))
13 self.connect (src1, (dst, 1))
14 if __name__ == '__main__':
15 try:
16 my_top_block().run()
17 except KeyboardInterrupt:
18 pass
第一行告诉我们这是一个Python文件,他利用Python编译器执行。
在第2行和第3行,import 命令导入GNU Radio模块的gr和audio模块。
gr模块用来运行一个GNU Radio应用。
Audio 模块加载一个音频设备块,来从声卡里输入和输出音频和控制音频设备。
第4行开始定义my_top_block类,从gr.top_block (a subclass of gr)中派生。
这是一个流程图的容器。
第4行到第13行是类my_top_block定义。
第5行定义了类my_top_block的构造函数__init__。
该构造函数在第6行通过调用父类构造函数实例化。
在第七行设置变量sample_rate,该变量控制信号采样率。
第8行设置幅度ampl变量。
dial_tone包括三个模块(如下图)和两个接口。
第9行定义了一个信号源src0,产生一个350Hz、32K采样率、幅度为0.1的正弦波。
第10行定义了一个信号源src1,产生一个440Hz、32K采样率、幅度为0.1的正弦波。
gr.sig_source_f 的后缀f表示信号源输出信号时浮点值。
第11行定义了目的dst为audio sink——可以用来发送/接收音频信号到声卡并且控制声卡。
第12行和第13行连接模块。
第15行和第17行的try和except的意思是如果用户按下Ctrl+C则停止运行程序。
第14行表明如果该代码是python编译器执行的唯一模块则执行my_top_block。
下面的两个表示方法是一样的:
fg.connect((src1, 0), (dst, 1))
fg.connect (src1, (dst, 1))
一旦流向图被建立了,我们调用start生成一个或者多个线程去运行它,按下任意键程序控制权就会返回给调用者。
(2)本实验应用到\GNURadio_SRC\gnuradio-3.2.2\gr-utils\src\python目录底下的usrp_fft.py。
本程序的功能是实时给出空间无线信号的频谱占用情况。
相当于一个频谱仪。
(3)
本实验用到/GNURadio_SRC/gnuradio-3.2.2/gnuradio-examples/python/digital底下
的benchmark_tx.py和benchmark_rx.py,前者用来发送,后者用来接收。
benchmark_tx.py生成数据包和帧结构如下图所示,帧的大小可以由用户设定。
PC中运行的GNU Radio软件生成数据包和帧,通过USB传输给USRP。
发送端每发送5个包就等待1秒再发送下5个包。
下图是发送端可选项。
(4)在本实验和下一个实验中,将通过软件无线电平台实现这两种技术的数据传输。
DPSK调制原理:
(5)在CPFSK中,如果频偏指数h如果取1/2,那么此种CPFSK则成为MSK(最小频移键控),它是一种优良的调制方式,MSK在各种频移键控中占用带宽最小。
但是由于无线通信对信号功率谱特性要求很高,特别是限制带外辐射低到-60到-80DB,在码元转换时刻以±相位突跳的MSK信号仍需进一步优化,GMSK(高斯最小频移键控)是其优化技术的一种。
基本技术是在基带码流入VCO之前,先以与调制高斯滤波器进行处理使基带方波的棱角加以圆滑。
三、实验步骤
(1)拨号音的产生
1.打开一个Terminal,输入cd
/GNURadio_SRC/gnuradio-3.2.2/gnuradio-examples/python/audio。
进入到dial_tone.py所在路径。
2.输入ls,显示当前路径所含文件。
3.输入gedit dial_tone.py。
打开dial_tone.py文件。
4.键入sudo ./dial_tone.py运行dial_tone.py。
通过耳机(或音响)听PC声卡所发出的声音。
5、Ctrl+C停止运行dial_tone.py。
更改dial_tone.py中ampl的大小以及频率大小,
保存后重新进行第4步操作,感受声音变化。
(2)快速傅里叶变换FFT
1.连接好USRP
2.打开一个Terminal,输入sudo usrp_fft.py –h,将会得到帮助菜单。
-h表示显示帮助菜单
-w表示选择USRP,一般默认值
-R选择USRP子板,一般默认值
-A选择天线,一般默认值
-d表示decimation rate,默认值16。
相当于设置一个抽取滤波器宽度。
USRP的ADC以64MSPS 的复采样率采进64MHz带宽的信号,经过抽取滤波器后,带宽变为原来的1/decim,数据速率变为原来的1/decim。
-f设置采样信号的中心频率,在显示屏上的中间位置。
默认2.5GHz,如果使用RFX2400子板,则只能设置2.3G到2.9G之间。
--waterfall表示以瀑布图形式显示
-S表示查看时域图,也可以用sudo usrp_oscope.py方式得到。
--fft-size表示fft点数,默认1024点。
3.输入sudo usrp_fft.py,得到频谱显示窗口
(3)Simplex数据传输
1、打开一个Terminal,输入
cd/GNURadio_SRC/gnuradio-3.2.2/gnuradio-examples/python/digital。
进入到benchmark_tx.py 和benchmark_rx.py所在路径。
2、在接收机端,键入sudo ./benchmark_rx.py –f 2.4G –r 200k即建立一个载频为2.4GHz、传输速率为200kbit/s的接收通道
3、在发射机端,键入sudo ./benchmark_tx.py –f 2.4G –r 200k,发射机开始发送ASCII码接收端侦听发送来得数据包并显示每个包的接收信息。
检测每个包的错误。
在显示的信息中,True或者False表示数据的CRC校验是否正确。
pktno表示数据包编号,n_rcvd表示接收到数据包个数,n_right表示接收到的正确的数据包个数。
4、接下来应用benchmark传送文件,将benchmark_tx.py和benchmark_rx.py修改成如APPIDEX 1和APPIDEX 2中所示代码。
5、先启动接收端。
再先启动发送端,如图s3-7所示。
在载频2.4G,传输速率为200k的通道上传输READ ME文件。
数据包大小为10。
如果接收端误包率较大,可以通过以下方式
改善:
1)减小包大小
2)注释掉发送端的send_pkt(eof=True)
3)修改一下每个包发送的间隔(在while中加上time.sleep(*)),
4)把发一个包后的sleeptime改小点
6、通过--tx-amplitude=NUM命令可以设置发送功率,默认NUM为12000,大概5-6mw,usrp最大发射功率为50mw,即NUM=32700;
(4)基于USRP的DPSK系统
1.DPSK(差分相移键控)是为了解决普通PSK相位模糊问题提出来的。
基于GRC的DPSK信号产生的流程图如图s6-1所示。
其中Pecket Encoder模块的作
用是对抽样数据进行包编码。
通过GNU Radio平台可以实现DBPSK、DQPSK、D8PSK。
其流程图都是一样的,只需改变调制模块中的调制方式参数即可(如图s6-2)。
图s6-1 DPSK信号调制流程图
2.在接收机端调用usrp_fft.py和usrp_oscope.py,观测DPSK调制产生的射频信号的时域图、频谱图、以及星座图等。
3.DPSK解调及验证DPSK的GRC解调流程图如下:
该流程图中以USRP作为信号源,以接收空间中的无线调制信号。
设计解调流程图应该注意的是其参数如samp_rate、Samples/Symbol、Type等都要与调制流程图中的参数设置对应,并且要符合个参数具体要求。
此外最值得注意的是USRP Source的Decimation要设置为调制流程图中USRP Sink 的Interpolation的一半。
否则不能正确解调出信号源数据。
DPSK调制流程图如图s6-1,解调流程图如图s6-3,接下来分别以500Hz的正弦信号、[0 0 1]的向量以及文件作为信源,通过比较解调数据与信源是否一致来验证整个调制解调过程的正确性。
(5)GMSK
1.基于GRC的GMSK信号产生的流程图如图s7-1所示。
由另外一台USRP设备接收到的GMSK信号时域图和频谱图如图s7-2和图s7-3所示。
可以看出我们得到了期望中的GMSK调制信号。
2.GMSK解调及验证GMSK的GRC解调流程图如下:
该流程图中同样以USRP作为信号源,以接收空间中的无线调制信号。
设计解调流程图应该注意的参数设置与DPSK相同。
否则不能正确解调出信号源数据。
4.接下来分别以1KHz的正弦信号以及文件作为信源,通过比较解调数据与信源是否一致来验证整个调制解调过程的正确性。
四、实验数据记录表格
大连理工大学实验报告
学院(系):信通学院专业:电子信息工程班级:电子1201班
姓名:陈宇学号:201244201 组:___
实验时间:实验室:创新园大厦C221 实验台:
指导教师签字:成绩:
实验七GNU Radio实验
一、实验目的和要求
(1)了解python语言程序。
(2)了解傅里叶变换,掌握usrp观测无线信号频谱图和时域图的方法
(3)了解如何生成和发送一个信号数据包,了解benchmark之间的通信机制,了解benchmark 如何传输文件
(4)了解GRC的信号处理模块、流程图及其使用方法,了解DPSK调制解调原理
(5)了解GRC的信号处理模块、流程图及其使用方法、了解GMSK调制解调原理
二、实验原理和内容
(1)实验一是一个GNU Radio ―Hello World‖的例子。
它产生两个sine波形并且把他们输出到声卡,一个输出到声卡的左声道,一个输出到右声道。
dial_tone.py
1 #!/usr/bin/env python
2 from gnuradio import gr
3 from gnuradio import audio
4 class my_top_block(gr.top_block):
5 def __init__(self):
6 gr.top_block.__init__(self)
7 sample_rate = 32000
8 ampl = 0.1
9 src0 = gr.sig_source_f (sample_rate, gr.GR_SIN_W A VE, 350, ampl)
10 src1 = gr.sig_source_f (sample_rate, gr.GR_SIN_W A VE, 440, ampl)
11 dst = audio.sink (sample_rate, "")
12 self.connect (src0, (dst, 0))
13 self.connect (src1, (dst, 1))
14 if __name__ == '__main__':
15 try:
16 my_top_block().run()
17 except KeyboardInterrupt:
18 pass
第一行告诉我们这是一个Python文件,他利用Python编译器执行。
在第2行和第3行,import 命令导入GNU Radio模块的gr和audio模块。
gr模块用来运行一个GNU Radio应用。
Audio 模块加载一个音频设备块,来从声卡里输入和输出音频和控制音频设备。
第4行开始定义my_top_block类,从gr.top_block (a subclass of gr)中派生。
这是一个流程图的容器。
第4行到第13行是类my_top_block定义。
第5行定义了类my_top_block的构造函数__init__。
该构造函数在第6行通过调用父类构造函数实例化。
在第七行设置变量sample_rate,该变量控制信号采样率。
第8行设置幅度ampl变量。
dial_tone包括三个模块(如下图)和两个接口。
第9行定义了一个信号源src0,产生一个350Hz、32K采样率、幅度为0.1的正弦波。
第10行定义了一个信号源src1,产生一个440Hz、32K采样率、幅度为0.1的正弦波。
gr.sig_source_f 的后缀f表示信号源输出信号时浮点值。
第11行定义了目的dst为audio sink——可以用来发送/接收音频信号到声卡并且控制声卡。
第12行和第13行连接模块。
第15行和第17行的try和except的意思是如果用户按下Ctrl+C则停止运行程序。
第14行表明如果该代码是python编译器执行的唯一模块则执行my_top_block。
下面的两个表示方法是一样的:
fg.connect((src1, 0), (dst, 1))
fg.connect (src1, (dst, 1))
一旦流向图被建立了,我们调用start生成一个或者多个线程去运行它,按下任意键程序控制权就会返回给调用者。
(2)本实验应用到\GNURadio_SRC\gnuradio-3.2.2\gr-utils\src\python目录底下的usrp_fft.py。
本程序的功能是实时给出空间无线信号的频谱占用情况。
相当于一个频谱仪。
(3)
本实验用到/GNURadio_SRC/gnuradio-3.2.2/gnuradio-examples/python/digital底下
的benchmark_tx.py和benchmark_rx.py,前者用来发送,后者用来接收。
benchmark_tx.py生成数据包和帧结构如下图所示,帧的大小可以由用户设定。
PC中运行的GNU Radio软件生成数据包和帧,通过USB传输给USRP。
发送端每发送5个包就等待1秒再发送下5个包。
下图是发送端可选项。
(4)在本实验和下一个实验中,将通过软件无线电平台实现这两种技术的数据传输。
DPSK调制原理:
(5)在CPFSK中,如果频偏指数h如果取1/2,那么此种CPFSK则成为MSK(最小频移键控),它是一种优良的调制方式,MSK在各种频移键控中占用带宽最小。
但是由于无线通信对信号功率谱特性要求很高,特别是限制带外辐射低到-60到-80DB,在码元转换时刻以±相位突跳的MSK信号仍需进一步优化,GMSK(高斯最小频移键控)是其优化技术的一种。
基本技术是在基带码流入VCO之前,先以与调制高斯滤波器进行处理使基带方波的棱角加以圆滑。
三、主要仪器设备
计算机、USRP
四、实验步骤与操作方法
(1)拨号音的产生
1.打开一个Terminal,输入cd
/GNURadio_SRC/gnuradio-3.2.2/gnuradio-examples/python/audio。
进入到dial_tone.py所在路径。
2.输入ls,显示当前路径所含文件。
3.输入gedit dial_tone.py。
打开dial_tone.py文件。
4.键入sudo ./dial_tone.py运行dial_tone.py。
通过耳机(或音响)听PC声卡所发出的声音。
5、Ctrl+C停止运行dial_tone.py。
更改dial_tone.py中ampl的大小以及频率大小,
保存后重新进行第4步操作,感受声音变化。
(2)快速傅里叶变换FFT
1.连接好USRP
2.打开一个Terminal,输入sudo usrp_fft.py –h,将会得到帮助菜单。
-h表示显示帮助菜单
-w表示选择USRP,一般默认值
-R选择USRP子板,一般默认值
-A选择天线,一般默认值
-d表示decimation rate,默认值16。
相当于设置一个抽取滤波器宽度。
USRP的ADC以64MSPS 的复采样率采进64MHz带宽的信号,经过抽取滤波器后,带宽变为原来的1/decim,数据速率变为原来的1/decim。
-f设置采样信号的中心频率,在显示屏上的中间位置。
默认2.5GHz,如果使用RFX2400子板,则只能设置2.3G到2.9G之间。
--waterfall表示以瀑布图形式显示
-S表示查看时域图,也可以用sudo usrp_oscope.py方式得到。
--fft-size表示fft点数,默认1024点。
3.输入sudo usrp_fft.py,得到频谱显示窗口
(3)Simplex数据传输
1、打开一个Terminal,输入
cd/GNURadio_SRC/gnuradio-3.2.2/gnuradio-examples/python/digital。
进入到benchmark_tx.py 和benchmark_rx.py所在路径。
2、在接收机端,键入sudo ./benchmark_rx.py –f 2.4G –r 200k即建立一个载频为2.4GHz、传输速率为200kbit/s的接收通道
3、在发射机端,键入sudo ./benchmark_tx.py –f 2.4G –r 200k,发射机开始发送ASCII码接收端侦听发送来得数据包并显示每个包的接收信息。
检测每个包的错误。
在显示的信息中,True或者False表示数据的CRC校验是否正确。
pktno表示数据包编号,n_rcvd表示接收到数据包个数,n_right表示接收到的正确的数据包个数。
4、接下来应用benchmark传送文件,将benchmark_tx.py和benchmark_rx.py修改成如APPIDEX 1和APPIDEX 2中所示代码。
5、先启动接收端。
再先启动发送端,如图s3-7所示。
在载频2.4G,传输速率为200k的通道上传输READ ME文件。
数据包大小为10。
如果接收端误包率较大,可以通过以下方式改善:
1)减小包大小
2)注释掉发送端的send_pkt(eof=True)
3)修改一下每个包发送的间隔(在while中加上time.sleep(*)),
4)把发一个包后的sleeptime改小点
6、通过--tx-amplitude=NUM命令可以设置发送功率,默认NUM为12000,大概5-6mw,usrp最大发射功率为50mw,即NUM=32700;
(4)基于USRP的DPSK系统
1.DPSK(差分相移键控)是为了解决普通PSK相位模糊问题提出来的。
基于GRC的DPSK 信号产生的流程图如图s6-1所示。
其中Pecket Encoder模块的作用是对抽样数据进行包编码。
通过GNU Radio平台可以实现DBPSK、DQPSK、D8PSK。
其流程图都是一样的,只需改变调制模块中的调制方式参数即可(如图s6-2)。
2.在接收机端调用usrp_fft.py和usrp_oscope.py,观测DPSK调制产生的射频信号的时域图、频谱图、以及星座图等。
3.DPSK解调及验证DPSK的GRC解调流程图如下:
该流程图中以USRP作为信号源,以接收空间中的无线调制信号。
设计解调流程图应该注意的是其参数如samp_rate、Samples/Symbol、Type等都要与调制流程图中的参数设置对应,并且要符合个参数具体要求。
此外最值得注意的是USRP Source的Decimation要设置为调制流程图中USRP Sink 的Interpolation的一半。
否则不能正确解调出信号源数据。
DPSK调制流程图如图s6-1,解调流程图如图s6-3,接下来分别以500Hz的正弦信号、[0 0 1]的向量以及文件作为信源,通过比较解调数据与信源是否一致来验证整个调制解调过程的
正确性。
(5)GMSK
1.基于GRC的GMSK信号产生的流程图如图s7-1所示。
由另外一台USRP设备接收到的GMSK信号时域图和频谱图如图s7-2和图s7-3所示。
可以看出我们得到了期望中的GMSK调制信号。
2.GMSK解调及验证GMSK的GRC解调流程图如下:
该流程图中同样以USRP作为信号源,以接收空间中的无线调制信号。
设计解调流程图应该注意的参数设置与DPSK相同。
否则不能正确解调出信号源数据。
4.接下来分别以1KHz的正弦信号以及文件作为信源,通过比较解调数据与信源是否一致来验证整个调制解调过程的正确性。
五、实验数据记录和处理
(1)拨号音的产生
打开dial_tone.py文件。
如图1所示:
图1 dial_tone编辑语句经上述操作后,由耳机可听到电话音。
(2)快速傅里叶变换FFT
1.输入sudo usrp_fft.py,得到频谱显示窗口,如下图:
图2 频谱图
2. 使用示波器观察信号的时域波形
图3 信道中有信号传输时波形(左)、无信号时波形(右)
从图中可以看出,在无线信道中存在很大的噪声,这对我们在无线信道中传输信号产生了很大的影响,使信号发生失真,从而产生误码。
因此,我们在传送信号时,要考虑减小信道噪声的影响。
一方面,我们可以选择抗噪声性能较好的调制方式对信号进行调制,如QPSK,另一方面,我们可以适当增大发送信号功率,使得信噪比增大,从而减小误码率。
(3)Simplex数据传输
1.在发射机端,键入sudo ./benchmark_tx.py –f
2.4G –r 200k,如下图所示,发射机开始发送ASCII码:
图4 发送端
2.在接收机端,键入sudo ./benchmark_rx.py –f 2.4G –r 200k,即建立一个载频为2.4GHz、传输速率为200kbit/s的接收通道,如下图所示:
图5 接收端
图6 接收端频谱图
由上图可看出,接收端侦听发送来得数据包并显示每个包的接收信息并可检测每个包的错误,且接收到的频率约2.4GHz 。
(4) 基于USRP 的DPSK 系统 RP 性能测试
图7 USRP 各端口测试
由上图可知,USRP 仅A 端口可进行收发,B 端口不能收发。
2.程序框图及波形
图8 发送框图
图9 接收框图
图10 发送波形(左)、接收波形(右)
由上图可知,通过以上程序框图可成功完成信号发射并能正确进行其他信号的接收。
六、实验结果与分析
本次实验主要学习了如何在linux系统下利用ubuntn实现各种基本操作,并学习了基于USRP 的信号收发方法和与其相关的时域频域波形的查看方法。
七、讨论、建议、质疑
通过本次实验,我学习了如何安装Linux系统并使用ubuntn的相关指令完成基于USRP的DPSK系统信号的发送接收。
在实验过程中还运用了以前学过的systemview相关分析方法,感觉收获很大。