Estimación de la impedancia en MATLAB

0

Buenos días,

Estoy desarrollando un sistema de bio-impedancia. Para realizar el cálculo de impedancia, estoy tratando de usar el método descrito en este artículo, y que se menciona a continuación: enlace

  • Se inyecta una señal eléctrica en el cuerpo del paciente a través de 2 Los electrodos, y la misma señal se recoge a través de otros 2 electrodos.
  • Esta señal recopilada se conecta luego al Arduino ADC, y n Se adquieren muestras de esa señal.
  • El espectro de frecuencia se encuentra a partir del cual se calcula FFT en MATLAB.
  • Entonces, de acuerdo con el artículo mencionado anteriormente, Ajuste de curva mínima El método se utiliza para la estimación del valor de impedancia. El resultado de El cálculo es un único número complejo que contiene real e imaginario. Valores de la impedancia. Estos valores reales e imaginarios serán aplicado en las ecuaciones posteriores.

Mi pregunta es, ¿cómo debo aplicar el método Ajuste de curva mínima, a los N números complejos devueltos por el cálculo de FFT?

Como resultado de FFT, tengo un vector complejo de 1x2048.

Eché un vistazo a la documentación de matlab: enlace

Pero no entendía cómo configurar los parámetros (fun, x0, xdata, ydata) de la función lsqcurvefit, en mi caso.

Muchas gracias!

    
pregunta Dyarlen

1 respuesta

1

La FFT es simplemente un método eficiente para calcular la DFT (Discrete Fourrier Transform), que es una convolución entre una forma de onda de entrada de muestra N \ $ x_n \ $, y cada una de las N funciones de base compleja de la forma \ $ u_n = exp (i2 \ pi fn) \ $, donde f es la frecuencia y varía de 0 a N-1.

La forma niave, directa y de fuerza bruta de realizar la DFT requiere \ $ O (2N ^ 2) \ $ multiplicados y agregados. La FFT utiliza una factorización inteligente para reducir radicalmente el número de adiciones y multiplicaciones requeridas para \ $ O (2N \ log_2 (N)) \ $, vale la pena hacer si N es más que unas pocas docenas, y necesita todas las frecuencias.

Si solo necesita la convolución a una sola frecuencia, o un pequeño puñado de frecuencias, hacerlo de manera directa, haciendo solo una frecuencia de la DFT, es más rápido que usar una FFT, que es un cálculo de 'todo o nada' .

Por ejemplo, para calcular la ganancia compleja v / i en una sola frecuencia, comenzaría generando efectivamente una señal compleja a esa frecuencia y emitiendo la componente real de la misma al dispositivo bajo prueba. "Efectivamente" significa que en realidad no es necesario generar explícitamente la señal completa de coseno + seno. Si el período es un múltiplo de 4 muestras, eso significa que puede generar solo la forma de onda del coseno y cambiarlo 90 grados, o simplemente indexarlo, para obtener el seno de forma gratuita.

Una vez que haya recibido la forma de onda \ $ v_n \ $, convolucione con la referencia compleja \ $ u_n \ $. Esto tiene la parte real \ $ cos (2 \ pi f n) \ $ y la parte imaginaria \ $ i.sin (2 \ pi f n) \ $. La convolución se realiza como $$ realpart = \ sum_ {n = 0} ^ {N-1} v_n.cos (2 \ pi fn) $$ Esta es la parte de v que es en fase con La señal de estímulo. Obtiene la parte imaginaria, cuadratura, haciendo la misma suma que tiene sustituido con () por cos () como $$ imagpart = \ sum_ {n = 0} ^ {N-1} v_n.sin (2 \ pi fn) $ $ Por supuesto, no es necesario calcular el cos (2pifn) al hacer las sumas, ¡se reduce a indexar a través de su forma de onda una muestra a la vez!

En C, el algoritmo es

float* v_ptr = v_buffer;  
float* real_ptr = &cos_table[0];  
float* imag_ptr = &cos_table[OFFSET_FOR_SINE_START];  
float real_sum=0, imag_sum=0;  
for (i=0; i<N; i++){  
    real_sum += *real_ptr++ * *v_ptr;  
    imag_sum += *imag_ptr++ * *v_ptr++;
}

Como detalle, lo anterior asume que cos_table es lo suficientemente largo como para que el seno pueda indexarlo hasta el final después de comenzar un ciclo de 1/4. Tendría que hacer algo complicado si solo fuera N largo.

Como este cálculo es exactamente el mismo, a esa frecuencia, que la FFT hace en todas las frecuencias, está sujeto a las mismas limitaciones de periodicidad. Eso significa que si su forma de onda no es periódica en la longitud N del vector de análisis que eligió, los resultados de la convolución serán inexactos. En la FFT esto se manifiesta como 'fuga espectral'.

Al igual que en la FFT, hay dos soluciones para esto. El primero es asegurarse de que su forma de onda de muestra N siempre contiene un número entero de ciclos. ¡Esto es fácil cuando estás generando tu propia forma de onda! Cuando la señal no está bajo su control, el uso de ventanas generalmente se usa antes de la FFT para reducir las fugas espectrales.

    
respondido por el Neil_UK

Lea otras preguntas en las etiquetas