加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

二维相位矩阵的校正

(2011-07-21 16:39:09)
标签:

相位校正

unwrap

matlab

波前

分类: Matlab

最近看计算傅里叶光学,得到一个相位二维矩阵代表了接受屏上的相位分布情况,作者使用了unwrap函数对一个剖面做了相位校正,得到如下结果

image

如果不使用相位校正,结果如下

image

可以看到,如果不进行相位校正,得到的结果简直看不出任何有用的信息,而作者分析说相位信息其实代表波前信息,如上面校正后的剖面图就表示了一个向下传播的波前形状,所以相位校正是很有必要的。Matlab帮助对unwrap相位校正函数的解释如下

Q = unwrap(P) corrects the radian phase angles in a vector P by adding multiples of ±2π when absolute jumps between consecutive elements of P are greater than or equal to the default jump tolerance of π radians.

 

下面给出了一张未校正的相位图(非剖面),可以看到图中明显包含有重要的信息,但不做校正,完全看不出是什么信息。

image

image

而Matlab没有给出校正二维相位矩阵的函数(unwrap只能对矩阵按行或列分别校正),所以尝试自己编了一个函数实现二维相位校正,如上面的图校正如下

image

image

信息是不是出来了,波前啊,WaveFront啊,有木有!

 

代码分享如下:

function Q = unwrap2(P, tol)
%================================================================
% 功能:实现二维数组的相位校正,可参考matlab的unwrap函数的说明
% 参数:P:matrix of the radian phase angles ;
      tol: jump tolerance instead of the default value(pi)
% 返回值:校正后的相位矩阵
% 主要思路:先使用一维校正函数unwrap校正中间的一行(默认认为中间的一行是比较标准的),
          然后使用unwrap按列校正得到一个校正矩阵,然后使用上面的行校正此矩阵得到最后结果
% 调用方法:同unwrap函数调用方法(但不提供dim参数)
% 日期:2011/7/21
% author: GJ
%===============================================================
if nargin == 1
    tol = pi;
end

[M, N] = size(P);

mid = M/2+1;
unwrapmid = unwrap(P(mid, :), tol); % 校正中间一行
unwrapP = unwrap(P, tol); % 按列校正全矩阵

unwrapPmid = unwrapP(mid, :);
miderr = unwrapPmid - unwrapmid;
miderrM = repmat(miderr, M, 1);

Q = unwrapP - miderrM;
end

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有