一起玩转GNU Radio:AGC自动增益控制

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

本文介绍GNU Radio中的AGC自动增益控制模块。

在开始介绍之前,首先推荐一下Alexandros-Apostolos A. Boulogeorgos作者的https://github.com/aboulogeorgos/Wireless-communication-systems-Lab,这里作者分享了大量的GRC实例,但是我看目前关注的人数很少。我也是看了这个之后,被作者整理汇总工作的细致程度深深打动,下定决心一口气读完了作者分享的所有实例。

我打算在接下来一段时间里,首先把作者分享的实例,加上我个人的理解,继续丰富一下内容(例如XX模块中的参数的含义解释,以及XX模块的功能解释等等),然后,也把我这几年来搜集到的、自己改写的一些GNU Radio实例分享给大家,希望能够对关注、使用GNU Radio的朋友有所帮助。也欢迎大家有问题及时反馈给我,或者有好的实例,一起分享给大家。

目录

一、agc_example.grc

二、有用链接


一、agc_example.grc

agc(自动增益控制)_百度百科

AGC是自动增益控制。作用是自动控制信号的放大倍数。也就是当高频头接收到弱信号时,它会自动控制增加放大倍数,反之减小放大倍数。实现这种功能的电路简称AGC电路。AGC电路是闭环电子电路,它可以分成增益受控放大电路和控制电压形成电路两部分。增益受控放大电路位于正向放大通路,其增益随控制电压而改变,增益自动地随信号强度而调整。

二、有用链接

https://github.com/aboulogeorgos/Wireless-communication-systems-Lab

http://www.sdr.wiki/

http://www.gnuradio.wiki/

AGC - GNU Radio

### 使用 GNU Radio 3.9 进行发送操作 GNU Radio 是一种开源软件开发工具包,用于实现无线通信协议的软件定义无线电(software-defined radio, SDR)[^1]。要利用 GNU Radio 版本 3.9 发送信号,通常涉及创建一个流图(flowgraph),该流图由多个模块(blocks)组成,这些模块负责处理数据的不同方面。 对于发送功能而言,至少需要三个主要组件: - **Signal Source**: 提供待传输的数据源。 - **Modulator**: 对原始数据应用调制方案以便通过物理媒介传播。 - **USRP Sink 或其他硬件接口 Block**: 将已调制后的基带信号转换成射频(RF)信号并经由连接到计算机上的SDR设备发射出去。 下面是一个简单的 Python 脚本例子,它展示了如何设置一个基本的 FM 广播发射器使用 USRP 设备来广播音频文件的内容: ```python from gnuradio import gr from gnuradio import audio from gnuradio import blocks from gnuradio import filter from gnuradio.filter import firdes from gnuradio import analog import osmosdr # 假设这里使用的是 OsmoSDR 驱动程序支持的设备 class fm_transmitter(gr.top_block): def __init__(self): gr.top_block.__init__(self) sample_rate = 200e3 # 设置采样率 carrier_freq = 88.7e6 # 中心频率设定为FM波段内的某个频道 src = blocks.wavfile_source('audio_file.wav', False) # 加载WAV格式的声音文件作为输入 amp = blocks.multiply_const_ff(0.5) # 可选增益控制 demod = analog.wfm_tx(audio_rate=int(sample_rate), quad_rate=int(sample_rate*4)) sink = osmosdr.sink(args="numchan=" + str(1) + " agc=false") sink.set_sample_rate(sample_rate) sink.set_center_freq(carrier_freq, 0) sink.set_gain(10, 0) sink.set_if_gain(20, 0) sink.set_bb_gain(20, 0) sink.set_bandwidth(int(sample_rate/2), 0) self.connect(src, amp, demod, sink) if __name__ == '__main__': tb = fm_transmitter() try: tb.run() # 开始执行流程图直到遇到错误或被手动停止 except KeyboardInterrupt: pass ``` 这段代码构建了一个名为 `fm_transmitter` 的类实例化对象,并设置了必要的参数以启动一次完整的从读取本地存储的 `.wav` 文件到最终通过指定中心频率发出相应 RF 波形的过程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值