Simulación Matlab del cálculo de fase instantánea para el sistema de medición de seguimiento en tiempo real del desplazamiento de interferencia de automezcla de retroalimentación óptica basado en la transformada de Hilbert

Tabla de contenido

1. Base teórica

2. Antecedentes del caso 

3. Programa MATLAB

En cuarto lugar, el análisis de la conclusión de la simulación.


1. Base teórica

       La tecnología de interferometría óptica es una tecnología de medición basada en el principio de la interferencia de ondas de luz. Es diferente de otras tecnologías de medición de imágenes ópticas. Además de una mayor sensibilidad y precisión de medición, también tiene las características de medición sin contacto. Causa daños en la superficie , por lo tanto, la aplicación de la interferometría óptica es muy extensa. La transformada de Hilbert y la teoría de la fase instantánea son un método más comúnmente utilizado.

      Por lo tanto, la transformada de Hilbert de la señal puede considerarse como la salida de la señal después de pasar por un filtro con una respuesta de impulso unitario de . Después de que la señal se somete a la transformada de Hilbert, su espectro de amplitud, espectro de potencia y función de autocorrelación permanecen sin cambios. La transformada de Hilbert de la señal es equivalente a un desfasador. La fase de la parte de frecuencia positiva de la señal cambia en -90°, y la frecuencia negativa Parte del cambio de fase en 90°.

      La señal analítica z(t) se puede construir a partir de la señal de tiempo continua S(t) y su transformada de Hilbert H(S(t)):    

     De la expresión z(t) de la señal analítica anterior, s(t) La instantánea fase de , es decir, la fase instantánea es:
                  
       Por lo tanto, la señal analítica se puede construir realizando la transformada de Hilbert en la señal OFSMI, y la fase instantánea de la señal OFSMI se puede obtener calculando el arco tangente de la señal analítica.

       El contenido principal del algoritmo de detección de franjas enteras por transformada de Hilbert es: después de eliminar el componente DC de la señal OFSMI, se realiza la transformada de Hilbert para construir una señal analítica, y la fase instantánea del paquete se obtiene calculando el arco tangente de la señal analítica, y se detecta la fase instantánea del paquete.Todos los puntos abruptos de fase, y determinar la dirección de desplazamiento del reflector externo, y finalmente eliminar los puntos de pseudo-raya para obtener todos los puntos de franja enteros. El flujo del algoritmo de detección de franjas enteras transformadas de Hilbert se muestra en la figura:
 

2. Antecedentes del caso 

       La tecnología de interferometría óptica es una tecnología de medición basada en el principio de la interferencia de ondas de luz. Es diferente de otras tecnologías de medición de imágenes ópticas. Además de una mayor sensibilidad y precisión de medición, también tiene las características de medición sin contacto. Causa daños en la superficie, por lo tanto, la aplicación de la interferometría óptica es muy extensa.
       En el proceso de investigación de la interferometría óptica tradicional, se descubrió que la retroalimentación óptica externa del láser causaría el efecto de interferencia de automezcla de retroalimentación óptica (OFSMI), que afectaría las características de salida del láser, lo que daría como resultado un ensanchamiento de la línea espectral, retroalimentación óptica y retroalimentación óptica Los fenómenos como el ruido y la fragmentación de la coherencia pueden causar daños graves al sistema láser, por lo que las personas siempre intentan eliminar la influencia causada por la retroalimentación óptica externa del láser al principio. Con más investigación, se encontró que la señal OFSMI contiene la información de los parámetros propios del láser y alguna información sobre el movimiento del reflector externo, como el desplazamiento, la velocidad, la aceleración, etc. Por lo tanto, las personas cambiaron de eliminar la influencia de la retroalimentación óptica a Usando retroalimentación óptica para obtener información relevante, la investigación de OFSMI ha surgido gradualmente y sus principales aplicaciones se encuentran en los campos de estrechamiento de líneas espectrales y medición de OFSMI.
       El efecto OFSMI se refiere al fenómeno de que después de que un reflector externo refleja o dispersa la luz de salida del láser, parte de la luz se retroalimenta al resonador láser y la luz de retroalimentación interfiere con la luz en la cavidad, modulando así la salida. potencia óptica del láser.
 

3. Programa 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);

En cuarto lugar, el análisis de la conclusión de la simulación.

La estructura de la simulación es la siguiente:

 

 

 

 

 

A23-45 

 

Supongo que te gusta

Origin blog.csdn.net/ccsss22/article/details/126695902
Recomendado
Clasificación