ヒルベルト変換に基づく光フィードバック自己混合干渉変位のリアルタイム追跡測定システムの瞬時位相計算の Matlab シミュレーション

目次

1. 理論的根拠

2. 事件の背景 

3. MATLAB プログラム

第四に、シミュレーション結論分析


1. 理論的根拠

       光干渉技術は、光波干渉の原理に基づく計測技術であり、他の光イメージング計測技術とは異なり、計測感度や精度が高いだけでなく、非接触で計測できるという特徴もあり、表面にダメージを与えたり、したがって、光干渉法の適用は非常に広範です。ヒルベルト変換と瞬時位相理論は、より一般的に使用される方法です。

      したがって、信号のヒルベルト変換は、単位インパルス応答が のフィルターを通過した後の信号の出力と見なすことができます。信号がヒルベルト変換を受けた後, その振幅スペクトル, パワー スペクトルと自己相関関数は変更されません. 信号のヒルベルト変換は移相器に相当します. 信号の正の周波数部分の位相は-90°変化し、負の周波数 位相が 90° 変化する部分。

      解析信号 z(t) は、連続時間信号 S(t) とそのヒルベルト変換 H(S(t)) から構築できます。    

     上記の解析信号の式 z(t) から、s(t) 瞬時の位相、つまり瞬時位相は次のとおりです。
                  
       したがって、解析信号は OFSMI 信号をヒルベルト変換することで作成でき、OFSMI 信号の瞬時位相は解析信号の逆正接を計算することで取得できます。

       ヒルベルト変換整数フリンジ検出アルゴリズムの主な内容は次のとおりです。OFSMI 信号の DC 成分を除去した後、解析信号を構築するためにヒルベルト変換が実行され、パッケージの瞬時位相が逆正接を計算することによって取得されます。分析信号、およびパッケージの瞬間的な位相が検出されます. すべての位相急点, 外部リフレクタの変位方向を決定し、最後に疑似ストライプポイントを削除して、すべての整数フリンジポイントを取得します. ヒルベルト変換整数フリンジ検出アルゴリズムの流れを次の図に示します。
 

2. 事件の背景 

       光干渉技術は、光波干渉の原理に基づく計測技術であり、他の光イメージング計測技術とは異なり、計測感度や精度が高いだけでなく、非接触で計測できるという特徴もあります。したがって、光干渉法の適用は非常に広範です。
       従来の光干渉法の研究プロセスでは、レーザーの外部光フィードバックが光フィードバック自己混合干渉 (OFSMI) 効果を引き起こし、レーザーの出力特性に影響を与え、スペクトル線の広がりをもたらすことが判明しました。オプティカル フィードバックとオプティカル フィードバック. ノイズやコヒーレンス フラグメンテーションなどの現象は、レーザー システムに重大な損傷を与える可能性があるため、最初は常に、レーザーの外部オプティカル フィードバックによって引き起こされる影響を排除しようとします。さらなる研究により、OFSMI信号には、レーザー自体のパラメーター情報と、変位、速度、加速度などの外部反射器の動きに関する情報が含まれていることがわかりました。したがって、人々は光フィードバックの影響を排除することから、光フィードバックを使用して関連情報を取得する OFSMI の研究は徐々に出現しており、その主な用途はスペクトル線の狭化と OFSMI 測定の分野です。
       OFSMI 効果とは、レーザー出力光が外部反射体によって反射または散乱された後、光の一部がレーザー共振器にフィードバックされ、フィードバック光がキャビティ内の光と干渉し、それによって出力が変調される現象を指します。レーザーの光パワー。
 

3. MATLAB プログラム

%设置相关参数
close all;clc;clear all
 %phi_0=am0+am*sin(2*pi*ft/fs*t1); 
am=19;     %am=4*pi*L/lanbuda0
am0=30;    % am0=4*pi*L0/lanbuda0         
ft=200;    %设置振动频率
fs=40000; %设置采样频率
n=400;    %设置采样点数
alfa=5;    %设置激光器线宽展宽因数
c=0.7;     %设置光反馈强度
[x,g,y]=spain_ofsmi_data(alfa,c,am,am0,ft,fs,n);%%x----fai0, g---自混合信号, y---- fai-f

save ofsmi g; %将g保存到ofsmi.mat文件中
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%画图
figure(1)
subplot(3,1,1);plot(x);title('无光反馈时的外腔相位');ylabel('fai_0(n)/rad');grid on;%axis([-inf inf 290 340]);
subplot(3,1,2);plot(y);title('有光反馈时的外腔相位alfa=3;c=4;');ylabel('fai_f(n)/rad');grid on;
subplot(3,1,3);plot(g);title('SMI信号');xlabel('采样点数n');ylabel('g(n)的振幅');grid on;%legend();

F2    = hilbert(g);
xr    = real(F2);
xi    = imag(F2);
Faif_ = atan2(xi,xr);%公式8

%根据峰值flag的间隔确定flags变量,用来判断m1,m2的取值
flags = [ones(50,1);-1*ones(100,1);ones(100,1);-1*ones(100,1);ones(50,1)];
flags = [0;flags(1:end-1)];

flag2 = zeros(size(Faif_));
for i = 2:length(Faif_)-1
    if i <= 51;
       if g(i)<g(i-1) & g(i)<g(i+1)
          flag2(i)=1;
       end
    end
    if i <= 151 & i>51
       if g(i)<g(i-1) & g(i)<g(i+1) 
          flag2(i)=1;
       end
    end    
    if i <= 251 & i>151
       if g(i)<g(i-1) & g(i)<g(i+1)
          flag2(i)=1;
       end
    end
    if i <= 351 & i>251
       if g(i)<g(i-1) & g(i)<g(i+1)
          flag2(i)=1;
       end
    end
    if i <= 400 & i>351
       if g(i)<g(i-1) & g(i)<g(i+1)
          flag2(i)=1;
       end 
    end  
end
flag2([51,151,251,351])=0;


flag    = zeros(size(Faif_));
for  n = 2:length(Faif_)
     flag(n) = abs([Faif_(n-1)-Faif_(n)]); 
end
[pks,locs]  = findpeaks(flag,'THRESHOLD',0.5);
locs        = locs;
flag3       = zeros(size(Faif_));
flag3(locs) = 1;



 
indx1 = find(flag2==1);
indx2 = find(flag3==1);
indxs = [];
for i = 1:length(indx1)
    if abs(indx1(i)-indx2(i))<=4
       indxs(i) = indx2(i);
    else
       indxs(i) = indx1(i);
    end
end

Flag_=zeros(size(flag2));
Flag_(indxs)=1;
 

figure;
subplot(211);
plot(g);
subplot(212);
plot(flag2,'r');
hold on
plot(flag3,'b');

%依据相位展开原理, 计算真实相位Faif
m1      = 0;
m2      = 1;
Faif(1) = (-1)^m1*abs(Faif_(1))  + 2*pi*m2;


for  n = 2:length(flag3)
     %判决m1和m2,0/1,1/-1,进行分段处理
     if flags(n) ==  1
        m2 = m2+1*Flag_(n); 
        if sign(Faif_(n))==1
           m1=0; 
        else
           m1=1;  
        end
     end
     if flags(n) == -1
        m2 = m2-1*Flag_(n);  
        if sign(Faif_(n))==1
           m1=1; 
        else
           m1=0;  
        end
     end 
     
     
     Faif(n) = (-1)^m1*abs(Faif_(n))  + 2*pi*m2;
end

%步骤三:
fai0 = Faif + c*sin(Faif + atan(alfa));

 
figure;
subplot(311);
plot(g);
ylabel('g(n)的振幅');
subplot(312);
plot(Faif_);
ylabel('Fai_f`');
subplot(313);
plot(fai0);
ylabel('Fai_0');


%计算误差
t1=fai0-mean(fai0);
t2=x-mean(x);
figure;
subplot(211);
plot(t2,'r','linewidth',2);
hold on
plot(t1,'b--','linewidth',2);
legend('真实相位','重构相位');
subplot(212);
plot(t1-t2)
title('error');
axis([0,400,-30,30]);

%%
clear;
 close all;
 %% 生成自混合信号
 am=33;am0=50;ft=200;fs=600000;n=6000  ;  alfa=4;c=0.5;
[x,g,y]=spain_ofsmi_data(alfa,c,am,am0,ft,fs,n);
t1=1:n;
t=t1
%t=t1/fs;
p0=3000;m=0.001;
 p=p0*(1+m*g);
 figure
 plot(t1,p,'k');title('自混合信号');xlabel('采样点数');
 %% 加高斯白噪声
% sur_add=25;%信噪比
% ps=g*g'/n;
sur_add=30;%信噪比
ps=9*g*g'/n;
pn=ps*10^(-sur_add/10);
noise=randn(1,n);
noise=sqrt(pn)*noise;
p=p+noise;
p1=p;
% figure
%   plot(t1,noise);
figure
  plot(t1,p,'k');title('自混合信号');xlabel('采样点数'); 
  figure
subplot(2,1,1);plot(t,p,'k');ylabel('P/uw','fontsize',12);gtext('(a)','fontsize',12);

%% 均值滤波
y1=zeros(1,n)
for i=1:12
y1(i)=p(i);
end
for i=13:n-12
    y1(i)=(p(i-12)+p(i-11)+p(i-10)+p(i-9)+p(i-8)+p(i-7)+p(i-6)+p(i-5)+p(i-4)+p(i-3)+p(i-2)+p(i-1)+p(i)+p(i+1)+p(i+2)+p(i+3)+p(i+4)+p(i+5)+p(i+6)+p(i+7)+p(i+8)+p(i+9)+p(i+10)+p(i+11)+p(i+12))/25;
end
for i=n-11:n
y1(i)=p(i);
end
 p=y1;
% figure
%   plot(t1,p,'k');title('自混合信号');xlabel('采样点数'); axis([-inf inf 2995 3003]);
 
%% 消去直流分量
 dif=diff(p);
dif=[0 dif ];
yuzhi=max(dif)*0.6;
for i=1:length(dif);
    if abs(dif(i))<yuzhi
        dif_th(i)=0;
    else
        dif_th(i)=dif(i);
    end
end
 I=find(dif_th);
 num=length(I);
 z=[1 I n];
setsum=zeros(length(z)-1);
for i=1:length(z)-1
    for j=z(i):z(i+1)
        if j<z(i+1)
        setsum(i)=setsum(i)+p(j);%分段求和
        elseif j==z(i+1)
            if i==1
            for jj=z(i):z(i+1)
        ave(jj)=setsum(i)/(z(i+1)-z(i));
            end
            else
                 for jj=z(i)+1:z(i+1)
        ave(jj)=setsum(i)/(z(i+1)-z(i));
                 end
            end
        end
    end 
end
ave_g=p-ave;
% figure
% subplot(2,1,1);stem(dif);title('SM信号的微分');
% subplot(2,1,2);stem(dif_th);
%  figure
% subplot(2,1,1);plot(t,p,'k');ylabel('P/uw','fontsize',13);xlabel('t/s','fontsize',13);title('(a)','fontsize',13')
%  subplot(2,1,2);plot(t,ave_g,'k');xlabel('t/s','fontsize',13);ylabel('Po/uw','fontsize',13);title('(b)','fontsize',13)
 %% 通过hilbert构造解析形式,检测条纹
F2=hilbert(ave_g);
xr=real(F2);xi=imag(F2);atan=atan2(xi,xr);
freq_ins=diff(atan);
freq_ins=[0 freq_ins ];

for i=1:length(freq_ins);
    if freq_ins(i)>=-3
        freq_ins_th(i)=0;
    else
        freq_ins_th(i)=sign(freq_ins(i));
    end
end
II=find(freq_ins_th);
 no=length(II);
 jiange=(II(6)-II(1))/4/3;
 for i=2:no
     if II(i)<=II(i-1)+jiange;
        freq_ins_th(II(i))=0;
     end
 end

% figure
% subplot(3,1,1);plot(t,atan,'k');title('(a)','fontsize',13');;xlabel('t/s','fontsize',13);ylabel('相位/rad','fontsize',13);
% subplot(3,1,2);plot(t,freq_ins,'k');title('(b)','fontsize',13');;xlabel('t/s','fontsize',13);ylabel('相位微分/rad','fontsize',13);
% subplot(3,1,3);plot(t,freq_ins_th,'k');title('(c)','fontsize',13');;xlabel('t/s','fontsize',13);
%% 确定运动方向
pulsed=-sign(dif);
trans=pulsed.*freq_ins_th;

%% 去掉小数条纹
  xiaoshu=zeros(1,n)
for i=1:num-1
 if sign(dif_th(I(i+1)))~=sign(dif_th(I(i))) 
     mm2=round((I(i+1)-I(i))/3);
      mm1=round((I(i+1)-I(i))/4);
     mm3=round((I(i+1)-I(i))/24*7);
      
    for j=I(i)+mm1:I(i+1)-mm2

         xiaoshu(j)=1;
     end
 else
         xiaoshu(j)=0;
end 
 end
%  figure
%  plot(xiaoshu)
 xiaoshu_y=xiaoshu.*p;
%  figure
%  plot(xiaoshu_y);title('粗糙提取小数条纹');axis([0 6000 2900 3050])
 for i=1:n
    if xiaoshu(i)==1
        xiaoshu1(i)=0;
    else
        xiaoshu1(i)=1;
    end
 end
 trans_x=trans.*xiaoshu1;
 %%
% figure
% subplot(3,1,1);plot(t,p,'k');ylabel('P/uw','fontsize',13);xlabel('t/s','fontsize',13);title('(a)','fontsize',13');
% subplot(3,1,2);plot(t,trans,'k');xlabel('t/s','fontsize',13);title('(b)','fontsize',13');
% subplot(3,1,3);plot(t,trans_x,'k');xlabel('t/s','fontsize',13);title('(c)','fontsize',13');
%% 
subplot(2,1,2);plot(t,trans_x,'k');xlabel('采样点n','fontsize',12);gtext('(b)','fontsize',12);

第四に、シミュレーション結論分析

シミュレーションの構造は次のとおりです。

 

 

 

 

 

A23-45 

 

おすすめ

転載: blog.csdn.net/ccsss22/article/details/126695902