Hay varios métodos para extraer la ganancia & diferencia de fase, cada uno con su propio conjunto de pros y contras
Método 1: cruce por cero y amp; pico, rms
El método que casi siempre me viene a la mente cuando primero se enfrentó con este desafío es medir la diferencia de tiempo entre el cruce por cero y amp; luego un simple \ $ \ Theta = 360 f \ Delta T \ $. En la práctica, determinar el cruce por cero, especialmente con los datos adquiridos, es extremadamente propenso a errores principalmente debido al ruido. Dependiendo del período de tiempo de la adquisición, el cruce por cero real puede ser mayor
La detección de picos para luego determinar la ganancia es igualmente propensa a errores debido al mismo problema mencionado anteriormente.
Sin embargo, la comparación de los valores RMS de ambas formas de onda es muy robusta para determinar la magnitud
Método 2: Transformada de Fourier
Por lo general, es tentador determinar el contenido espectral de las dos señales para luego calcular la magnitud y la diferencia de fase. Este es un método válido, pero se debe tener cuidado con respecto a los datos adquiridos, la frecuencia de muestreo & ventanas Si adquirió varios ciclos completos, estos métodos son muy precisos. Sin embargo,
Método 3 Bloqueo
Para extraer claramente la fase y la magnitud, se requieren dos osciladores, en cuadratura.
\ $ V_ {sig} = Asin (\ omega t + \ phi) \ $
\ $ V_ {osc0} = Xsin (\ omega t) \ $
\ $ V_ {osc90} = Xcos (\ omega t) \ $
\ $ V_0 = Xsin (\ omega t) Asin (\ omega t + \ phi) = \ frac {XA} {2} (cos (\ phi) - cos (2 \ omega t + \ phi)) \ PS
\ $ V_ {90} = Xcos (\ omega t) Asin (\ omega t + \ phi) = \ frac {XA} {2} (sin (\ phi) + sin (2 \ omega t + \ phi)) \ $
Filtre estas señales para eliminar el componente de portadora dos veces
\ $ V_ {0f} = \ frac {XA} {2} (cos (\ phi)) \ $
\ $ V_ {90f} = \ frac {XA} {2} (sin (\ phi)) \ $
a través de trig:
\ $ \ phi = atan (\ frac {V_ {90f}} {V_ {0f}}) \ $
\ $ A = \ frac {2} {X} \ sqrt {V_ {0f} ^ 2 + V_ {90f} ^ 2} \ $
EJEMPLO:
%% Generate the Stimulus and Signal
F = 50;
t = linspace( 0, 5/50,10000);
stim = sin(2*pi*F*t + pi/10); % stimulus. PHase shift for indication purposes and post-processing
sig = lsim( tf([50*2*pi],[1 50*2*pi]),stim,t)'; % signal is the stimulus post 50Hz 1st order filter, gain should be -3dB & phase should be 45deg
%%%%%%%%%%%%%%%%%%%%%%%%%
%% Post Processing
%%%%%%%%%%%%%%%%%%%%%%%%%
osc1 = sin(2*pi*F*t );
osc2 = cos(2*pi*F*t );
% Calculate components w.r.t. stimulus
V0 = osc1.*stim;
V90 = osc2.*stim;
tmp = ceil(1/(F*t(2)));
B = (tmp)*ones(1,tmp); % moving average filter,over the fundemental period. Suppress the 2nd harmonic that is created
V0f = filter( B,1,V0);
V90f = filter(B,1, V90);
angle1 = atan2(V90f,V0f);
Amp1 = 2*sqrt(V0f.^2 + V90f.^2);
% Calculate components w.r.t. signal
V0 = osc1.*sig;
V90 = osc2.*sig;
tmp = ceil(1/(F*t(2)));
B = (tmp)*ones(1,tmp); % moving average filter,over the fundemental period. Suppress the 2nd harmonic that is created
V0f = filter( B,1,V0);
V90f = filter(B,1, V90);
angle2 = atan2(V90f,V0f);
Amp2 = 2*sqrt(V0f.^2 + V90f.^2);
% calculate gain & phase:
gain = 20*log10(Amp2./Amp1);
phase = angle2 - angle1;
subplot(3,1,1);
plot(t,sig,t,stim);
grid on
subplot(3,1,2);
plot(t,gain);
grid on;
subplot(3,1,3);
plot(t,rad2deg(phase));
grid on;
Como puede ver, requiere un ciclo completo para establecerse y esto se debe a que el filtro de promedio móvil requiere un ciclo completo para acumular suficientes muestras. Se necesita un filtro para suprimir el término \ $ 2 \ omega \ $ término $ este podría ser un filtro de primer orden con una frecuencia de corte muy baja, PERO entonces la cantidad de ciclos necesarios para permitir que el filtro se asiente sería más larga. Asimismo, suprimiría cualquier componente de CA en la fase (algo que podría ocurrir en otros sistemas).