一起玩转GNU Radio:gr-audio

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

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

目录

一、cvsd_sweep

 1、VCO模块

2、CVSD Encoder和CVSD Decoder模块

3、Packed to Unpacked模块

4、Char to Float模块

 5、Audio Sink模块

6、QT GUI Tab Widget模块

二、dial_tone

1、Signal Source模块

2、Add模块

3、QT GUI Range模块

三、有用链接


一、cvsd_sweep

GRC文件为《gnuradio-3.9.1.0/gr-audio/examples/grc/cvsd_sweep.grc》。该流图的主要功能是实现了CVSD编码和解码,运行时扬声器可发声。VCO模块受控于Signal Source模块,产生幅度频率变化的正弦信号,再输入给CVSD编码器进行编码,再经过CVSD解码器进行解码后对信号进行了还原。每个可直观查看信号的时域和频域变化。具体用到了Signal Source、Throttle、VCO、CVSD Encoder、CVSD Decoder、Packed to Unpacked、Char To Float、Audio Sink、QT GUI Frequency Sink、QT GUI Time Sink模块。

 1、VCO模块

VCO - GNU Radio

该模块为压控振荡器模块,可以根据输入幅度生成相应频率的正弦波。模块输入是控制电压的float数据流,输出是float型的(振荡器)正弦波。

模块参数解释如下:

Sample Rate,采样率。

Sensitivity,灵敏度,单位为弧度/秒/伏。

Amplitude,振幅,输出信号的振幅。

2、CVSD Encoder和CVSD Decoder模块

一般成对出现在程序中。这是CVSD编码器/解码器的包装程序,它执行与声码一起工作所必需的插值和滤波。它将传递的浮点数(+ -1)转换为短整型数值,将其缩放(至32000;略低于最大值),对其进行插值,然后对其进行声码处理。输入的采样率可以是任何值,当然,采样率越高和插值率越高,声音质量就越好。

模块参数解释如下:

Resample,重采样取值。

Frac. Bandwidth,频率带宽值。

3、Packed to Unpacked模块

Packed to Unpacked - GNU Radio

该模块是数据包解码模块,支持指定大端和小端方式。

模块参数解释如下:

Bits per Chunk,每个输出(字节/短整型)中要包含多少位。

Endianness:处理输入位时是以大端MSB方式还是小端LSB方式;(LSB的意思是:全称为Least Significant Bit,在二进制数中意为最低有效位,一般来说,MSB位于二进制数的最左侧&#

### 使用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、付费专栏及课程。

余额充值