软件定义无线电实战入门 第4篇:信号处理核心技术

摘要

本文将深入探讨信号处理的三大核心技术:频率分析、增益控制和滤波器设计。你将理解时域与频域的关系,掌握FFT的原理与应用,学习分贝的概念与计算,并能够设计各种类型的滤波器。这些知识是构建高性能SDR系统的基础。

学习目标

阅读完本文后,你将能够:

  • 进行频域分析:理解FFT原理,使用频谱分析仪观察信号
  • 控制信号增益:掌握分贝概念,正确设置放大器和衰减器
  • 设计滤波器:设计低通、高通、带通和带阻滤波器
  • 分析信号特性:在时域和频域全面理解信号行为
  • 优化信号质量:通过增益和滤波改善信噪比

一、频率与频域分析

时域是我们观察信号最直观的方式,但频域能提供更深刻的洞察。

1.1 时域与频域的关系

信号可以从两个角度观察:时域显示信号随时间的变化,频域显示信号包含的频率成分。

flowchart TD
    subgraph Signal_View[信号的两种视角]
        direction TB
        TimeDomain["时域<br/>幅度 vs 时间<br/>波形图"]
        FreqDomain["频域<br/>幅度 vs 频率<br/>频谱图"]
    end

    subgraph Relationship[两者关系]
        Transform["傅里叶变换<br/>时域 → 频域"]
        Inverse["逆傅里叶变换<br/>频域 → 时域"]
        Equivalent["等价表示<br/>同一信号的两种视角"]
    end

    subgraph Analogy["类比:音乐"]
        TimeMus["时域: 乐谱<br/>音符随时间排列"]
        FreqMus["频域: 和声分析<br/>包含哪些音符/和弦"]

        TimeMus -.->|对应| TimeDomain
        FreqMus -.->|对应| FreqDomain
    end

    Signal_View -.->|通过| Relationship
    Relationship -.->|理解| Analogy

    style TimeDomain fill:#ffcdd2
    style FreqDomain fill:#c8e6c9

图表讲解:时域和频域是同一信号的两种不同表示,就像描述一个人可以从外貌或性格两个角度。时域显示信号的波形——幅度如何随时间变化,这是我们在示波器上看到的。频域显示信号由哪些频率成分组成——每个频率有多强,这是我们在频谱分析仪上看到的。傅里叶变换是实现这种视角转换的数学工具。理解这两种视角的等价性对于SDR工作至关重要——有些操作在时域容易理解(如放大),有些在频域容易理解(如滤波)。

1.2 FFT(快速傅里叶变换)

FFT是计算离散傅里叶变换的高效算法,是频域分析的核心工具。

flowchart TD
    subgraph FFT_Process[FFT处理流程]
        direction TB
        InputSignal["输入信号<br/>时域样本序列"]
        Window["加窗函数<br/>减少频谱泄漏"]
        FFT_Calc["FFT计算<br/>O(N log N)复杂度"]
        OutputMag["幅度输出<br/>各频率的强度"]
        OutputPhase["相位输出<br/>各频率的相位"]
    end

    subgraph Window_Function[常用窗函数]
        Rect["矩形窗<br/>无窗<br/>分辨率最高<br/>泄漏最大"]
        Hann["汉宁窗<br/>平衡选择<br/>分辨率和泄漏"]
        Blackman["布莱克曼窗<br/>低泄漏<br/>分辨率较低"]
        FlatTop["平顶窗<br/>幅度准确<br/>宽主瓣"]

        Rect -.->|权衡| Hann
        Hann -.->|或| Blackman
        Blackman -.->|或| FlatTop
    end

    FFT_Process -.->|使用| Window_Function

    style FFT_Calc fill:#bbdefb
    style OutputMag fill:#c8e6c9

图表讲解:FFT将时域信号转换为频域表示,但实际实现需要注意几个细节。加窗函数是必需的——因为FFT处理的是有限长度数据,直接截断会在频域产生”泄漏”(不需要的频率成分能量扩散到相邻频率)。窗函数通过平滑数据边缘来减少泄漏,但会牺牲频率分辨率。矩形窗(不加窗)分辨率最高但泄漏最严重,汉宁窗是常用的平衡选择,布莱克曼窗泄漏最小但分辨率较低。选择窗函数需要根据具体应用权衡。

1.3 使用FFT观察信号

在GNU Radio中,QT GUI Frequency Sink是实现FFT可视化的标准工具。

flowchart TD
    subgraph FFT_Sink[QT GUI Frequency Sink]
        direction TB
        Input["输入端口<br/>Complex或Float"]
        FFTSize["FFT大小<br/>1024/2048/4096等"]
        SampleRate["采样率<br/>决定频率范围"]
        RefLevel["参考电平<br/>显示范围"]
        Avg["平均功能<br/>平滑显示"]
    end

    subgraph Display[显示特性]
        XAxis["X轴: 频率<br/>中心频率 ± 采样率/2"]
        YAxis["Y轴: 幅度<br/>单位: dB"]
        CenterFreq["中心频率<br/>可调整显示范围"]
        Span["跨度<br/>显示的频率范围"]
    end

    subgraph Practical[实用设置]
        P1["FFT Size: 1024<br/>良好平衡"]
        P2["采样率: 匹配信号<br/>正确显示频率"]
        P3["平均: 启用<br/>改善显示稳定性"]

        P1 -.->|推荐| Display
        P2 -.->|设置| Display
        P3 -.->|优化| Display
    end

    FFT_Sink -.->|配置| Display
    Display -.->|使用| Practical

    style Input fill:#bbdefb
    style XAxis fill:#c8e6c9
    style YAxis fill:#c8e6c9

图表讲解:QT GUI Frequency Sink是GRC中最常用的频谱分析工具。FFT大小决定频率分辨率——更大的FFT提供更细的频率网格,但计算量更大。1024是常用的折中值。采样率参数决定X轴的频率范围,从中心频率减去采样率/2到中心频率加上采样率/2。参考电平设置Y轴的显示范围,通常设置为-100到0 dB(对于接收到的无线信号)。平均功能对多个FFT结果取平均,可以平滑显示,更容易看到稳定的信号特征。

1.4 可听频率与音频频谱

让我们从最熟悉的音频信号开始,理解频域分析。

flowchart TD
    subgraph Audio_Range[人类听觉范围]
        Low["低音: 20Hz - 250Hz<br/>贝斯、大鼓"]
        MidLow["中低音: 250Hz - 500Hz<br/>人声基础"]
        Mid["中音: 500Hz - 2kHz<br/>人声主要"]
        MidHigh["中高音: 2kHz - 4kHz<br/>人声清晰度"]
        High["高音: 4kHz - 20kHz<br/>细节、空间感"]
    end

    subgraph Speech_Focus[语音能量分布]
        Fund["基频: 85Hz - 255Hz<br/>男女声差异"]
        Formants["共振峰: 300Hz - 3kHz<br/>元音识别"]
        Consonants["辅音: 4kHz - 8kHz<br/>清晰度关键"]
    end

    subgraph Music_Focus[音乐频率范围]
        Bass["贝斯/大提琴:<br/>40Hz - 200Hz"]
        Piano["钢琴全音域:<br/>28Hz - 4.2kHz"]
        Cymbals["镲片泛音:<br/>5kHz - 20kHz"]
    end

    Audio_Range -.->|包含| Speech_Focus
    Audio_Range -.->|包含| Music_Focus

    style Low fill:#e3f2fd
    style Mid fill:#fff9c4
    style High fill:#ffe0b2

图表讲解:了解音频频谱有助于理解我们要处理的信号特性。人类听觉范围是20Hz到20kHz,但不同频率有不同的心理声学特性。语音能量集中在300Hz到3kHz范围,这也是为什么电话系统只需要3kHz带宽就能传输可理解的语音。音乐的频率范围更宽,从低音提琴的40Hz到镲片的20kHz泛音。在SDR应用中,我们处理的语音信号通常限制在5kHz以下(AM广播标准),这对于语音通信已经足够,但不适合高保真音乐。


二、增益与分贝

增益控制是信号处理中最基本的操作之一,理解分贝对于正确设置增益至关重要。

2.1 什么是增益

增益是信号幅度的放大或衰减。

flowchart TD
    subgraph Gain_Concept[增益概念]
        direction TB
        InputSig["输入信号<br/>幅度: A_in"]
        GainBlock["增益模块<br/>倍数: G"]
        OutputSig["输出信号<br/>幅度: A_out = G × A_in"]
    end

    subgraph Gain_Types[增益类型]
        Amplification["放大<br/>G > 1<br/>增强信号"]
        Attenuation["衰减<br/>0 < G < 1<br/>减弱信号"]
        Unity["单位增益<br/>G = 1<br/>幅度不变"]
        Inversion["反相<br/>G < 0<br/>幅度+相位翻转"]
    end

    subgraph Example_Gain[增益示例]
        E1["G = 10: 信号放大10倍<br/>20dB增益"]
        E2["G = 0.1: 信号衰减到1/10<br/>-20dB增益"]
        E3["G = 1: 幅度不变<br/>0dB增益"]
        E4["G = -1: 幅度不变, 反相<br/>0dB增益, 180°相移"]

        E1 -.->|实例| Amplification
        E2 -.->|实例| Attenuation
        E3 -.->|实例| Unity
        E4 -.->|实例| Inversion
    end

    Gain_Concept -.->|类型| Gain_Types
    Gain_Types -.->|例子| Example_Gain

    style Amplification fill:#c8e6c9
    style Attenuation fill:#ffcdd2
    style Unity fill:#fff9c4

图表讲解:增益是输出与输入的比率。增益大于1表示放大,增益小于1表示衰减,增益等于1表示单位增益(不放大也不衰减),负增益表示幅度变化加上180度相位翻转。需要注意的是,“增益”这个词通常指放大,但技术上它可以是任何倍数。在SDR系统中,我们经常需要同时使用放大和衰减来优化信号电平——前端放大弱信号,后端衰减强信号以避免过载。

2.2 分贝的定义

分贝(dB)是对数单位,用于表示功率或幅度的比率。

flowchart TD
    subgraph dB_Definition[分贝定义]
        direction TB
        Power["功率比<br/>dB = 10 × log10(P2/P1)"]
        Amplitude["幅度比<br/>dB = 20 × log10(A2/A1)"]
        Reference["参考值<br/>dB需要明确参考"]
    end

    subgraph dB_Values[常用dB值]
        V0["0dB: 比率=1<br/>无变化"]
        VPos["+6dB: 幅度×2<br/>功率×4"]
        VNeg["-6dB: 幅度/2<br/>功率/4"]
        V10["+20dB: 幅度×10<br/>功率×100"]
        VNeg20["-20dB: 幅度/10<br/>功率/100"]

        V0 --> VPos --> V10
        V0 --> VNeg --> VNeg20
    end

    subgraph Memory[记忆口诀]
        M1["+6dB ≈ 双倍幅度"]
        M2["-6dB ≈ 一半幅度"]
        M3["+10dB ≈ 三倍功率"]
        M4["每±6dB ≈ ±2倍幅度"]

        M1 -.->|快速估算| VPos
        M2 -.->|快速估算| VNeg
    end

    dB_Definition -.->|常用| dB_Values
    dB_Values -.->|记住| Memory

    style Power fill:#bbdefb
    style Amplitude fill:#fff9c4
    style VPos fill:#c8e6c9
    style VNeg fill:#ffcdd2

图表讲解:分贝使用对数尺度,这对于表示大范围的比率非常方便。功率的dB定义是10×log10(比率),幅度的dB定义是20×log10(比率)——因为功率与幅度的平方成正比,所以幅度差6dB相当于功率差3dB(即功率翻倍)。记住几个常用值很有帮助:6dB大约对应幅度翻倍(实际上是2.0倍),-6dB对应幅度减半;20dB对应幅度10倍,-20dB对应幅度除以10。这些近似值对于快速估算信号强度变化非常有用。

2.3 分贝参考值

dB是相对单位,需要明确参考值才有绝对意义。

flowchart TD
    subgraph dB_Scales[常见dB尺度]
        dBm["dBm<br/>参考: 1mW<br/>功率单位<br/>射频常用"]
        dBFS["dBFS<br/>参考: 满量程<br/>数字音频<br/>最大为0"]
        dBuV["dBμV<br/>参考: 1μV<br/>电压单位<br/>天线信号"]
        dBW["dBW<br/>参考: 1W<br/>功率单位<br/>高功率应用"]
    end

    subgraph Conversions[转换示例]
        C1["0dBm = 1mW<br/>+10dBm = 10mW<br/>+30dBm = 1W"]
        C2["0dBuV = 1μV<br/>+60dBuV = 1mV<br/>+120dBuV = 1V"]
        C3["dBFS: ≤0<br/>-6dBFS = 50%幅度<br/>-20dBFS = 10%幅度"]

        C1 -.->|应用| dBm
        C2 -.->|应用| dBuV
        C3 -.->|应用| dBFS
    end

    subgraph SDR_Context[SDR中的典型值]
        S1["天线信号: -100 to -50dBm<br/>很弱到中等"]
        S2["接收机灵敏度: -120dBm<br/>可检测的最弱信号"]
        S3["发射功率: +10 to +50dBm<br/>10mW到100W"]
        S4["ADC满量程: 0dBFS<br/>数字最大值"]

        S1 -.->|范围| dBm
        S2 -.->|指标| dBm
        S3 -.->|范围| dBm
        S4 -.->|范围| dBFS
    end

    dB_Scales -.->|定义| Conversions
    Conversions -.->|实际| SDR_Context

    style dBm fill:#c8e6c9
    style dBFS fill:#fff9c4
    style dBuV fill:#e1bee7

图表讲解:理解不同的dB尺度对于SDR工作很重要。dBm是以1mW为参考的功率单位,广泛用于射频系统。dBm可以是正值(大于1mW)或负值(小于1mW)。典型的接收信号强度在-100dBm到-50dBm范围,非常微弱。dBFS是数字系统的单位,以满量程为参考,最大值是0dBFS(不能超过),实际使用通常留有余量(如-3dBFS或-6dBFS)。dBμV是以1μV为参考的电压单位,常用于表示天线接收到的信号电压。这些尺度之间可以相互转换,但需要注意阻抗(通常50Ω或75Ω)。

2.4 GNU Radio中的增益控制

在GRC中实现增益控制需要使用适当的模块。

flowchart TD
    subgraph Gain_Modules[增益模块]
        direction TB
        MultiplyConst["Multiply Const<br/>固定增益<br/>常数倍数"]
        AddConst["Add Const<br/>直流偏置<br/>加固定值"]
        AGC["AGC (自动增益控制)<br/>自动调节<br/>保持稳定电平"]
    end

    subgraph Usage[使用场景]
        U1["固定放大<br/>Multiply Const<br/>已知增益需求"]
        U2["去除直流<br/>Add Const (负值)<br/>去除DC偏置"]
        U3["可变增益<br/>Multiply Const + 变量<br/>GUI控制"]
        U4["自动调节<br/>AGC<br/>适应信号变化"]

        U1 -.->|选择| MultiplyConst
        U2 -.->|选择| AddConst
        U3 -.->|组合| MultiplyConst
        U4 -.->|自动| AGC
    end

    subgraph Example_Gain[增益设置示例]
        E1["放大10倍:<br/>Multiply Const: 10<br/>或 +20dB"]
        E2["衰减到一半:<br/>Multiply Const: 0.5<br/>或 -6dB"]
        E3["去除DC偏置:<br/>Add Const: -offset<br/>offset是DC值"]

        E1 -.->|实例| MultiplyConst
        E2 -.->|实例| MultiplyConst
        E3 -.->|实例| AddConst
    end

    Gain_Modules -.->|应用于| Usage
    Usage -.->|配置| Example_Gain

    style MultiplyConst fill:#bbdefb
    style AGC fill:#c8e6c9

图表讲解:Multiply Const是最常用的增益模块,它将输入信号乘以一个常数。常数大于1实现放大,小于1实现衰减。这个模块通常与Variable结合使用,实现可调增益——将Variable绑定到QT GUI Range滑动条,用户就可以实时调整增益。Add Const用于添加直流偏置,常用于去除信号的DC成分(减去平均值)。AGC(自动增益控制)是一个高级模块,它自动调整增益以保持输出信号电平稳定,这对于信号强度变化的环境(如移动通信)很有用,但可能引入不必要的增益调制。


三、滤波器设计基础

滤波器是信号处理中最强大的工具之一,它能够选择性地通过或阻止特定频率。

3.1 滤波器的分类

根据频率响应特性,滤波器可以分为四大类。

flowchart TD
    subgraph Filter_Types[滤波器类型]
        LPF["低通滤波器<br/>Low Pass Filter<br/>通过低频,阻止高频"]
        HPF["高通滤波器<br/>High Pass Filter<br/>通过高频,阻止低频"]
        BPF["带通滤波器<br/>Band Pass Filter<br/>通过频带,阻止其余"]
        BSF["带阻滤波器<br/>Band Stop Filter<br/>阻止频带,通过其余"]
    end

    subgraph Filter_Specs[滤波器规格]
        Passband["通带<br/>希望通过的频率<br/>低衰减"]
        Stopband["阻带<br/>希望阻止的频率<br/>高衰减"]
        Transition["过渡带<br/>通带到阻带<br/>逐渐衰减"]
        Cutoff["截止频率<br/>通带边界<br/>-3dB点"]
    end

    subgraph Applications[典型应用]
        A1["LPF: 抗混叠<br/>音频低通<br/>去除噪声"]
        A2["HPF: 去除直流<br/>隔直电容等效<br/>高通音频"]
        A3["BPF: 电台选择<br/>信道滤波<br/>频带隔离"]
        A4["BSF: 去除干扰<br/>陷波滤波<br/>特定频率抑制"]

        A1 -.->|用于| LPF
        A2 -.->|用于| HPF
        A3 -.->|用于| BPF
        A4 -.->|用于| BSF
    end

    Filter_Types -.->|由| Filter_Specs
    Filter_Specs -.->|应用于| Applications

    style LPF fill:#e3f2fd
    style HPF fill:#fff9c4
    style BPF fill:#c8e6c9
    style BSF fill:#ffe0b2

图表讲解:四种滤波器类型覆盖了所有频率选择需求。低通滤波器通过低频、阻止高频,是最常用的类型——用于抗混叠、音频带宽限制、噪声去除等。高通滤波器相反,通过高频、阻止低频,用于去除直流偏置、隔直、低频噪声抑制等。带通滤波器只通过一个频带,用于选择特定的电台或信道。带阻滤波器(也叫陷波滤波器)阻止一个特定频带,用于去除干扰信号(如50Hz电源线干扰)。理解这些滤波器的特性和应用场景是SDR系统设计的基础。

3.2 滤波器参数详解

设计滤波器需要理解几个关键参数。

flowchart TD
    subgraph Filter_Params[滤波器关键参数]
        Cutoff_Freq["截止频率<br/>Cutoff Frequency<br/>通带边界"]
        Trans_Width["过渡带宽度<br/>Transition Width<br/>滚降陡度"]
        Sample_Rate["采样率<br/>Sample Rate<br/>归一化基准"]
        Ripple_In["通带波纹<br/>Passband Ripple<br/>通带内波动"]
        Atten["阻带衰减<br/>Stopband Attenuation<br/>阻带抑制"]
    end

    subgraph Example_Params[参数示例]
        Ex1["低通滤波器:<br/>截止: 5kHz<br/>过渡: 2kHz<br/>阻带从7kHz开始"]
        Ex2["带通滤波器:<br/>中心: 10MHz<br/>带宽: 20kHz<br/>过渡: 5kHz"]

        Ex1 -.->|LPF| Filter_Params
        Ex2 -.->|BPF| Filter_Params
    end

    subgraph Tradeoff[参数权衡]
        T1["陡峭滚降:<br/>窄过渡带<br/>需要更高阶数"]
        T2["低波纹:<br/>更平滑<br/>需要更高阶数"]
        T3["高衰减:<br/>更好抑制<br/>需要更高阶数"]
        T4["计算复杂度:<br/>高阶数<br/>更多CPU时间"]

        T1 -.->|影响| T4
        T2 -.->|影响| T4
        T3 -.->|影响| T4
    end

    Filter_Params -.->|设置| Example_Params
    Example_Params -.->|权衡| Tradeoff

    style Cutoff_Freq fill:#bbdefb
    style Trans_Width fill:#fff9c4
    style Tradeoff fill:#ffcdd2

图表讲解:截止频率定义了通带的边界——在这个频率,信号功率下降到一半(-3dB)。过渡带宽度决定从通带到阻带的转换有多快——窄过渡带意味着陡峭的滚降,能更好地区分邻近频率,但需要更复杂的滤波器。采样率是归一化频率的参考——所有频率都是相对于采样率定义的。通带波纹是通带内的幅度变化,理想滤波器没有波纹,实际滤波器会有小幅波动。阻带衰减是阻带内的信号抑制量,通常希望至少40-60dB。这些参数相互关联,需要在性能和复杂度之间权衡。

3.3 滤波器类型

除了频率响应分类,滤波器还可以按实现方式分类。

flowchart TD
    subgraph FIR_IIR[FIR vs IIR]
        FIR["FIR滤波器<br/>有限脉冲响应<br/>稳定、线性相位"]
        IIR["IIR滤波器<br/>无限脉冲响应<br/>高效、可能有稳定性问题"]
    end

    subgraph FIR_Adv["FIR优势"]
        FA1["稳定性: 总是稳定<br/>无极点在单位圆上"]
        FA2["线性相位: 常数群时延<br/>波形保持"]
        FA3["精确控制: 易于设计<br/>任意响应"]
    end

    subgraph IIR_Adv["IIR优势"]
        IA1["效率: 需要更少系数<br/>同样规格"]
        IA2["紧凑: 更低延迟<br/>内存占用小"]
        IA3["模拟等效: 对应经典<br/>模拟滤波器"]
    end

    subgraph Recommendation["SDR推荐"]
        Rec["FIR滤波器<br/>稳定性最重要<br/>相位失真最小"]

        Rec -.->|选择| FIR
        Rec -.->|避免| IIR
    end

    FIR_IIR -.->|比较| FIR_Adv
    FIR_IIR -.->|比较| IIR_Adv
    FIR_Adv -.->|SDR中| Recommendation
    IIR_Adv -.->|SDR中| Recommendation

    style FIR fill:#c8e6c9
    style IIR fill:#fff9c4
    style Recommendation fill:#e1f5fe

图表讲解:FIR(有限脉冲响应)和IIR(无限脉冲响应)是两大类滤波器实现方式。FIR滤波器的脉冲响应在有限时间内结束,总是稳定的,可以精确控制频率响应,并且具有线性相位(常数群时延),这意味着信号的所有频率成分延迟相同,波形不会失真。IIR滤波器的脉冲响应理论上无限持续,可能不稳定,但实现相同规格需要的系数更少,计算效率更高。对于SDR应用,FIR滤波器几乎总是更好的选择——稳定性至关重要,线性相位保留波形信息,虽然计算量大,但现代CPU足够处理。

3.4 设计低通滤波器

低通滤波器是最常用的滤波器类型。

flowchart TD
    subgraph LPF_Design[低通滤波器设计]
        direction TB
        Step1["确定截止频率<br/>基于信号带宽"]
        Step2["选择过渡带宽度<br/>权衡陡度和复杂度"]
        Step3["设置采样率<br/>匹配系统采样率"]
        Step4["选择滤波器类型<br/>FIR推荐"]
        Step5["生成滤波器<br/>GNU Radio自动设计"]
    end

    subgraph LPF_Example[设计示例: AM音频提取]
        Spec1["目标: 提取AM音频<br/>带宽: 5kHz"]
        Spec2["截止频率: 5kHz<br/>保留所有音频"]
        Spec3["过渡宽度: 2kHz<br/>从5k到7kHz"]
        Spec4["采样率: 1MHz<br/>前端采样率"]
        Spec5["结果: 阶数约100<br/>合理复杂度"]

        Spec1 --> Spec2 --> Spec3
        Spec3 --> Spec4 --> Spec5
    end

    subgraph Verification["验证设计"]
        V1["查看频率响应<br/>QT GUI Freq Sink"]
        V2["检查群时延<br/>应该平坦"]
        V3["测试实际效果<br/>通过信号测试"]

        V1 --> V2 --> V3
    end

    LPF_Design -.->|应用于| LPF_Example
    LPF_Example -.->|需要| Verification

    style Step5 fill:#c8e6c9
    style Spec5 fill:#c8e6c9

图表讲解:设计低通滤波器需要明确几个参数。截止频率由你想通过的信号决定——对于AM音频,截止频率应该是5kHz左右。过渡带宽度权衡性能和复杂度——窄过渡带(1kHz)需要高阶滤波器,宽过渡带(3-5kHz)可以用低阶滤波器。采样率必须正确设置,因为GNU Radio需要它来计算归一化频率。GNU Radio的Low Pass Filter模块会自动根据你的参数设计滤波器,你可以在模块属性中看到实际使用的阶数。设计完成后,添加QT GUI Frequency Sink查看滤波器的频率响应,确认满足需求。


四、高通与带通滤波器

除了低通滤波器,高通和带通滤波器也各有用途。

4.1 高通滤波器设计

高通滤波器通过高频、阻止低频。

flowchart TD
    subgraph HPF_Design[高通滤波器设计]
        direction TB
        Param1["截止频率<br/>通过高于此频率"]
        Param2["过渡宽度<br/>滚降陡度"]
        Param3["采样率<br/>系统采样率"]
    end

    subgraph HPF_App[高通滤波器应用]
        A1["去除DC偏置<br/>去除0Hz处的直流分量"]
        A2["隔直应用<br/>模拟耦合电容"]
        A3["低频噪声抑制<br/>去除1/f噪声"]
        A4["高频提取<br/>提取边带"]

        A1 -.->|最常用| Param1
        A2 -.->|经典| Param1
        A3 -.->|噪声| Param1
        A4 -.->|调制| Param1
    end

    subgraph HPF_Example[设计示例]
        Ex1["去除DC:<br/>截止: 100Hz<br/>过渡: 50Hz"]
        Ex2["音频高通:<br/>截止: 300Hz<br/>过渡: 100Hz"]

        Ex1 -.->|DC去除| HPF_App
        Ex2 -.->|音频| HPF_App
    end

    HPF_Design -.->|用于| HPF_App
    HPF_App -.->|配置| HPF_Example

    style A1 fill:#c8e6c9
    style HPF_Example fill:#e1f5fe

图表讲解:高通滤波器在SDR中最常用的用途是去除DC偏置。许多SDR硬件和ADC会引入DC偏置(在0Hz处有一个大的峰值),这会干扰后续处理。高通滤波器(截止频率几十到几百Hz)可以有效去除这种DC偏置,同时保留有用的信号。另一个应用是模拟”隔直电容”——在模拟电路中,电容串联可以阻止直流、通过交流;在数字域,高通滤波器实现相同功能。高通滤波器也用于去除低频噪声(如1/f噪声,功率随频率下降而增加的噪声)。

4.2 带通滤波器设计

带通滤波器只通过一个频带,阻止其他所有频率。

flowchart LR
    subgraph BPF_Spec[带通滤波器规格]
        direction TB
        Center["中心频率<br/>fc<br/>通带中心"]
        BW["带宽<br/>BW<br/>通带宽度"]
        Trans1["下过渡带<br/>从阻带到通带"]
        Trans2["上过渡带<br/>从通带到阻带"]
    end

    subgraph BPF_Params[参数关系]
        LowCutoff["下截止频率:<br/>fc - BW/2"]
        HighCutoff["上截止频率:<br/>fc + BW/2"]
        Passband["通带范围:<br/>LowCutoff 到 HighCutoff"]

        Center --> LowCutoff
        Center --> HighCutoff
        LowCutoff --> Passband
        HighCutoff --> Passband
    end

    subgraph BPF_App[带通应用]
        App1["电台选择<br/>选择特定信道"]
        App2["信道滤波<br/>数字通信"]
        App3["频带隔离<br/>分离频段"]

        App1 -.->|经典应用| Center
        App2 -.->|标准应用| BW
        App3 -.->|频分复用| Passband
    end

    BPF_Spec -.->|定义| BPF_Params
    BPF_Params -.->|应用于| BPF_App

    style Center fill:#bbdefb
    style BW fill:#fff9c4
    style Passband fill:#c8e6c9

图表讲解:带通滤波器由中心频率、带宽和过渡带参数定义。通带从中心频率减去半带宽到中心频率加上半带宽。过渡带定义通带如何过渡到阻带。带通滤波器的典型应用是电台选择——在频谱上有多个电台,带通滤波器可以选择其中一个,抑制其他所有电台。数字通信系统中,每个信道有特定带宽,带通滤波器可以提取目标信道。频分复用系统中,多个用户共享频谱,每个用户分配一个频带,带通滤波器用于分离这些用户。

4.3 带阻滤波器

带阻滤波器(也叫陷波滤波器)阻止特定频带。

flowchart TD
    subgraph BSF_Design[带阻滤波器设计]
        direction TB
        Center2["中心频率<br/>要阻止的频率"]
        BW2["带宽<br/>阻止的范围"]
        Depth["阻带衰减<br/>抑制强度"]
    end

    subgraph BSF_App[带阻应用]
        App1["干扰抑制<br/>去除干扰信号"]
        App2["电源线噪声<br/>50Hz/60Hz陷波"]
        App3["保护频带<br/>预留频率"]

        App1 -.->|常见| Center2
        App2 -.->|典型| BW2
        App3 -.->|规划| Depth
    end

    subgraph BSF_Example[设计示例]
        Ex3["去除50Hz干扰:<br/>中心: 50Hz<br/>带宽: 10Hz<br/>衰减: 60dB"]
        Ex4["去除干扰电台:<br/>中心: 干扰频率<br/>带宽: 电台带宽"]

        Ex3 -.->|电源| BSF_App
        Ex4 -.->|干扰| BSF_App
    end

    BSF_Design -.->|用于| BSF_App
    BSF_App -.->|配置| BSF_Example

    style Center2 fill:#ffcdd2
    style BSF_App fill:#e1f5fe

图表讲解:带阻滤波器的用途是去除特定频率的干扰。最经典的例子是去除50Hz或60Hz的电源线干扰——电力线会在这些频率及其谐波上产生强干扰,带阻滤波器可以有选择地去除这些频率而不影响其他频率。另一个应用是去除强干扰电台——如果一个干扰电台比你想要的信号强得多,可能淹没目标信号,带阻滤波器可以精确去除这个干扰频率。带阻滤波器也用于保护频带——某些频率被预留用于特定服务,带阻滤波器确保这些频率不被使用。


五、均衡器设计

均衡器是滤波器的高级应用,用于精细调整频率响应。

5.1 均衡器原理

均衡器由多个滤波器组成,每个控制一个频段。

flowchart TD
    subgraph EQ_Concept[均衡器概念]
        direction TB
        InputEQ["音频输入"]
        Split["分频<br/>分成多个频段"]
        Bands["频段增益控制<br/>低/中/高频"]
        Sum["求和<br/>重新组合"]
        OutputEQ["音频输出"]
    end

    subgraph EQ_Types[均衡器类型]
        Graphic["图形均衡器<br/>固定频段<br/>滑动条控制"]
        Parametric["参数均衡器<br/>可调频段<br/>精确控制"]
    end

    subgraph EQ_Application[均衡器应用]
        AppEQ1["音质调整<br/>补偿扬声器缺陷"]
        AppEQ2["环境补偿<br/>适应房间声学"]
        AppEQ3["艺术效果<br/>创造音色"]

        AppEQ1 -.->|音频| Graphic
        AppEQ2 -.->|声学| Parametric
        AppEQ3 -.->|音乐| Graphic
    end

    EQ_Concept -.->|实现| EQ_Types
    EQ_Types -.->|用于| EQ_Application

    style Bands fill:#fff9c4
    style OutputEQ fill:#c8e6c9

图表讲解:均衡器将音频分成多个频段,每个频段独立控制增益,然后重新组合。图形均衡器使用固定频段(如31段均衡器,按1/3倍频程划分),每个频段有滑动条控制增益,直观易用。参数均衡器使用可调频段,可以精确选择中心频率、带宽和增益,适合精细调整。在SDR中,均衡器可以用于补偿射频链路的频率响应不平坦——某些频段可能有衰减或放大,均衡器可以恢复平坦响应。

5.2 构建简单均衡器

在GRC中可以构建一个简单的3段均衡器。

flowchart TD
    subgraph Three_Band_EQ[3段均衡器结构]
        direction TB
        InputEQ2["输入"]
        Split1["分频器"]
        LPF2["低通滤波器<br/>0-1kHz"]
        BPF2["带通滤波器<br/>1kHz-6kHz"]
        HPF2["高通滤波器<br/>6kHz-20kHz"]
        GainLow["低频增益<br/>Multiply Const"]
        GainMid["中频增益<br/>Multiply Const"]
        GainHigh["高频增益<br/>Multiply Const"]
        Sum2["求和<br/>Add 3个输入"]
        OutputEQ2["输出"]

        InputEQ2 --> Split1
        Split1 --> LPF2
        Split1 --> BPF2
        Split1 --> HPF2
        LPF2 --> GainLow
        BPF2 --> GainMid
        HPF2 --> GainHigh
        GainLow --> Sum2
        GainMid --> Sum2
        GainHigh --> Sum2
        Sum2 --> OutputEQ2
    end

    subgraph EQ_Control[均衡器控制]
        LowCtrl["低频控制<br/>增强贝斯<br/>或削减"]
        MidCtrl["中频控制<br/>突出人声<br/>或后退"]
        HighCtrl["高频控制<br/>增加清晰度<br/>或柔和"]

        LowCtrl -.->|调整| GainLow
        MidCtrl -.->|调整| GainMid
        HighCtrl -.->|调整| GainHigh
    end

    Three_Band_EQ -.->|配置| EQ_Control

    style LPF2 fill:#e3f2fd
    style BPF2 fill:#fff9c4
    style HPF2 fill:#ffe0b2
    style Sum2 fill:#c8e6c9

图表讲解:这个3段均衡器将音频分成低、中、高三个频段。低频段(0-1kHz)包含贝斯和低音乐器,中频段(1kHz-6kHz)包含人声和大多数乐器的主要能量,高频段(6kHz-20kHz)包含细节和空间感。每个频段的增益可以独立调整——增加低频增强贝斯,增加中频突出人声,增加高频提升清晰度。这种均衡器虽然简单,但对于基本音质调整已经足够。更复杂的均衡器可以有更多频段(如5段、10段或31段),提供更精细的控制。


六、信噪比与噪声

理解噪声对于优化信号质量至关重要。

6.1 信噪比(SNR)

信噪比是信号质量的核心指标。

flowchart TD
    subgraph SNR_Def[信噪比定义]
        direction TB
        Signal_Power["信号功率<br/>有用信号能量"]
        Noise_Power["噪声功率<br/>不需要的能量"]
        Ratio["比率: SNR = Signal/Noise<br/>单位: dB"]
    end

    subgraph SNR_Scale[SNR质量尺度]
        Excellent["优秀: &gt;40dB<br/>非常清晰<br/>专业广播"]
        Good["良好: 25-40dB<br/>清晰可懂<br/>商用通信"]
        Fair["一般: 15-25dB<br/>可理解<br/>勉强可用"]
        Poor["差: &lt;15dB<br/>难以理解<br/>通信边缘"]

        Excellent --> Good --> Fair --> Poor
    end

    subgraph SNR_Example[实际例子]
        E1["FM广播: ~50dB<br/>非常高质量"]
        E2["AM广播: ~30dB<br/>可接受质量"]
        E3["手机: 10-20dB<br/>可变质量"]
        E4["卫星: -5 to 10dB<br/>需要纠错"]

        E1 -.->|高质量| Excellent
        E2 -.->|中等| Good
        E3 -.->|可变| Fair
        E4 -.->|极端| Poor
    end

    SNR_Def -.->|衡量| SNR_Scale
    SNR_Scale -.->|应用| SNR_Example

    style Signal_Power fill:#c8e6c9
    style Noise_Power fill:#ffcdd2
    style Excellent fill:#c8e6c9
    style Poor fill:#ffcdd2

图表讲解:信噪比是信号功率与噪声功率的比率,以dB表示。更高的SNR意味着更好的信号质量。对于语音通信,10-15dB的SNR就能实现可理解的通信,20-25dB是良好质量,40dB以上是优秀质量。不同的应用有不同的SNR要求——FM广播通常有50dB SNR,音质很好;AM广播通常30dB左右,可以接受;数字通信系统可以在较低SNR工作(如10dB或更低),因为前向纠错码可以恢复信息。理解SNR有助于设置接收机参数——通过滤波和增益控制最大化SNR。

6.2 噪声源与类型

了解噪声来源有助于噪声抑制。

flowchart TD
    subgraph Noise_Sources[噪声来源]
        direction TB
        Thermal["热噪声<br/>电阻/电子热运动<br/>不可避免"]
        Quantum["量子噪声<br/>光子/电子随机性<br/>物理极限"]
        Interference["干扰噪声<br/>其他发射机<br/>可以避免"]
        Quantization["量化噪声<br/>ADC/DAC<br/>有限精度"]
    end

    subgraph Noise_Color["噪声颜色"]
        White["白噪声<br/>功率谱平坦<br/>所有频率相等"]
        Pink["粉红噪声<br/>功率∝1/f<br/>低频更多"]
        Impulse["脉冲噪声<br/>瞬态干扰<br/>如开关"]
        Burst["突发噪声<br/>周期性出现<br/>如点火系统"]

        White -.->|最常见| Thermal
        Pink -.->|低频| Quantum
        Impulse -.->|人为| Interference
        Burst -.->|周期性| Interference
    end

    subgraph Reduction["噪声抑制"]
        R1["热噪声: 冷却元件<br/>降低温度"]
        R2["干扰: 屏蔽/滤波<br/>物理隔离"]
        R3["量化: 增加位数<br/>更高分辨率"]

        R1 -.->|硬件| Thermal
        R2 -.->|滤波| Noise_Sources
        R3 -.->|ADC| Quantization
    end

    Noise_Sources -.->|类型| Noise_Color
    Noise_Color -.->|减少| Reduction

    style Thermal fill:#bbdefb
    style White fill:#fff9c4
    style Reduction fill:#c8e6c9

图表讲解:噪声来源多样,需要不同处理。热噪声来自电子的热运动,是温度的函数,可以通过冷却元件减少(但成本高),在室温下这是基本噪声底。量子噪声来自物理过程的随机性(如光子到达的随机性),是物理极限,无法消除。干扰噪声来自其他发射机或电气设备,可以通过屏蔽、滤波和频谱管理减少。量化噪声来自ADC/DAC的有限精度,可以通过增加位数改善。白噪声功率谱平坦,是最常见的噪声类型;粉红噪声功率随频率增加而减少(1/f),在低频更显著;脉冲和突发噪声是人为的、非平稳的。


七、核心概念总结

概念定义关键参数/公式SDR应用
FFT快速傅里叶变换N个样本 → N个频率频谱分析、信号观察
时域幅度vs时间波形图信号时间特性
频域幅度vs频率频谱图信号频率成分
增益幅度放大/衰减G = 输出/输入信号电平控制
dB对数比率20log10(A2/A1)增益单位
dBm功率单位10log10(P/1mW)信号强度
滤波器频率选择截止频率、过渡带信号分离、噪声抑制
SNR信噪比10log10(S/N)信号质量指标
窗函数减少泄漏Hann/Hamming/BlackmanFFT预处理

常见问题解答

Q1:为什么我的频谱显示有很多”尖刺”和不稳定的波动?

:这是正常现象,取决于你的信号类型和FFT设置。

如果这些尖刺是真实的信号成分,说明你的信号包含离散的频率分量(如电台载波、数字通信的子载波等)。AM广播信号会在载波频率和边带处有明显峰值。

如果尖刺在频谱上随机跳变,可能是噪声或干扰。热噪声和量化噪声会表现为随机波动,幅度较低。强干扰会表现为稳定的尖刺,在特定频率持续存在。

如果整个频谱显示不稳定、波动剧烈,可能是FFT平均功能没有启用。单个FFT结果可能变化很大,启用平均(如平均10-50个FFT)会平滑显示,更容易看到稳定的信号特征。在QT GUI Frequency Sink中,可以设置 averaging 参数启用平均功能。

另一个可能的问题是FFT大小设置不当。太小的FFT(如256)频率分辨率低,显示粗糙;太大的FFT(如8192)计算量大,可能影响实时性。1024或2048是常用的折中值。


Q2:我应该设置多大的增益?如何判断增益是否合适?

:增益设置的目标是最大化信号质量(SNR),同时避免失真和数据丢失。

合适的增益应该让信号的幅度接近ADC的最大值(0dBFS)但不超限。在GRC中,你可以添加QT GUI Time Sink观察信号波形,如果波形削平或截断(幅度在最大值处变平),说明增益太高,需要降低。如果信号幅度很小(如只有满量程的10%),说明增益太低,应该增加以更好地利用ADC的动态范围。

一个实用的方法是:从低增益开始,逐渐增加,直到观察到轻微的削波或失真,然后稍微降低一点增益。这确保你尽可能利用了ADC的动态范围而没有失真。

对于接收机,通常有几个增益级:射频增益(天线后的第一级放大)、中频增益(混频后的放大)、基带增益(解调后的放大)。每级都应该优化——射频增益应该足够高以克服后续级的噪声,但不能太高导致前端饱和;基带增益应该设置以匹配音频设备的输入范围。

如果你有真实的SDR硬件,可以使用UHD/OsmoSDR Source的增益控制功能,这些模块通常有自动增益控制(AGC)模式,可以自动调节增益以保持最佳信号电平。


Q3:滤波器的阶数是什么意思?我应该怎么选择?

:滤波器阶数是滤波器复杂度的度量,直接影响性能和计算成本。

FIR滤波器的阶数大致等于系数数量减一。更高阶数的滤波器可以实现更陡峭的滚降(更窄的过渡带)和更平坦的通带,但需要更多计算(每个输出样本需要更多乘加操作)。

选择滤波器阶数需要权衡性能和计算复杂度。对于给定的规格(截止频率、过渡宽度、衰减要求),GNU Radio的滤波器设计模块会计算最小所需阶数。你可以在模块属性中看到这个值。如果计算出的阶数太高(如>500),可能需要放宽规格(增加过渡宽度或降低衰减要求)。

实际经验值:对于AM接收(带宽10kHz),50-100阶的滤波器通常足够。对于FM接收(带宽200kHz),可能需要100-200阶。对于窄带滤波(如数字通信的单个信道),可能需要200-500阶。

需要注意的是,阶数过高可能导致实时问题——CPU无法足够快地处理数据,导致欠载(underrun)错误。如果你的流程图出现欠载错误,检查滤波器阶数是否过高,尝试降低阶数或简化流程图。


Q4:为什么有时候需要级联多个滤波器而不是只用一个大滤波器?

:级联滤波器有几个优势,在某些场景下是更好的设计选择。

首先是计算效率。一个窄带带通滤波器(如中心频率1MHz、带宽10kHz)需要非常高的阶数。但你可以用两个较低阶的滤波器实现相同效果:一个低通滤波器(截止1.005MHz)和一个高通滤波器(截止0.995MHz),级联后等效于带通。这样总计算量可能更低。

其次是灵活性。级联滤波器可以独立调整每个滤波器的参数。如果你想微调带通的中心频率或带宽,只需要调整其中一个滤波器,而不需要重新设计整个带通滤波器。

然后是模块化和可读性。级联设计更直观——每个滤波器的作用清晰,流程图更容易理解和维护。一个大滤波器可能隐藏了设计意图。

还有一个考虑是中间信号观察。级联滤波器可以在每个滤波器后添加观察点(如QT GUI Sink),查看中间信号,这在调试时非常有用。如果使用单个大滤波器,你只能看到最终结果。

当然,级联也有缺点:更多的模块意味着更多的延迟和可能的累积误差。但对于大多数SDR应用,级联滤波器的优势超过缺点。


Q5:我的系统有明显的噪声,应该如何通过滤波和增益优化SNR?

:优化SNR需要系统性地调整滤波器和增益,这里有一个优化流程。

首先,添加QT GUI Frequency Sink观察整个频谱,识别信号和噪声的分布。确定目标信号的频率范围和主要噪声源的频率位置。

然后,设计滤波器只通过目标信号的频带。如果噪声是均匀分布的白噪声,滤波器通过滤除信号频带外的噪声直接改善SNR——信号功率不变,噪声功率降低。如果噪声集中在某些频率(如干扰电台),使用带阻滤波器专门去除这些干扰。

接着,调整增益分配。理想情况下,前端增益(天线后)应该足够高以克服后续级的噪声贡献,但不能太高导致前端饱和或产生互调失真。中频增益和基带增益应该调整以充分利用ADC的动态范围。如果你的SDR硬件支持,可以尝试使用AGC(自动增益控制)模式。

还可以尝试 averaging(平均)来改善显示的SNR。在QT GUI Frequency Sink中启用 averaging,平均多个FFT结果可以平滑随机噪声,更容易看到弱信号。注意这只改善显示,不改变实际SNR。

最后,如果可能,改善物理环境。使用更好的天线、远离干扰源、使用屏蔽电缆,这些物理措施可能比任何数字处理都更有效。


总结

本文深入探讨了信号处理的三大核心技术:频率分析、增益控制和滤波器设计。我们学习了:

  1. 频域分析:FFT原理、窗函数选择、频谱观察
  2. 增益控制:分贝概念、dB尺度、增益模块使用
  3. 滤波器设计:低通、高通、带通、带阻滤波器
  4. 均衡器:多频段增益控制、音质调整
  5. 噪声与SNR:噪声类型、信噪比概念、质量评估

掌握这些技术后,你拥有了优化SDR系统性能的能力。通过正确使用FFT观察信号、合理设置增益控制电平、精心设计滤波器选择频带,你可以构建高性能的接收机系统,实现清晰的信号接收和解调。

下篇预告

下一篇将深入探讨接收机的工作原理,详细分析AM接收机的每个处理阶段。你将学习调谐技术的深入原理、频率搬移的实现方法、解调器的内部机制,以及如何从AM接收机升级到FM接收机。