Simple RLC meter (Fourier transform part 3)

As an application of the FFT algorithms I present here a simple RLC meter that is able to measure resistors, inductors, capacitors with a reasonable precision. It uses a simple circuit in which a known frequency is sent to a R+Z circuit (where Z could be R, L, C) and then the current and voltage on the Z are measured. The current is indirectly measured by actually measuring the voltage on R. A PC sound card is used to output the test signal on line-out and also to do acquisition of the measurement signals through line-in.

Two frequencies are used, a low one and a high one for cases where Z is too low or to high.

A calibration is performed with DUT (Device Under Test) unplugged. It will measure the impedance of the circuit and use it subsequently to adjust the DUT measurement.

The time domain signals acquired from the sound card are transformed into frequency domain using FFT and so they become complex signals. Then you could do calculus using DC current methods.

Impedance calculation: $u_L[N]$ – time domain channel left $u_R[N]$ – time domain channel right $U_L[N]$ – frequency domain channel left $U_R[N]$ – frequency domain channel right $Z = R\frac{U_L}{U_R - U_L}$

During calibration the program stores $Z_{calib}$ and then on the DUT measurement it will calculate correct impedance with: $Z_{DUT} = \frac{Z_{mes}Z_{calib}}{Z_{calib} - Z_{mes}}$

Note on frequency domain:

FFT will use a number of $N$ points for its calculation which corresponds to maximum frequency of the signal, $N/2$ corresponds to Nyquist frequency. Therefore if the signal has frequency $f$ you could calculate which point corresponds to this frequency: $k = f \frac{N}{r}$, where $r$ is the sampling rate.

Going from complex to real: $\mid Z \mid = \sqrt{Re(Z(k))^2 + Im(Z(k))^2}$ and $tg(\phi) = \frac{Im(Z(k))}{Re(Z(k))}$

Now you could determine whether the DUT is R, L, C based on $tg(\phi)$.

The program runs on Linux with ALSA, alsa-utils, fftw installed.

1. aanev says: