NEWS ARTICLE

爱丽丝漫游软件无线电世界(第七章)—— 积木城堡

Wireless Vision2026-10-09 09:53:26750 reads

走出硬件博览会的爱丽丝,心中生出疑问:硬件负责传递信号,那是谁指挥硬件完成信号处理?在她眼前矗立起一座积木城堡,这里便是 GNU Radio 的世界。城堡内壁排布红、橙、蓝、绿、紫五大类功能积木,通过标准化接口,依靠流动虚线自由拼接组合成信号流图。在积木大师的带领下,爱丽丝亲眼见证只用混频器、滤波器、抽取器几块积木,通过正向、反向不同排列,就能搭建 DDC 数字下变频与 DUC 数字上变频链路。她还了解到这套积木体系源于 2001 年,依靠统一接口标准,全球工程师持续贡献模块,我们也能编写 OOT 自定义空白积木拓展功能。当掌握积木拼接的方法,下一步,就可以将搭建好的流图连接真实 SDR 硬件,捕捉空气中真实的无线电信号。

爱丽丝从硬件博览会走出来时,脑海里还盘旋着USRP的FPGA、Zynq的融合架构、RTL-SDR的固定芯片……每一块板卡都在用不同的方式承担着信号处理的任务。

但她手中的信号流图告诉她,无论硬件如何变化,信号要走的路径是一定的:从天线进来,经过射频前端、ADC、DDC、基带处理、DUC、DAC、射频前端,再从天线出去。

“硬件负责走路,”她自言自语,“那谁来告诉硬件怎么走?”

她抬起头。前方出现了一座巨大的城堡。城堡的墙体由成千上万块彩色的积木堆叠而成——每一块积木都悬浮在各自的位子上,在缓慢自转,像被一只无形的手轻轻托住。积木与积木之间有发光的虚线连接,那些虚线在不停变动——有时断开,有时重新连上,有时一条虚线岔开变成两条,有时两条汇成一条,像一张活着的、永不凝固的网。

爱丽丝在入口处停住了脚步。城堡正门上方的牌匾上刻着一行字:

“GNU Radio——砖块可以拆了重拼。”

她愣了一下。GNU Radio——她第一次跳进树洞时,白兔的T恤上印着的就是这个名字。那时她以为它只是一个标签。现在她站在了它的门口。

牌匾下方还有一行小字:

“不要问城堡能做什么——问你想用积木拼出什么。”

她推开那扇门,走了进去。

一、五色长廊

城堡内部比外观还要壮阔。

她站在一条环形步道的起点,步道像盘山公路一样沿着城堡内壁蜿蜒上升。而城堡内壁上,成千上万块积木按照颜色和功能整齐地排列在各自的分区里——红、橙、蓝、绿、紫五色光芒交织在一起,把整个城堡内壁染成了一幅巨大的调色盘。

“红色是起点,橙色是剪裁,蓝色是运载,绿色是加工,紫色是终点。”

一个声音从她头顶传来。爱丽丝抬起头,看到一个穿着灰色卫衣、戴着护目镜的人正坐在一个悬浮平台上,膝盖上摊着一块积木。他的护目镜镜片上反射着流动的代码,但他在和爱丽丝说话的时候,把护目镜推到了额头上。

“你是积木大师?”爱丽丝问。

“这里的人都这么叫我。”那人轻轻一跳,从平台上落下来,落在她面前,“欢迎来到积木城堡。这里的每一块砖都是可以拆的——不是真的拆,是‘重新配置’。”

他带着爱丽丝沿着环形步道走了一圈,每经过一个颜色区域就停一下。

红色区域——“信号源”这里的积木都用来产生信号。正弦波、方波、锯齿波、噪声信号、文件读取器、硬件输入端口……一块块红色积木排成几排,每一块都能输出一种特定的信号。“信号源积木是流图的‘起点’——一根虚线从这儿伸出去,信号就开始流动了。”

橙色区域——“滤波器”低通、高通、带通、带阻、FIR、IIR……数十种不同形状的滤波器排成几排,每块积木表面都画着一条频率响应曲线。“它们是信号的‘剪裁师’。哪段频率要留下,哪段要切掉——全部由参数决定。”

蓝色区域——“调制与解调”这里是爱丽丝最眼熟的区域。AM、FM、SSB、QPSK、QAM、PSK……她在通信世界里见过的所有调制方式,这里都有一块对应的积木。旁边还排列着与它们配对的解调积木。“调制积木把基带信号搬上载波,解调积木把它卸下来——频率搬上搬下,全靠它们。”

绿色区域——“处理与变换”FFT(快速傅里叶变换)、抽取、内插、希尔伯特变换、自动增益控制、均衡器、同步追踪……这些积木的名字有些她认识,有些第一次见。“抽取是降速,内插是升速——你在数字变频工厂里见过的DDC和DUC,就是由混频器、滤波器、抽取器/内插器这些积木组合而成的。”

紫色区域——“输出与显示”时域波形显示、频域频谱显示、星座图显示、音频输出、文件存储、网络发送……“它们把处理完的信号变成你能看、能听、能存、能发的东西。一条流图的最后一个节点,通常是一块紫色积木。”

爱丽丝站在五色长廊的末端,回头望了一眼走过的路。红、橙、蓝、绿、紫五种颜色在城堡内壁上交汇成一道缓缓流动的光带。

“所以……如果我选择一块红色信号源,接一块蓝色调制器,再接一块绿色处理积木,最后接一块紫色输出——就形成了一条完整的信号链?”

积木大师靠在栏杆上,双手插在卫衣口袋里:“你刚才总结了GNU Radio工作的全部逻辑。”

二、演示:用积木拼出DDC和DUC

积木大师带着爱丽丝走到城堡中央的工作区——一片悬浮在空中的空白面板,像一块无边框的屏幕,等着被积木填满。

“你在数字变频工厂里看到了DDC的硬件实现——混频、滤波、抽取,全部由FPGA并行完成。现在看GNU Radio的版本,看它是怎么用软件积木搭出同样功能的。”

他依次把三块积木拖到工作区:

第一块:混频器——蓝色区域里的一块积木,输入是高频信号,输出是经过混频的信号。

第二块:滤波器——橙色区域里的一块低通滤波器积木,用来切掉混频后产生的高频杂波。

第三块:抽取器——绿色区域里的一块积木,把采样率降下来。

三块积木串联,虚线自动连接。积木大师点击“运行”。

屏幕上显示出一束高频信号经过三块积木后的变化——第一块把它从中频变成了基带,第二块切掉了带外杂波,第三块降低了数据率,屏幕上出现了一束干净、平滑的基带信号。

“这就是一个完整的DDC——数字下变频,用GNU Radio的积木搭出来的。和USRP里FPGA做的是完全相同的流程,区别只是——硬件里的DDC是焊死的功能,这里的DDC是三块独立的积木,可以拆开、替换、重组。”

他把三块积木的顺序全部反过来:内插器→滤波器→混频器,再点击运行。屏幕上显示出一束基带信号经过这三块积木后,重新变回了高频信号。

“DUC——数字上变频。 同样的积木,反向排列就是发射。”

爱丽丝站在两幅流图之间来回看了几遍。她注意到一件事:“DDC和DUC共用了一组积木——混频器、滤波器、抽取器/内插器。改变的只是排列顺序。”

“没错。积木不变,排列变,功能就变了。 ”积木大师说,“在FPGA里,DDC和DUC是两套独立的硬件电路,各焊各的。在GNU Radio的积木城堡里,它们是同一套积木的两种排列方式——先混频还是先抽取,决定了它是接收还是发射。”

三、可互换的语言

爱丽丝回到工作区旁边,盯着自己刚才看到的那两幅流图,忽然问了一个她酝酿了很久的问题:“这些积木,都是谁造的?”

积木大师笑了一下:“全世界的工程师都在造积木。不同国家、不同语言、不同时区的人,往同一个城堡里上传自己写好的模块——只要符合GNU Radio的接口规范,任何人都能造一块新积木放进来,其他人就能在城堡里调用它。”

“接口规范?”

“这是GNU Radio最核心的设计。每一块积木都有标准化的输入端口和输出端口。不管你的积木是谁写的、用什么语言写的、在什么平台上写的——只要它的输入口和输出口符合这个标准,它就能和别的积木连接。GNU Radio通过一种叫流图的机制,把所有的积木串联成一条完整的信号处理链路。”

他拿起一块信号源积木和一块滤波器积木,将它们并排放置。一条虚线自动从信号源的输出端延伸到了滤波器的输入端。

“信号源不认识滤波器。但它认识接口。输出端口的数据类型和输入端口的匹配——虚线就会自动生成连接。你不需要告诉它‘连到这块’,它自己知道能连。你可以在同一幅流图里,把一块加拿大工程师写的信号源,连到一块德国工程师写的滤波器,再连到一块日本工程师写的调制器——它们完全不需要彼此认识。接口就是它们共同的语言。”

他指向城堡内壁那些正在流动的虚线:“每一条虚线,就是一个遵循GNU Radio接口标准的连接。它们不需要知道对方是谁,只需要知道对方输出什么格式、输入什么格式。只要格式一致,就能通话。”

爱丽丝看着那些流动的虚线:“那如果我想加一块新的积木——在GNU Radio城堡里没有的——怎么办?”

积木大师转过身,从旁边的架子上取下一块积木,递给她。那是一块“空白积木”——没有任何标签和图标,只有一个等待被写入的空槽。

“当你想要一个现有积木库里没有的功能——你可以自己写一块新的。GNU Radio支持OOT(Out-of-Tree)模块开发,意思是你可以独立于官方发布版本之外,自己写一块积木——定义输入输出、编写处理逻辑、编译安装——然后它就变成了一块新的信号处理模块,可以像城堡里其他积木一样被拖拽到工作区使用。然后上传到城堡里,下一个来参观的人就能用它。”

爱丽丝握着那块空白积木。在城堡的内壁上,成千上万块积木仍在自转、流动、发光——有的是几十年前有人写的,有的是上周有人写的,有的可能就是今天刚被放上去的。

四、旧标签

积木大师带着爱丽丝走到城堡角落的一面墙前。那里的积木比别处的颜色稍旧一些——排列更紧密,边缘的接口标记和别处没有区别。

爱丽丝走近了才发现,它们每一块侧面上都刻着一个名字和一个年份。名字是不同的——有些是英文,有些是德文,有些是日文——年份从2001年开始,一直排到最近。

“这些是第一代积木。”积木大师说,“2001年,GNU Radio项目启动的时候,只有十几块。后来,越来越多人加入,每年都有新积木被写出来、放上去。旧的还在用,新的也在加——接口标准一直没变过。”

他指了指其中一块:“这块侧面上写的是Eric Blossom——GNU Radio的创始人。2001年,他写了第一批积木,然后说:‘让所有人都能造积木。’接口标准和流图机制就是这么来的。”

爱丽丝蹲下来,看着那一排写着年份的积木,从2001一直看到2024。没有一块被移走。

“二十多年了,”她说,“接口标准没变过。”

“不变的是接口,变的是积木的数量和种类。 ”积木大师说,“二十多年前,城堡里只有十几块积木——信号源、滤波器、调制器、解调器、示波器。现在,已经有几千块了。每一块新积木都遵循同一个GNU Radio接口标准加入城堡——新老积木还能连在一起。”

他顿了顿,补充道:“这就是为什么GNU Radio能做二十多年——不是因为城堡有多大,而是因为它让所有人都能造新的积木。”

爱丽丝把视线从那些旧标签上移开,沿着观景台眺望。城堡的内壁上,成千上万块积木仍在自转、发光、被虚线连成一张流动的网。

“那下一站,”她问,“是不是可以用这些积木去做一个真实的东西了?”

积木大师笑了:“你猜对了。在隔壁的工坊里,你可以把你拼出来的流图,连上真实的SDR硬件——收一次真实的信号。GNU Radio的积木不止能处理模拟信号,它还能通过硬件驱动模块,连接真实的射频设备。”

他指向城堡尽头的一扇门。门缝里透出微弱的音频声——有电台的语音,有一段正在播放的歌曲的前奏。

(未完待续,下一章:第一个作品——爱丽丝将用她在积木城堡里学会的GNU Radio积木拼法,连上一块真实的SDR硬件,收听到真实的FM广播。从积木到真实的空气信号,从拼图到收听。)

【第七章知识点回顾】

SDR概念童话化身
GNU Radio积木城堡——开源的信号处理软件开发框架
流图(Flowgraph)积木用虚线连接而成的完整信号处理链路
流图编程拖拽积木、自动连线、点击运行——信号在虚线中流动
模块化设计每块积木是一个独立的功能单元,可单独取用、可自由排列
积木功能分类(红/橙/蓝/绿/紫)信号源→滤波器→调制/解调→处理/变换→输出/显示
DDC的GNU Radio实现混频器 + 滤波器 + 抽取器——三块积木搭成数字下变频
DUC的GNU Radio实现内插器 + 滤波器 + 混频器——反向排列就是数字上变频
接口标准化(数据类型)虚线接口是所有积木共同的语言——任何两块积木只要数据类型匹配就能连接
OOT(Out-of-Tree)模块空白积木——用户可以自己编写新的信号处理模块,扩展GNU Radio的功能
GNU Radio创始人Eric Blossom,2001年创建项目
开源社区全球工程师都在给城堡添加积木——2001年至今数千块

下一章预告

第一个作品——爱丽丝将用她在积木城堡里学会的GNU Radio积木拼法,连上一块真实的SDR硬件,收听到真实的FM广播。从积木到真实的空气信号,从拼图到收听。

本文为原创内容,转载请注明作者、来源公众号及官方网址(https://www.dyaotech.com),未经授权禁止篡改、商用,违者必究!