Extracting Bio-impedance Parameters from Measured Data

First post of the new year! I figured, I’d start with something interesting.

Over winter break, I went home to the lovely warmth of West Africa, and had an epiphany of sorts as to how to extract the resistive values for intracellular water (ICW), extracellular water (ECW) and the capacitive value for the cell membrane after performing a frequency sweep on biological tissue (or model circuit) of interest.

Upon implementation of my idea, I had very good results. Using Android’s AsyncTask, I’m also able to display the results and plot a resistance – reactance curve of the data near instantaneously. I typically perform a frequency sweep from 2 KHz to 100 KHz, at a step size of 1 KHz where the frequency is incremented at a rathe of 50 Hz. In other words, it takes me 2 seconds to fully characterize the sample I’m working with. If I increase the sampling rate to 90 Hz, that cuts down the time to just under a second. It’s fantastic.

Now the algorithm I’ve modified, and implemented to get these results is something I will keep closely to my chest for the time being, because I think it’s fairly cool, and one doesn’t need to do post analysis in MATLAB as is often the case as I also generate the root mean square error and an R-squared value to go along with the plotted data. The screenshots below are of the app’s interface, detailing raw data, and post-analysis plots.

Tissue visualization

Tissue visualization (from Impedimed)

Model Circuit

Model Circuit

Raw Data Coming in over BLE plotted in Real Time (Model Circuit 1)

Raw Data Coming in over BLE plotted in Real Time (Model Circuit 1)

Measured and fitted data plots. Ri = 1 K, Re = 680, C = 4.7 nF

Measured and fitted data plots. Ri = 1 KΩ, Re = 680 Ω, C = 4.7 nF all values are ± 5%

Raw Data Coming in over BLE plotted in Real Time (Model Circuit 2)

Raw Data Coming in over BLE plotted in Real Time (Model Circuit 2)

Measured and fitted data plots. Ri = 1.3 K, Re = 470, C = 6.8 nF

Measured and fitted data plots. Ri = 1.3 KΩ, Re = 470 Ω, C = 6.8 nF all vales are ± 5%

The AD5933 was calibrated in this run with a 480 Ohm resistor, so the measurements are more accurate for impedances in this realm. Should one want to make the AD5933 more robust, a multiplexer connected to a wider range of calibration resistors should be used.

3 comments

  1. Seems like post was like an year before, but still very interesting. I have on my side Analog Device AD5933 board and get quite frustrated sometime with original evaluation software. Your way using Arduino/BLE to connect /log / process AD5933 measurements seems very interesting. Can you please share more details about hardware setup and firmware/software, if possible? I am quite good with electronics, but BLE/Android is new for me. Thanks in advance.

    1. Hello Dimitar, I will. I’m currently in the process of rewriting the Android app, as the current version on Github has some bugs and memory leaks I wasn’t aware of at the time.

      The Arduino sketch used with the AD5933 and the old Android app are available at this Github repo: https://github.com/WuMRC/drive

      1. Thanks for the fast answer, yes I found proect on Github and going to read a bit 🙂
        My idea was to start serial communication via standard Arduino Uno, and have some type of parser/logger to PC (in VB, Matlab, etc.) and next step will be using RedbearLab BLE board which should be Ardiuno compatible. Will follow the blog for news.

Leave a comment