第1章:Python环境搭建——Anaconda安装、虚拟环境配置、必备库安装

各位同学,咱们正式开始。

做航电系统雷达数据流处理,第一件事不是写代码,而是把环境搭好。我见过太多人上来就pip install,结果装了一堆乱七八糟的版本,最后项目跑不起来,排查半天发现是numpy和scipy版本不兼容。嗯,这种坑我踩过不止一次。

1.1 为什么选Anaconda?

说白了,Anaconda就是Python的「全家桶」。它自带科学计算最常用的库,还帮你管好了依赖关系。你想想看,雷达信号处理动不动就要numpy做矩阵运算、scipy做滤波、matplotlib画频谱图,一个个手动装多麻烦?

我个人习惯是:不管项目大小,一律用Anaconda。尤其是做航电系统这种对实时性有要求的场景,环境一致性太重要了。你在自己电脑上跑得好好的,部署到工控机上就报错,这种事我遇到过好几次。

核心优势:

  • 自带150+科学计算库,省去手动安装的麻烦
  • conda命令比pip更擅长处理二进制依赖(比如BLAS、LAPACK这些底层库)
  • 虚拟环境隔离,不同项目互不干扰

1.2 Anaconda安装步骤

安装其实很简单,但有几个细节要注意。我直接说重点。

  1. 下载安装包:去官网(anaconda.com)下载对应操作系统的版本。Windows选64位,Linux选Linux版,macOS选macOS版。别下错了,我见过有人下32位版本,结果numpy跑起来慢得离谱。
  2. 安装过程:Windows用户注意,安装时勾选「Add Anaconda to my PATH environment variable」。虽然安装程序会提醒你不推荐,但相信我,不勾选的话后面每次用conda都要手动激活路径,烦得很。
  3. 验证安装:打开终端(Windows用cmd或PowerShell),输入conda --version。如果看到版本号,说明装好了。

小技巧:安装完成后,建议先执行conda update conda更新一下conda本身。老版本conda的依赖解析算法比较慢,新版本快很多。

1.3 虚拟环境配置——这是重点

做航电系统项目,你可能会同时维护多个项目:一个做雷达信号仿真,一个做数据采集,还有一个做实时处理。每个项目依赖的库版本可能不一样。虚拟环境就是用来解决这个问题的。

我举个例子:项目A需要numpy 1.21,项目B需要numpy 1.26。如果没有虚拟环境,你只能二选一,或者忍受版本冲突。有了虚拟环境,每个项目都有自己的「小房间」,互不干扰。

创建虚拟环境

conda create -n radar_env python=3.9

这条命令创建了一个叫radar_env的环境,Python版本指定为3.9。为什么选3.9?因为目前numpy、scipy、matplotlib对3.9的支持最稳定。3.10以上有些库的二进制包还没完全适配,我踩过这个坑。

激活环境

conda activate radar_env

激活后,终端前面会出现(radar_env)字样,说明你现在就在这个环境里了。所有安装的库都会装到这个环境里,不会影响系统Python。

退出环境

conda deactivate

注意:每次打开新终端,都要重新激活环境。我曾经犯过一个低级错误:在base环境里装了一堆库,结果项目跑不起来,排查了半天才发现环境没激活。嗯,这种低级错误犯一次就够了。

1.4 必备库安装——numpy、scipy、matplotlib

这三个库是雷达信号处理的基石。咱们一个一个说。

1.4.1 numpy——矩阵运算的基石

雷达数据本质上就是多维数组。一个脉冲的回波数据,就是一个一维数组;多个脉冲组成一个二维矩阵(快时间×慢时间)。numpy就是用来处理这些数组的。

conda install numpy

或者指定版本:

conda install numpy=1.21.5

安装完成后,可以验证一下:

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

个人经验:numpy的版本不要追新。我一般选次新版本,比如1.21.x或1.22.x。新版本有时会改一些底层API,导致scipy或matplotlib不兼容。稳定第一。

1.4.2 scipy——信号处理的瑞士军刀

scipy建立在numpy之上,提供了大量信号处理函数。雷达数据处理中常用的有:

  • scipy.signal:滤波器设计、卷积、相关运算
  • scipy.fft:快速傅里叶变换(FFT)
  • scipy.linalg:线性代数运算(矩阵求逆、特征值分解)
conda install scipy

安装后测试:

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

1.4.3 matplotlib——数据可视化必备

做雷达信号处理,你肯定要画图:时域波形、频谱图、距离-多普勒图、方位角图……matplotlib就是干这个的。

conda install matplotlib

测试:

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

1.5 一键安装所有依赖

如果你不想一个个装,可以创建一个environment.yml文件,把依赖写进去:

name: radar_env
channels:
  - defaults
dependencies:
  - python=3.9
  - numpy=1.21.5
  - scipy=1.7.3
  - matplotlib=3.5.1

然后执行:

conda env create -f environment.yml

这样环境就一次性建好了。我习惯把每个项目的environment.yml放在代码仓库里,这样同事拉下来直接就能复现环境,省去很多沟通成本。

1.6 验证环境是否正常

最后,咱们写个小脚本验证一下:

import numpy as np
import scipy.signal as signal
import matplotlib.pyplot as plt

# 生成一个简单的雷达回波模拟信号
fs = 10e6  # 采样率 10MHz
t = np.arange(0, 1e-3, 1/fs)  # 1ms时长
f0 = 1e6  # 1MHz正弦波
echo = np.sin(2 * np.pi * f0 * t)

# 加一些噪声
noise = 0.1 * np.random.randn(len(t))
signal_with_noise = echo + noise

# 设计一个低通滤波器
b, a = signal.butter(4, 1.5e6, btype='low', fs=fs)
filtered = signal.filtfilt(b, a, signal_with_noise)

# 画图
plt.figure(figsize=(10, 6))
plt.plot(t * 1e6, signal_with_noise, label='含噪声信号', alpha=0.7)
plt.plot(t * 1e6, filtered, label='滤波后信号', linewidth=2)
plt.xlabel('时间 (μs)')
plt.ylabel('幅度')
plt.legend()
plt.grid(True)
plt.show()

如果这段代码能正常运行,说明你的环境已经准备好了。后面咱们就可以正式开始雷达信号处理的实战了。

小结一下:

  • Anaconda帮你管理Python环境和依赖
  • 虚拟环境隔离不同项目,避免版本冲突
  • numpy、scipy、matplotlib是雷达信号处理的三大基石
  • environment.yml可以一键复现环境

好了,环境搭好了,下一章咱们开始真正接触雷达数据流。到时候我会带你们用Python处理真实的雷达回波数据,那才是真正有意思的部分。

课后练习:试着用conda创建两个不同的环境,一个装numpy 1.21,另一个装numpy 1.26。然后在两个环境里分别运行numpy.show_config(),看看输出有什么不同。这个小练习能帮你理解环境隔离的意义。

公众号:蓝海资料掘金营,微信deep3321