Real-Time Embedded Programming Project: Heart Rate Measurement
Team 4: Marc Andreas Kleser, Nathalie MajcherczykProject Overview
The aim of the project is to determine heart rate by measuring the varying opacity of tissue containing small blood vessels. The opacity changes with the blood pressure, which changes accordingly during a heart beat cycle. Using the light of a LED and a photo transistor, light is sent through the tissue and detected on the other side. The varying light intensity as a signal contains all information to calculate the heart rate.
Hardware
The project can be realised by making use of the Raspberry Pi. An AD converter needs to be interfaced between the light-sensing circuit and the RPi as it does not have analogue inputs. The AD7705 can be used for this purpose, it is a differential Sigma-Delta AD converter. The PCB design for adding this piece of hardware can be found
here.

The device for data acquisition, i.e. the AD converter is accessed via SPI. In linux, the corresponding device is called /dev/spidev0.0. To set up the SPI communication, the function, setADC() is called once.
Fetching the data is realized by using a timer of 40ms intervals. Inside the timer event, the function read_data() returns the current read value. The data is then saved in a buffer, shifting the old data via the memmove() command. Displaying the data is done by using QT libraries.
The whole project is accessible via github here: http://github.com/NathalieMajcherczyk/RTEPteam4.git
Test Set-up and Results




A measuring attempt for the heart activity resulted in this data. When looking at the largest peaks, a pattern can be identified, that has a plausible frequency. This pattern, although noisy, is clearly distinct from noise only. Further data processing can help to improve the signal quality, as stated further down.
Prospective improvements
a) Hardware
In order to enhance the usability of the device, some further changes have to be applied. Most importantly, the sensor construction should be changed so that the LED and the photo transistor are both held in place on the finger. This can be realized by using some sort of clamp, the simplest way would be to use a peg for this purpose.
Another constructive measure to improve reliability and safety is to insulate the electrical connections. For example, if the connections of the photo transistor are in touch with the skin while measuring heart rate, the resulting data is biased. Furthermore, the insulation is necessary regarding safety reasons. Since there is no electrical decoupling between the sensor circuit and the power supply, there is always a risk of electric shock with open current carrying parts.
b) Software
Regarding the software part, the data processing can be enhanced. By applying real time filtering routines to the received data, the unwanted parts of the signal can be suppressed. This is for example the DC drift, which can be removed by a simple DC filter. Since the environment in which the device is designed to be used is indoors, 50Hz noise has to be taken into account. A bandstop filter should be applied here to get rid of the unwanted frequency, depending on the choice of the data acquisition rate. Since in this case, a sampling frequency of f = 1 / 40ms = 25Hz = 50Hz / 2 is used, the 50 Hz noise counts towards the DC component because of the sampling theorem and is already taken care of by the DC filter.
In order to output the actual heart rate, a matched filter can be used in combination with a peak detector. To realise this, a FIR filter is designed such that its coefficients are the temporally inverted samples that contain one heart beat. The resulting signal contains peaks, which can be detected by an appropriate routine, for example using a threshold and measuring the time between peaks.
http://www.picotech.com/experiments/calculating_heart_rate/