I was browsing through SciPy documentation this evening and ran across a function in
It’s an actual electrocardiogram, sampled at 360 Hz. Presumably it’s included as convenient example data. Here’s a plot of the first five seconds.
I wrote a little code using it to turn the ECG into an audio file.
from numpy import int16, iinfo from scipy.io.wavfile import write from scipy.misc import electrocardiogram def to_integer(signal): # Take samples in [-1, 1] then scale to 16-bit integers m = iinfo(int16).max M = max(abs(signal)) return int16(signal*m/M) ecg = electrocardiogram() write("heartbeat.wav", 360, to_integer(ecg))
I had to turn the volume way up to hear it, and that made me think of Edgar Allan Poe’s story The Tell-Tale Heart.
I may be doing something wrong. According to the documentation for the
write function, I shouldn’t need to convert the signal to integers. I should just be able to leave the signal as floating point and normalize it to [-1, 1] by dividing by the largest absolute value in the signal. But when I do that, the output file will not play.