Gnuradio LimeSDR-mini 发送音频AM信号

AM 就是调幅,幅度调制,这种调制很好理解,就是让载波的幅度随着音频的幅度变化,载波存在的意原因是,高频率的载波更容易从天线辐射出去.

音频的AM 调制,可以使用乘法器来实现,就是通过乘法器,将音频信号的幅度变化体现到一个高频的信号幅度变化. 下图中,使用了一个sample rate 是48k 的wav 作为Audio Source,将此音频信号通过Block Multiply 与一个100kHz 的载波信号相乘就完成了对这个100k cosine 信号的调幅,然后转化成Complex 数据类型后送到SDR Sink.

Interpolation FIR Filter 的作用是将Audio Source 送来的数据作一次滤波,切掉高频部分, 并将对音频数据差值到20倍sample rate,也就是SDR Sink 的input sample rate. 如果FIR Filter输出的符号率比SDR Sink 上设置的Sample rate 高或者低,可能会导致接收端播放出的音频被减速或者被加速.

这里列举出SDR Sink(osmocom Sink) 的两个参数,其他参数可以参看图片:
Device Arguments: driver=lime,soapy=0
Antenna: BAND1

下图中,音频信号先被调幅到100k,这一步主要目的是为了说明AM 调制的原理就是乘法器. 这100k的载波又被送入SDR Sink然后后再通过435.1M 的载波发送出去,实际上在SDR Sink 中又做了一次乘法.
在这里插入图片描述信号经过乘法器后会产生频偏,SDR Sink 发射出来的信号有三个主要频率分量: 比载波435.1M低100K的下边带 + 435.1M的载波分量 + 比载波435.1M高100K 的上边带. 所以,接收机要在435M 和435.2M这两个频点才能解调出正确的音频信号,在435.1M 的载波频点,是听不到声音的.

我是用自己的FT-818 来接收LimeSDR-mini 发射的AM 信号的,接收频点设置在435M.

上面一张图中,osmocom Sink 设置的发射频点是435.1M, 但只能在435M 和435.2M 这两个频点才能受到信号. 为了让osmocom Sink 的发射频率就是接收机的接收频率,我将100K调幅的blocks拿掉. 刚才有提到,信号进入osmocom Sink 后,实际上还会和最终要发射的载波信号作一次乘法,Audio 信号直接送到osmocom Sink 的话,就是直接对RF 信号进行调幅了. 下图就是一张能正常工作的grc:
在这里插入图片描述

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用gr-modtool创建信号源,可以按照以下步骤操作: 1. 打开终端并进入gnuradio的工程目录。 2. 运行以下命令:`gr-modtool add -t general -s signal_source`。这将创建一个名为`signal_source`的新模块。 3. 进入新创建的模块目录:`cd gr-my_module/src/lib`。 4. 在这个目录下,你将会看到一个名为`signal_source_impl.cc`的文件。这个文件是信号源的实现文件。 5. 编辑`signal_source_impl.cc`文件,实现你的信号源逻辑。 6. 在`signal_source_impl.cc`文件中,添加一个输出端口,你可以像下面这样添加一个名为`output`的输出端口: ``` void signal_source_impl::forecast (int noutput_items, gr_vector_int &ninput_items_required) { // Ensure the input buffer has enough space for the required output. ninput_items_required[0] = noutput_items; } int signal_source_impl::general_work (int noutput_items, gr_vector_int &ninput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) { // Get an output buffer to write to. float *out = (float *) output_items[0]; // Generate the signal and write it to the output buffer. for (int i = 0; i < noutput_items; i++) { out[i] = ... // Your signal generation code goes here. } // Tell gnuradio how many output items were produced. return noutput_items; } signal_source_impl::signal_source_impl () : gr::sync_block ("signal_source", gr::io_signature::make (1, 1, sizeof (float)), gr::io_signature::make (1, 1, sizeof (float))) { } ``` 7. 在模块目录下,运行`make`命令来编译你的信号源模块。 8. 如果一切正常,你应该可以在gnuradio Companion中看到你新创建的信号源模块了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值