Joint Sound processing

A project log for OrthoSense

OrthoSense is a wearable multi-sensory knee sleeve to monitor the progression of Osteoarthritis.

Vignesh RavichandranVignesh Ravichandran 09/02/2017 at 09:353 Comments

Acoustical emissions have been used as a means to detect failures or damages in materials. It is often used in analyzing structures like bridges, flight wings and other vital structures. The bone itself consists mainly of collagen fibres and an inorganic bone mineral in the form of small crystals. In vivo bone (living bone in the body) contains between 10% and 20% water. Of its dry mass, approximately 60-70% is bone mineral. Doctors frequently use stethescopes to detect many ailments in lungs, heart and including bone damage.    

Vibroarthographic (VAG) signals emitted from the knee joint disorder provides an early diagnostic tool. Analysis of the knee sounds can provide a deeper insight into the condition of the joint bone condition along with the cartilage status between the knee. It can allow detection of complications and avoid inflammations at a later stage. During the active movements of the legs such as the flexion and extension, the vibration or auditory signals emits from the mid-patella section of the knee. Healthy cartilage is smooth and slippery producing minimum vibration while deteriorated cartilage is more irregular producing additional vibrations which can be audible in some cases. Vibrations generated by the friction of deteriorated articular surfaces are different in terms of frequency and amplitude compared to healthy ones, originating distinct VAG signals. 

                      (Fig: VAG signals in healthy knee and arthritis knee, Feature extraction of VAG )

High sensitivity contact microphones and directional electret microphones placed in the medial joint line can pick up the joint clicks and crackling sounds 

                                                (Fig: Position of the sensor)

Osteoarthritic knees produce more frequent, higher peak, and longer duration acoustic emissions compared to healthy knees The contact microphone currently being evaluated in CM-01B PVDF contact mic and the Knowles BU-23842-000.

I got the CM-01B contact mic for the starting test. I used the normal analogRead function on the teensy 3.2 at max speed to see what kinda data I was dealing with and I got this.

The orange spikes mark the clicks as I moved my knee up.

I hooked it up to the Teensy 3.2 due to the amazing audio library Paul has written. I set the filter bandwidth from 50Hz to 3000Hz at start to get some click sounds as I flex my knee. I attached the sensor to my knee with the help of the knee sleeve.  I configured the teensy to behave as a USB audio device (Amazing work Paul! Thanks!), Within no time I was able to connect it to audacity and I was able to record and play back the sounds. 

#include <Audio.h>
#include <Wire.h>
#include <SPI.h>
#include <SerialFlash.h>
// GUItool: begin automatically generated code
AudioAnalyzeFFT1024    myFFT;
// GUItool: begin automatically generated code
AudioInputAnalog         adc1;           //xy=232.0161895751953,102.03934478759766
AudioFilterStateVariable filter1;        //xy=381.01619720458984,139.0393409729004
AudioFilterStateVariable filter2; //xy=510.0161819458008,127.26157188415527
AudioOutputUSB           usb1;           //xy=657.0162696838379,105.03933811187744
AudioConnection          patchCord1(adc1, 0, filter1, 0);
AudioConnection          patchCord2(filter1, 0, filter2, 0);
AudioConnection          patchCord3(filter2, 2, usb1, 0);
AudioConnection          patchCord4(filter2, 2, usb1, 1);
AudioConnection          patchCord5(filter2, 0, myFFT, 0);
// GUItool: end automatically generated code
// GUItool: end automatically generated code
void setup() {                
void loop() {
  float n;
  int i;
  if (myFFT.available()) {
    // each time new FFT data is available
    // print it all to the Arduino Serial Monitor
    Serial.print("FFT: ");
    for (i=0; i<40; i++) {
      n =;
      if (n >= 0.01) {
        Serial.print(" ");
      } else {
        Serial.print("  -  "); // don't print "0.00"


Jean Pierre Le Rouzic wrote 09/17/2017 at 07:08 point

I just saw with horror that I wrote "hundreds of Dollars", I meant "hundreds of thousand Dollars" but for some reasons (doing several things at the same time) I lost the "of thousand" part. I am really sorry for that.

  Are you sure? yes | no

Jean Pierre Le Rouzic wrote 09/02/2017 at 18:27 point

I have worked with many gifted people during my career but I have never see something so ambitious, so well thought and so well implemented.

In a company lab a project achieving what you did here would have lasted several months, used a dedicated team and having a budget in the hundred thousands of Dollars.


(edited to correct the budget amount)

  Are you sure? yes | no

Vignesh Ravichandran wrote 09/17/2017 at 03:42 point

Thanks a lot :) 

It really does mean a lot :D

  Are you sure? yes | no