RaspberryPi 无线电黑客如何将数字 GPIO 信号转换为 FM 信号?

信息处理 傅里叶变换 调频 数模
2022-02-12 04:01:45

在查看了有关 RaspberryPi FM 发射器黑客如何工作的各种解释后,我意识到缺少一些基本部分。大多数解释都在讨论如何通过傅里叶定理模拟信号构建数字信号,但从未讨论如何构建数字 GPIO (3.3 Vpp) 并将其用于调制 FM 信号。

  1. 如果有必要,如何获得反向操作?
  2. 如何使用数字载波(它的频率)
  3. 在此之上如何调制“模拟”音频?

我认为一张或更多关于如何通过非幅度变化的数字信号构建生成的 FM 信号的图片将是一个有用的答案。我希望我有一个适当的 DSO 来亲自看到这个,但我没有。

注意:在 hack 中,音频传输可以专门在 1-250 MHz 区域进行,但谐波可以一直清晰地听到到 1.1 GHz 区域。这里的评论。

我能找到的最接近的解释是使用PWM到模拟,如下图所示:

通过高频逆变器进行脉宽调制以逼近真实的正弦波。

(图 11.5。图片来源:Mark Fedkin 在 Dunlop 之后修改,2010)

但这并没有太大的影响,因为它没有解释正弦波的另一半(负值)是如何产生的?

2个回答

首先,为什么您看不到负电压的答案是数字输出的范围从 0 到输出的最大数字电压 (+Vs)。这将具有 +Vs/2 的 DC 偏移,该偏移通过高通滤波器(串联电容)简单地过滤掉,从而在串联电容之后产生具有负电压的双极波形。

更新:根据他在回答中提供的 Marcus 链接,以下不是他们在 Rasberry PI 中实际使用 FM 发射器的方式,但作为一种可能的方法仍然有效。实际实现似乎要简单得多,利用 Rasberry-Pi 中现有的 PWM 扩频时钟控制器。该设备通常用于通过扩展最大发射发射来帮助通过发射标准,从而降低整体功率谱密度。因此,这样的设备可以用于 FM 传输,因为它通过改变正在传播的时钟信号的零交叉(稍微)来实现它的传播。因此,如果您可以访问过零变化方式的控制机制,您就可以实现 FM 发射机。

下面的原始响应显示了如果没有专用的扩频 PWM 时钟控制器可以做什么:


可以使用数控振荡器与 sigma-delta DAC 组合来实现该实施。NCO 可以提供精确的频率控制以及 AM、FM 或 PM 调制(您正在使用 FM),而 sigma delta DAC 可以仅从 1 个数字位提供多级模拟输出。

由于 FM 只关注过零,对于一个非常简单的演示应用,完全省略 sigma-delta 也是可行的,在这种情况下,NCO 是用 1 位输出实现的。但是,这会产生很大的抖动,因为过零将仅限于实际时钟的交叉与仿真波形中所需的交叉(以及需要更严格的模拟滤波的高频谱噪声)。更高的时钟频率会减少这种情况,但更有效地实现 sigma-delta 架构并在此过程中最大限度地减少抖动;这是相位噪声,又是FM噪声;然而,这种抖动很容易量化/预测,并且可能有足够高的时钟可以证明不是问题。

在这篇文章中,我将详细介绍 NCO。

用于相量实现的数控振荡器 (NCO)?

至于通过调制生成模拟输出,NCO 与 DAC 组合在一起,如下图所示,其中还显示了所有调制旋钮(通常称为 DDS 或直接数字合成器):

在此处输入图像描述

我没有专门审查 Rasberry pi 的实现,以了解您是否正在使用实际的 n 位 DAC,或者该部分是否使用 PWM 样式 DAC(Sigma-Delta 调制器)实现,或者相位累加器的 MSB直接使用(根据您描述输出的草图,我怀疑后两者中的任何一个)。在 Sigma Delta DAC 的情况下,它可以使用通带架构来实现,以便进行噪声整形以最大化 FM 频段中的有效位数(而不是需要非常高采样率)。

下面给出了 DAC 重建的更多考虑因素,与 Sigma Delta 方法没有直接关系,但确实显示了如何根据 DAC 输出后的后滤波生成高于 DAC 采样率的更高频率输出。

在此处输入图像描述

下图显示了一个非常简单的 Sigma Delta DAC 实现。将其与上面的 NCO 结构相结合,通过采样数字字生成采样,使用 FCW 端口作为 FM 调制控制可以创建 FM 信号。然而,如上所述,可以使用通带结构来代替低通结构的数字累加器,然后允许选择性噪声整形以抑制您感兴趣的 FM 频带内的量化噪声:

在此处输入图像描述

我只是略过

https://github.com/SaucySoliton/PiFmRds/blob/master/src/pi_fm_rds.c#L454

从该代码的样子来看,它初始化了一个时钟发生器,使其以可调节的时钟运行。

然后,它使用音频幅度实时修改该时钟的频率。PWM 似乎不涉及,除了使用 PWM 单元的程序通过触发控制字的 DMA 传输到锁相环控制寄存器。

这可能不会告诉你太多。把它想象成

  • 就像在模拟 FM 发射器中一样,音频幅度用于降低或降低振荡器的频率
  • 因为您需要精确的时间来执行此操作,所以程序利用 Pi 的 PWM 单元在每个音频采样周期生成一个事件
  • 因为从 CPU 内核获取数据到内存映射的东西(例如振荡器的控制器)会花费很多 CPU 周期,而您需要其他东西来处理其他事情,因此 Pi 中有一个专用单元可以为您进行传输,并且可以在您需要时启动它.