힐베르트 변환에 기반한 광 피드백 자기 혼합 간섭 변위의 실시간 추적 측정 시스템을 위한 순시 위상 계산의 Matlab 시뮬레이션

목차

1. 이론적 근거

2. 케이스 배경 

3. MATLAB 프로그램

넷째, 시뮬레이션 결론 분석


1. 이론적 근거

       광 간섭 측정 기술은 광파 간섭 원리에 기반한 측정 기술로, 다른 광학 영상 측정 기술과 구별되며, 측정 감도와 정확도가 높을 뿐만 아니라 비접촉 측정의 특성도 가지고 있습니다.표면 손상 , 따라서 광 간섭계의 적용은 매우 광범위합니다. 힐베르트 변환과 순시 위상 이론이 더 일반적으로 사용되는 방법입니다.

      따라서 신호의 힐베르트 변환은 단위 임펄스 응답이 인 필터를 통과한 신호의 출력으로 간주할 수 있습니다. 신호가 힐베르트 변환을 거친 후 진폭 스펙트럼, 전력 스펙트럼 및 자기 상관 함수는 변경되지 않은 상태로 유지됩니다. 신호의 힐베르트 변환은 위상 시프터와 동일합니다. 신호의 양의 주파수 부분의 위상은 -90°만큼 변경되고, 음의 주파수 위상이 90° 변하는 부분.

      해석 신호 z(t)는 연속 시간 신호 S(t)와 힐베르트 변환 H(S(t))에서 구성할 수 있습니다    

     . 위의 해석 신호 s(t)의 식 z(t)에서 순시 즉, 순시 위상의 위상은 다음과 같습니다.
                  
       따라서 OFSMI 신호에 대해 힐베르트 변환을 수행하여 분석 신호를 구성할 수 있으며 OFSMI 신호의 순시 위상은 분석 신호의 아크 탄젠트를 계산하여 얻을 수 있습니다.

       Hilbert 변환 정수 프린지 검출 알고리즘의 주요 내용은 다음과 같습니다. OFSMI 신호의 DC 성분을 제거한 후 Hilbert 변환을 수행하여 분석 신호를 구성하고 패키지의 순시 위상은 분석 신호 및 패키지의 순시 위상이 감지됩니다.모든 위상 갑작스러운 점을 결정하고 외부 반사경의 변위 방향을 결정하고 마지막으로 의사 줄무늬 점을 제거하여 모든 정수 프린지 점을 얻습니다. 힐베르트 변환 정수 프린지 감지 알고리즘의 흐름은 그림에 나와 있습니다.
 

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