我正计划为软件定义的无线电接收器构建一个数据采集系统。基本上,它只使用一个 ADC 对模拟信号进行采样并将信号发送到处理器。然后将一串样本输入到带有软件定义无线电软件包的主机中进行信号处理。由于我工作的频率相当低,我想简单地以两倍奈奎斯特频率运行 ADC,而不需要单独的 I/Q 通道,而且我计划使用零中频。
大多数 SDR 程序设计为在本地处理分析信号,而不是真实信号,因此需要在信号到达主机之前动态地将信号的真实样本转换为硬件内部的 I/Q 组件。但是,我对信号处理没有任何先验知识,并且我正在努力想出一个解决方案,但是在阅读了我在网上可以找到的所有内容之后,基本上有两种选择(如前所述,我没有有任何DSP知识,我可能被误导了。)。
数字下变频:将信号分别与 sin(ωt) 和 cos(ωt) 相乘以获得 I 和 Q。它基本上以数字方式重新创建 I/Q 混频器,在低中频无线电接收器中很常见。
- 对我来说,这个概念似乎很容易理解,它的实现也很简单,只是乘法。虽然这意味着我的分析信号的频率必须改变,但我认为这没什么大不了的,如果整体上 DDC 更容易的话,我不妨将信号上变频一点或切换到低中频。
希尔伯特变换:对真实样本进行离散希尔伯特变换,得到解析信号。
对我来说,我不知道如何实现它。似乎有很多不同的方法来做到这一点。
(1) 通过直接卷积计算希尔伯特变换。这种方法似乎受到许多限制。André Bergner 说: “与基于 FFT 的相比,直接卷积非常慢 [...] 其次,HT 内核在零处具有奇异性,并且卷积积分的数值计算是不适定的”。
(2) 计算 FFT。删除负频率。应用逆 FFT。
(3) 将变换建模为时不变滤波器并按此实现。
最初,我认为使用数字下变频会很方便,因为......首先,我不知道我应该做什么来实现希尔伯特变换,尤其是在动态输入样本上使用它时,数字下变频似乎是更容易实施。此外,希尔伯特变换看起来像一个“有损”过程,由于 FFT/滤波器的窗口大小,一些信息会丢失,但 DDC 是“无损”的。此外,由于仅使用乘法,DDC 看起来要快得多。
但仔细一看,事实并非如此。在 DDC 中,I 和 Q 通道也需要在之后进行滤波,根据定义,所有实际的数字滤波器都是近似值,说 DDC 比 DHT“有损”少是不正确的。此外,使用两个滤波器而不是在单个数字滤波器中对 DHT 建模的要求意味着 DDC 可能比 DHT 更慢。DDC 中的数控振荡器也存在各种问题。
我的问题是,
如果目标只是创建一个简单的实现,以便从实时信号的样本流中获取 I/Q 分量,那么哪种方法在简单性和易于理解方面更好?
如果目标是创建最佳“质量”的输出,哪种方法更可取?
如果目标是在计算能力有限的信号处理器上创建高效程序,那么哪种方法在性能方面更好?
如果希尔伯特变压器是可取的,那么实现它的合适方法是什么?有没有参考实现?我应该从什么开始?特别是,该
hilbert()
功能是大多数科学计算软件包似乎只设计用于处理现有的数据数组,而不是连续的数据流,赞赏使用窗口演示的实现。总的来说,哪种方法适合我的应用?