news 2026/6/10 21:50:44

生成模拟干涉图

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
生成模拟干涉图

移相算法求解相位,相位解包裹,泽尼克多项式拟合程序

最近在实验室折腾相位测量,发现光干涉数据处理的三个关键环节:移相算法提取相位、相位解包裹操作、泽尼克多项式拟合。这几个步骤环环相扣,实测中经常需要代码实现,咱们今天就手撕几个代码片段来聊聊。

移相算法实战

假设我们拿到四幅移相干涉图(相位差π/2),核心代码其实就五行:

import numpy as np I1 = 100 + 50*np.cos(phase) # 0相位 I2 = 100 + 50*np.cos(phase + np.pi/2) # π/2 I3 = 100 + 50*np.cos(phase + np.pi) # π I4 = 100 + 50*np.cos(phase + 3*np.pi/2) # 3π/2 # 计算包裹相位 calc_phase = np.arctan2(I4 - I2, I1 - I3) # 关键操作

这里有个坑要注意:np.arctan2直接算出[-π, π]的包裹相位,但实际相位可能是连续变化的。比如当真实相位是3π时,这里会被压缩成-π,这时候就得靠相位解包裹来展开。

相位解包裹的暴力美学

最简单的行展开法代码长这样:

def unwrap_row(phase): offset = 0 unwrapped = np.zeros_like(phase) for i in range(1, len(phase)): delta = phase[i] - phase[i-1] if delta > np.pi: offset -= 2*np.pi elif delta < -np.pi: offset += 2*np.pi unwrapped[i] = phase[i] + offset return unwrapped

这方法在噪声大的地方容易翻车,实测中发现用skimage的unwrap_phase更靠谱:

from skimage import restoration unwrapped_phase = restoration.unwrap_phase(wrapped_phase)

但自己实现的版本有助于理解原理——本质上就是在相位跳变超过π时加减2π的补偿操作。

泽尼克多项式拟合实战

测完相位数据后,我们经常要分解波前像差。泽尼克系数计算可以用现成轮子:

from zernike import RZern cart = RZern(6) # 6阶多项式 cart.fit(phase_data) # 拟合数据 coef = cart.coef # 获取系数

想自己造轮子的话,得先实现泽尼克基函数。比如径向多项式部分:

def zernike_radial(n, m, rho): if (n - m) % 2 != 0: return 0 total = 0 for k in range((n - m)//2 + 1): num = (-1)**k * np.math.factorial(n - k) den = (np.math.factorial(k) * np.math.factorial((n + m)//2 - k) * np.math.factorial((n - m)//2 - k)) total += num / den * rho**(n - 2*k) return total

这个递归实现效率不高,但胜在直观。实际项目里建议用矩阵最小二乘法求解系数,避免重复计算基函数。

调试时记得验证拟合效果——把拟合后的波前与原始数据相减,残差应该接近随机噪声。遇到过拟合的情况就把泽尼克阶数调低,实测发现前15项通常能搞定大部分光学系统的像差分析。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 18:24:52

容器日志失控导致服务崩溃?你必须掌握的日志轮转3大机制

第一章&#xff1a;容器日志失控导致服务崩溃&#xff1f;一个被忽视的运维黑洞在现代微服务架构中&#xff0c;容器化部署已成为标准实践&#xff0c;但伴随而来的日志管理问题却常常被低估。当日志未被合理轮转或限制时&#xff0c;单个容器可能在数小时内生成数十GB的日志文…

作者头像 李华
网站建设 2026/6/10 15:48:31

为什么90%的团队都忽略了Docker标签治理?揭开自动化运维盲区

第一章&#xff1a;Docker镜像标签管理的重要性Docker 镜像标签&#xff08;Tag&#xff09;是识别和管理容器镜像版本的关键机制。一个镜像可以拥有多个标签&#xff0c;用于表示不同的发布状态&#xff0c;例如开发、测试或生产环境的版本。合理的标签策略能够提升部署的可追…

作者头像 李华
网站建设 2026/6/10 15:49:46

为什么你的容器看似运行却已失联?Docker健康检查配置文件深度解析

第一章&#xff1a;为什么你的容器看似运行却已失联&#xff1f;在容器化应用部署中&#xff0c;一个常见但极具迷惑性的问题是&#xff1a;容器状态显示为“运行中”&#xff0c;但服务无法访问或响应。这种“假死”状态往往源于网络配置、健康检查缺失或进程崩溃后未触发重启…

作者头像 李华
网站建设 2026/6/10 20:13:19

Docker健康检查实战配置指南(从入门到生产级落地)

第一章&#xff1a;Docker健康检查概述Docker容器的稳定性与服务可用性密切相关&#xff0c;而健康检查&#xff08;Health Check&#xff09;机制是确保容器应用正常运行的重要手段。通过定义健康检查指令&#xff0c;Docker能够自动判断容器内应用程序是否处于预期状态&#…

作者头像 李华
网站建设 2026/6/10 17:36:58

华为云ModelArts兼容性测试:能否导入VibeThinker权重?

华为云ModelArts兼容性测试&#xff1a;能否导入VibeThinker权重&#xff1f; 在AI模型日益“军备竞赛化”的今天&#xff0c;百亿甚至千亿参数的大模型固然引人注目&#xff0c;但真正落地到企业级应用场景时&#xff0c;人们越来越关注另一个维度的指标&#xff1a;性价比推理…

作者头像 李华
网站建设 2026/6/10 18:23:36

平头哥半导体生态:玄铁RISC-V能否运行量化版VibeThinker?

平头哥半导体生态&#xff1a;玄铁RISC-V能否运行量化版VibeThinker&#xff1f; 在AI模型越来越“重”的今天&#xff0c;我们正面临一个悖论&#xff1a;一方面&#xff0c;大模型的能力不断突破边界&#xff1b;另一方面&#xff0c;它们对算力、功耗和部署成本的要求也水涨…

作者头像 李华