一起玩转GNU Radio:gr-analog

本文内容、开发板及配件仅限用于学校或科研院所开展科研实验!

本文介绍GNU Radio源码的gr-analog相关实例及模块。

目录

一、 noise_power

1、Noise Source模块

2、Fast Noise Source模块

3、Throttle模块

4、Complex to Mag^2模块

 5、Abs模块

 6、Single Pole IIR Filter模块

7、Log10模块

8、QT GUI Number Sink模块

二、Signal source message ports

1、Message Strobe模块

2、Message Strobe Random-Delay模块

三、有用链接


一、 noise_power

GRC文件为《gnuradio-3.9.1.0\gr-analog\examples\noise_power.grc》。该流图的主要功能是实现了噪声信号的功率强度测量,具体用到了Noise Source、Fast Noise Source、Throttle、Complex to Mag^2、Abs、Single Pole IIR Filter、Log10、QT GUI Number Sink模块。

1、Noise Source模块

Noise Source - GNU Radio

该模块是噪声源模块,是通过使用高斯或均匀分布来生成“噪声”信号,支持complex、float、int或short类型的数据输出。

模块参数解释如下:

Noise Type,随机分布类型,支持高斯分布、均匀分布、拉普拉斯分布和冲激分布。

Amplitude,噪声信号振幅,表示一维噪声的标准差,如果噪声源是复数噪声源,则该参数需分配为实部和虚部。

Seed,随机噪声生成器的种子,对于均匀分布和高斯分布,该种子取值应该是一个负数。

2、Fast Noise Source模块

Fast Noise Source - GNU Radio

该模块是快速噪声源,与Noise Source模块相比,不同之处在于它通过预先生成从指定分布中提取的随机变量来减少CPU的负载。该模块在运行时,从样本资源池中均匀地随机选择样本,这是一个非常快速的操作。支持complex,float,int或short类型的数据输出。

模块参数解释如下:

Noise Type,随机分布类型,支持高斯分布、均匀分布、拉普拉斯分布和冲激分布。

Amplitude,噪声信号振幅,表示一维噪声的标准差,如果噪声源是复数噪声源,则该参数需分配为实部和虚部。

Seed,随机噪声生成器的种子,对于均匀分布和高斯分布,该种子取值应该是一个负数。

Variate Pool Size,可变池大小,表示预生成样本的数量。

### 使用GNU Radio和RTL-SDR实现FM广播接收 为了使用GNU Radio和RTL-SDR实现FM广播接收,需按照特定流程设置各个组件并调整其参数。 #### 安装必要的软件包 确保已安装GNU Radio以及支持RTL-SDR硬件的驱动程序。对于Ubuntu 14.04或16.04版本的操作系统而言,在终端执行命令`sudo apt-get install gnuradio gr-osmosdr`可完成上述操作[^1]。 #### 构建流图 打开GNU Radio Companion (GRC),创建新的Flow Graph文件用于构建信号处理链路。依次添加以下模块至工作区: - **RTL-SDR Source**: 设置中心频率为目标频道(例如90.5 MHz),增益值依据实际环境而定。 - **Low Pass Filter**: 设定截止频率低于音频带宽上限,通常取值范围为87kHz到108kHz之间。 - **WBFM Receive**: 解调宽带FM信号,恢复原始声音信息。 - **Rational Resampler**: 调整采样率匹配后续阶段需求。 - **Multiply Const**: 控制音量大小,默认乘数设为1即可满足大多数情况下的播放效果。 - **Audio Sink**: 输出解码后的PCM数据给声卡设备发声。 连接这些模块形成完整的收听路径,并适当修改各节点属性使之适应具体应用场景的要求[^2]。 ```python from gnuradio import blocks, analog, audio, filter as gr_filter from gnuradio import osmosdr import math if __name__ == '__main__': tb = gr.top_block() # 创建源对象 src = osmosdr.source(args="numchan=1") src.set_sample_rate(2e6) src.set_center_freq(90.5e6) # 添加低通滤波器 lpf_taps = gr_filter.firdes.low_pass( gain=1, sampling_freq=int(src.get_sample_rate()), cutoff_freq=100e3, transition_width=10e3 ) lpf = gr_filter.freq_xlating_fir_filter_ccc(int(math.ceil(src.get_sample_rate()/200e3)), lpf_taps, 0, int(src.get_sample_rate())) # WBFM 接收机 wbfm_rcv = analog.wfm_rcv() # Rational重采样器 rsrc = rational_resampler.resamp_ff(interpolation=48,decimation=50) # 音频倍增常量 mul_const = blocks.multiply_const_vff((1., )) # Audio sink aud_sink = audio.sink(samp_rate=48e3) # 连接所有模块 tb.connect(src,lpf,wbfm_rcv,rsrc,mul_const,aud_sink) try: tb.run() # 开始运行流图直至手动停止 except KeyboardInterrupt: pass tb.stop() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值