这个FWHM脚本的逻辑?

时间:2015-06-17 14:32:37

标签: matlab

有人可以解释这个程序的逻辑。

我不明白为什么y=y/max(y) 而且,

interp = (0.5-y(i-1)) / (y(i)-y(i-1));
tlead = x(i-1) + interp*(x(i)-x(i-1));

剧本:

function width = fwhm(x,y)
y = y / max(y);
N = length(y);
MicroscopeMag=10;
PixelWidth=7.8; % Pixel Pitch is 7.8 Microns.
%------- find index of center (max or min) of pulse---------------%
    [~,centerindex] = max(y);% 479 S10 find center peak and coordinate
%------- find index of center  (max or min) of pulse-----------------%
i = 2;
while sign(y(i)-0.5) == sign(y(i-1)-0.5) %trying to see the curve raise
    i = i+1; %474 S10
end %first crossing is between v(i-1) & v(i)
interp = (0.5-y(i-1)) / (y(i)-y(i-1));
tlead = x(i-1) + interp*(x(i)-x(i-1));
i=centerindex+1;      %471  
%------- start search for next crossing at center--------------------%
while ((sign(y(i)-0.5) == sign(y(i-1)-0.5)) && (i <= N-1))
    i = i+1;
end
if i ~= N
    interp = (0.5-y(i-1)) / (y(i)-y(i-1));
    ttrail = x(i-1) + interp*(x(i)-x(i-1));
%width = ttrail - tlead; % FWHM
    width=((ttrail - tlead)/MicroscopeMag)*PixelWidth; 
    % Lateral Magnification x Pixel pitch of 7.8 microns.
end

感谢。

2 个答案:

答案 0 :(得分:2)

该程序使用点扩散函数(PSF)的Full Width at Half Maximum(FWHM)计算显微镜的分辨率,该特征是使用给定的物镜/光学器件等显微镜。

PSF通常看起来像高斯:

enter image description here

并且FWHM告诉您显微镜系统辨别小物体(即分辨率)有多好。假设您正在查看2个点对象,那么分辨率(间接FWHM)是这些对象需要的最小大小,如果您确实要告知有2个对象彼此靠近而不是一个大对象。

现在对于上述函数,看起来它首先计算PSF的最大值,然后沿曲线逐渐下降,直到它大约达到最大值的一半。然后可以根据PSF的分布计算FWHM。

希望让事情更清楚一点!

答案 1 :(得分:2)

你特别提到的两段代码都是内务管理:它更多的是关于它的光谱而不是光学。

所以第一行

y = y/max(y);

将其归一化为1,即将整个系列除以最大值。这是一种相当普遍的做法,在这里做这件事是明智的,它可以避免程序员在以后通过它进行分割。

下一部分,

interp = (0.5-y(i-1)) / (y(i)-y(i-1));
tlead = x(i-1) + interp*(x(i)-x(i-1));

以及后来ttrail的相应块,是关于尝试插入信号值为0.5的确切点。之前它标识了峰值的中心和半最大值之前的最后一个索引位置,所以现在我们有一个包含信号前沿的范围。

'半最大'标准要求我们找到前沿值为0.5的点(我们标准化为1,因此半最大值定义为0.5)。数据可能没有完全相同的样本 - 它将会[... 0.4856 0.5024 ...]或类似的东西。

因此,这两行试图在一个指数的分数中确切地确定该线将穿过0.5的值。它通过简单的线性插值来实现:

y(i)-y(i-1)

给出了两个值之间的delta_y和

0.5-y(i-1)

给我们带来了不足。通过采用该比率,我们可以线性插值两个指数位置之间的距离,我们应该恰好达到0.5。

然后下一行计算出相应的delta_x,它会根据时基给出实际距离。

对后缘做同样的事情,然后使用这两个插值给出一个更精确的全宽值。

为了想象这一点,我会在i = 2行放置一个断点并逐步执行它,注意或绘制y(i)的值。 stem有助于可视化离散数据,尤其是当您在索引位置之间工作时。