第1章:Python科学计算环境搭建:NumPy、SciPy、Matplotlib安装与配置

各位同学,咱们正式开始。做雷达信号处理,说白了就是跟一堆数字打交道。你拿到的原始回波数据,就是一堆复数点。没有趁手的工具,你连看一眼波形都费劲。所以第一件事,就是把Python的科学计算环境搭好。

我个人习惯用Anaconda来管理环境。为什么?省心。你想想看,NumPy、SciPy、Matplotlib这些库,依赖关系错综复杂。自己手动装,装到一半报个错,查半天可能是个版本冲突。我当年刚入行时,就吃过这个亏——装SciPy装了一下午,最后发现是BLAS库没链接对。嗯,从那以后我就老老实实用Anaconda了。

1.1 环境管理器选择:Anaconda vs Miniconda

先说结论:新手用Anaconda,老手用Miniconda。

Anaconda自带了一百多个常用包,装完就能用。Miniconda只带一个Python解释器和conda命令,你需要什么再装什么。我在项目里一般用Miniconda,因为生产环境要轻量。但教学嘛,我建议你用Anaconda,省得一开始就被各种依赖搞心态。

下载地址我就不贴了,直接去官网找对应操作系统的安装包。安装时注意一点:把「Add Anaconda to my PATH environment variable」勾上。我曾经见过有人没勾,然后在命令行里死活找不到python命令,折腾了半天。

1.2 创建独立的虚拟环境

为什么要用虚拟环境?说白了,就是隔离。你手头可能有多个项目,一个项目用NumPy 1.19,另一个用NumPy 1.24。混在一起,迟早出问题。我在做雷达信号处理时,经常需要对比不同版本的FFT实现,虚拟环境帮我省了不少事。

打开终端(Windows用户用Anaconda Prompt),执行:

conda create -n radar_signal python=3.9
conda activate radar_signal

这里我用了Python 3.9。为什么不是最新的3.12?因为有些科学计算库对最新Python的支持会慢半拍。3.9是个稳定版本,我实测过,NumPy、SciPy、Matplotlib都能完美运行。

小技巧: 环境名取短一点,比如radar_signal。我见过有人取名叫「radar_signal_processing_v2_final」,每次激活环境都要打半天字。

1.3 安装核心库

激活环境后,开始安装三大件。直接上命令:

conda install numpy scipy matplotlib

这条命令会帮你解决所有依赖。NumPy负责多维数组和基础数学运算,SciPy在NumPy基础上加了信号处理、优化、插值等高级功能,Matplotlib就是画图的。

在雷达信号处理中,这三个库的分工很明确:

  • NumPy:存数据、做FFT、做矩阵运算。你的回波数据就是一个二维NumPy数组,行是距离门,列是脉冲数。
  • SciPy:做滤波器设计、窗函数、插值。比如你要设计一个匹配滤波器,scipy.signal.firwin就很好用。
  • Matplotlib:画频谱图、距离-多普勒图、时频图。没有它,你只能看一堆数字发呆。

安装完成后,验证一下:

python -c "import numpy; print(numpy.__version__)"
python -c "import scipy; print(scipy.__version__)"
python -c "import matplotlib; print(matplotlib.__version__)"

如果没报错,说明装好了。我曾经遇到一个情况,SciPy装上了但import时报错,原因是系统里同时有多个Python版本,环境变量乱了。解决办法:用where python(Windows)或which python(Linux/Mac)看看当前用的是哪个解释器。

1.4 安装Jupyter Notebook(可选但强烈推荐)

做雷达信号处理,我强烈建议你用Jupyter Notebook。为什么?因为你可以一边写代码,一边看结果,还能随时加注释。调试FFT算法时,你肯定不想每次改个参数就重新跑整个脚本。

conda install jupyter
jupyter notebook

启动后,浏览器里会打开一个界面。新建一个Notebook,选你刚才创建的radar_signal内核。嗯,这里要注意:如果内核列表里没有radar_signal,说明没注册。执行:

python -m ipykernel install --user --name radar_signal --display-name "Python (radar_signal)"

这样就能在Jupyter里切换内核了。

1.5 常见问题与避坑指南

问题 原因 解决办法
安装速度慢 默认源在国外 换国内镜像源,比如清华源:conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
ImportError: No module named 'numpy' 没激活环境,或者装到了base环境 检查当前环境:conda info --envs,确保radar_signal前面有星号
Matplotlib中文乱码 缺少中文字体 在代码开头加:plt.rcParams['font.sans-serif'] = ['SimHei']
注意: 不要用pip和conda混着装同一个包。我见过有人先用conda装NumPy,又用pip装了一遍,结果两个版本冲突,程序莫名其妙崩溃。选一个包管理器,从头用到尾。

1.6 快速测试:你的第一个雷达信号处理脚本

环境搭好了,咱们跑个简单的例子试试。生成一个线性调频信号(LFM),这是雷达里最常用的信号之一。

import numpy as np
import matplotlib.pyplot as plt

# 参数设置
fs = 10e6          # 采样率 10 MHz
T = 100e-6         # 脉冲宽度 100 us
B = 1e6            # 带宽 1 MHz
t = np.arange(0, T, 1/fs)

# 生成LFM信号
k = B / T          # 调频斜率
signal = np.exp(1j * 2 * np.pi * (k/2) * t**2)

# 画实部
plt.figure(figsize=(10, 4))
plt.plot(t * 1e6, np.real(signal))
plt.xlabel('时间 (us)')
plt.ylabel('幅度')
plt.title('线性调频信号(实部)')
plt.grid(True)
plt.show()

如果能看到一个频率逐渐变化的波形,恭喜你,环境搭建成功了。这个信号后面我们会反复用到——做脉冲压缩、做匹配滤波,都离不开它。

核心要点:
  • 用Anaconda管理环境,省去依赖烦恼
  • 每个项目建一个独立虚拟环境,避免版本冲突
  • NumPy存数据、SciPy做处理、Matplotlib画图,三件套缺一不可
  • Jupyter Notebook是调试雷达算法的利器,强烈推荐

好了,环境搭好了,下一章咱们就开始玩真的——用NumPy实现FFT,看看雷达信号在频域里长什么样。到时候我会带你手写一个FFT函数,再跟库函数对比,看看性能差多少。