第1章:傅里叶变换基础
各位同学好,我是老张。在雷达信号处理这行摸爬滚打了十几年,今天咱们来聊聊最基础也最核心的东西——傅里叶变换。
说实话,我刚入行那会儿,觉得傅里叶变换就是个数学公式,背下来就行了。直到有一次做目标检测项目,信号里混了个奇怪的干扰,怎么滤都滤不干净。后来才发现,是我对离散傅里叶变换的理解不够深,采样点没选对。嗯,从那以后,我再也不敢小看这个基础了。
1.1 连续傅里叶变换
先说说连续傅里叶变换。说白了,它就是把一个时域信号,拆解成不同频率的正弦波叠加。
公式长这样:
X(f) = ∫ x(t) · e^(-j2πft) dt
积分范围从负无穷到正无穷。你想想看,一个信号在时域里可能乱糟糟的,但到了频域里,每个频率分量都清清楚楚。
我个人的理解:这就像用三棱镜分解白光。时域信号是白光,频域就是七色彩虹。每个频率分量,就是一道颜色的光。
核心要点:连续傅里叶变换处理的是模拟信号,时间连续、频率也连续。但在实际雷达系统中,我们拿到的都是采样后的数字信号。这就引出了离散傅里叶变换。
1.2 离散傅里叶变换
离散傅里叶变换,简称DFT。它处理的是采样后的离散信号。
公式如下:
X[k] = Σ x[n] · e^(-j2πkn/N)
求和从n=0到N-1。N是采样点数,k是频率索引。
我在项目中遇到过一个问题:采样率选低了,结果高频信号混叠到了低频段,目标位置全算错了。这就是奈奎斯特定理没吃透的后果。
避坑指南:我曾经因为采样率没留够余量,导致一个毫米波雷达项目返工了两周。记住,采样率至少要是信号最高频率的2倍,实际工程中我建议留3-5倍余量。
DFT的计算量有多大?直接算的话,复杂度是O(N²)。N=1024时,要算一百多万次乘法。这在实时雷达系统里根本跑不动。
1.3 FFT的数学原理
FFT,全称快速傅里叶变换。它不是一种新的变换,而是DFT的快速算法。
核心思想就四个字:分而治之。
怎么分?把N点DFT拆成两个N/2点DFT。再拆,一直拆到2点DFT。这就是著名的库利-图基算法。
举个例子,N=8时:
原始8点DFT
├── 偶数点4点DFT
│ ├── 偶数点2点DFT
│ └── 奇数点2点DFT
└── 奇数点4点DFT
├── 偶数点2点DFT
└── 奇数点2点DFT
计算量从O(N²)降到了O(N log₂N)。N=1024时,从一百万次降到约一万次。快了100倍。
小技巧:我建议你记住几个常用点数:256、512、1024、2048。这些是2的幂次,FFT效率最高。如果采样点数不是2的幂,可以补零凑齐。
1.4 三种变换的对比
| 变换类型 | 输入信号 | 输出频率 | 计算复杂度 | 典型应用 |
|---|---|---|---|---|
| 连续傅里叶变换 | 连续模拟信号 | 连续 | 理论分析 | 公式推导、理论验证 |
| 离散傅里叶变换 | 离散数字信号 | 离散 | O(N²) | 小点数频谱分析 |
| 快速傅里叶变换 | 离散数字信号 | 离散 | O(N log₂N) | 雷达信号处理、实时系统 |
你看这个表就明白了。实际雷达系统里,99%的情况都用FFT。DFT只在教学或小数据量时用用。
1.5 一个简单的Python示例
光说不练假把式。我写个简单的FFT示例,你跑跑看:
import numpy as np
import matplotlib.pyplot as plt
# 生成一个雷达回波模拟信号
fs = 1000 # 采样率 1000Hz
t = np.arange(0, 1, 1/fs)
f1, f2 = 50, 120 # 两个目标频率
signal = np.sin(2*np.pi*f1*t) + 0.5*np.sin(2*np.pi*f2*t)
# 做FFT
N = len(signal)
fft_result = np.fft.fft(signal)
freq = np.fft.fftfreq(N, 1/fs)
# 只取正频率部分
half_N = N // 2
magnitude = np.abs(fft_result[:half_N]) * 2 / N
# 画图
plt.figure(figsize=(10, 4))
plt.plot(freq[:half_N], magnitude)
plt.xlabel('频率 (Hz)')
plt.ylabel('幅度')
plt.title('雷达回波信号频谱')
plt.grid(True)
plt.show()
这段代码生成两个频率的信号,然后做FFT看频谱。你在图上应该能看到50Hz和120Hz两个尖峰。这就是雷达目标检测的基本原理——通过FFT把回波信号转换到频域,找到目标的多普勒频率。
重要提醒:实际雷达信号比这个复杂得多,但核心思想是一样的。FFT就是雷达信号处理的"瑞士军刀",什么场景都能用上。
1.6 本章小结
这一章我们聊了三个东西:
- 连续傅里叶变换:理论基石,处理模拟信号
- 离散傅里叶变换:数字信号处理的基础,但计算量大
- 快速傅里叶变换:DFT的加速算法,雷达系统的标配
我个人觉得,理解FFT的关键不在于背公式,而在于理解它"分而治之"的思想。你想想看,把一个复杂问题拆成小问题,再拆,直到简单到一眼能看出来。这种思路,不光在FFT里用,在整个雷达信号处理里都适用。
下一章,咱们聊聊FFT的具体实现细节,包括位反转、蝶形运算这些实战内容。到时候我会拿我踩过的坑当反面教材,保证让你印象深刻。
公众号:蓝海资料掘金营,微信deep3321