Skip to content

About

Analyze Michelson interference fringes to estimate microscopic mirror displacement.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

MichelsonEx:干涉条纹微小位移分析

简体中文 | English

MichelsonEx 是一个基于 Python 和计算光学的实验分析工具。它从迈克尔逊干涉仪的录像中提取选定区域(ROI)的灰度时间序列,通过去趋势、汉宁窗和快速傅里叶变换(FFT)估计干涉条纹变化的主频率,并据此计算反射镜的微小位移。

原理

当迈克尔逊干涉仪的一面反射镜移动时,往返光程差的变化量是反射镜位移的两倍。若观测到 N 个完整的条纹变化周期,则:

ΔL = N × λ / 2
  • ΔL:反射镜位移
  • N:条纹变化周期数
  • λ:激光波长

程序先计算主频率 f,再由视频时长 T 得到 N = f × T。

功能

  • 交互式框选视频中的 ROI
  • 提取 ROI 平均灰度时间序列
  • 线性去趋势和汉宁窗预处理
  • FFT 主频率检测与三点抛物线插值
  • 根据激光波长计算微米级位移
  • 输出时域信号、频谱和测量摘要图

项目结构

MichelsonEx/
├── main.py               # 命令行入口和 ROI 选择
├── utils.py              # 信号提取、FFT 和位移计算
├── visualization.py      # 分析结果可视化
├── tests/                # 核心算法测试
├── requirements.txt      # 运行依赖
└── requirements-dev.txt  # 测试依赖

环境与安装

建议使用 Python 3.9 或更高版本。

git clone https://github.com/Pototoooo/MichelsonEx.git
cd MichelsonEx

python -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate
pip install -r requirements.txt

使用方法

python main.py <视频路径> [激光波长_nm]

示例:

# 使用默认的 632.8 nm He-Ne 激光波长
python main.py interference_video.mp4

# 指定 532 nm 激光
python main.py interference_video.mp4 532

运行后:

  1. 在弹出的第一帧画面中框选条纹清晰的 ROI。
  2. 按 Enter 或空格确认;按 C 取消。
  3. 等待程序处理全部帧并输出主频率、周期数和位移。
  4. 查看当前目录生成的 measurement_result.png。

ROI 选择和结果图窗口需要图形桌面环境。

方法与适用范围

处理流程为:

视频 → ROI 平均灰度 → 线性去趋势 → 汉宁窗 → FFT → 主频率 → 周期数 → 位移

当前方法输出的是由条纹变化周期估计的位移量大小,不能判断运动方向。它更适合主频率稳定、条纹变化近似周期性且反射镜在分析时段内单向运动的实验。若运动发生反向、频率随时间明显变化或存在多个强频率分量,单一 FFT 主峰可能不能代表净位移。用于精密测量前,请结合已知位移进行标定并评估不确定度。

测试

pip install -r requirements-dev.txt
pytest

测试覆盖位移公式和合成周期信号的主频率估计。

许可证

本项目采用 MIT License 开源。

About

Analyze Michelson interference fringes to estimate microscopic mirror displacement.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages