Wie der Herzschlag klingt: Konvertieren des Papierkardiogramms in das WAV-Format


Viele Male musste eine Herzuntersuchung in medizinischen Einrichtungen mit einem Kardiographen durchgeführt werden. Dieses Gerät misst die bioelektrische Aktivität des Herzens und zeichnet das Ergebnis auf einem Papierband auf. Moderne Kardiographen zeichnen das Messergebnis nicht auf Papier, sondern im digitalen Speicher auf. Papierband wird jedoch häufig als endgültiges Medium für aufgezeichnete Informationen verwendet. Optisch handelt es sich um ein langes Millimeterpapier von geringer Breite, das zu einer Rolle verdreht wird. Auf dem Papier wird zusätzlich zum Millimetergitter ein bestimmter Graph in voller Länge gezeichnet, der das Gesetz der zeitlichen Änderung des Messwerts widerspiegelt. Der gemessene Wert ist nach meinem Verständnis die Potentialdifferenz zwischen den Leitungen. In den meisten Fällen werden mehrere Diagramme gleichzeitig auf einem Band angezeigt, da potenzielle Unterschiede zwischen mehreren Ableitungen aufgezeichnet werden. Ohne jedoch auf die Details der Medizin einzugehen, werden wir in Zukunft einen der ersten Hauptpläne betrachten. Zusätzlich zu den Grafiken enthält das Band zusätzliche Textinformationen: horizontale Skala (mm / s), vertikale (mm / mV), gemessene Herzfrequenz (bpm) und mehr.

Es gab die Idee, dieses Diagramm in ein Soundformat zu konvertieren, das Ergebnis zu reproduzieren und zu hören, wie es sich anhört.

Nach vorläufiger Analyse können wir schließen, dass die Frequenzzusammensetzung einer solchen Welle nicht sehr gesättigt ist. Tatsächlich handelt es sich hierbei um niedrige Frequenzen, einschließlich Infraschall, der als unhörbar angesehen wird. Es wird jedoch möglich sein zu sehen, wie der Tieftönerkonus Schwingungen wiederholt, die den „Schwingungen“ des Herzens ähnlich sind. Aufgrund des Vorhandenseins kapazitiver Differenzierungsschaltungen auf dem Signalausbreitungspfad von der PC-Soundkarte zum Bassverstärker wiederholen die Vibrationen des dynamischen Kopfes die auf dem Kardiogramm dargestellten Vibrationen nicht genau. Und dies setzt voraus, dass Filter, die extrem niedrige Frequenzen abschneiden, nirgendwo installiert werden. Darüber hinaus treten nichtlineare Verzerrungen auf, die von mehreren hochfrequenten Harmonischen begleitet werden. Unter Berücksichtigung der obigen Analyse stellen wir das Problem jedoch wie folgt dar: Konvertieren Sie das Diagramm auf Papier in das WAV-Format, sodass beim Öffnen dieser Datei in einem Soundeditor die Wellenform der Papierversion entspricht und darüber hinaus der Zeitskala entspricht.

Zuerst müssen Sie die Quantisierungstiefe (die Auflösung von digitalem Audio vertikal) schätzen. Ich betrachte einen der Standards: 8 oder 16 Bit. Die zweite Option (16 Bit) sind 65536 vertikale Abtastwerte, die 65536 Pixel des Bildes entsprechen, bei dem es sich um einen Scan oder ein Foto eines Kardiogramms handelt. Das ist viel und macht keinen Sinn. Wenn Sie 8 Bit nehmen, sind dies 256 Samples oder 256 Pixel des Bildes. Dies ist nun eine geeignetere Option. In diesem Fall beträgt der Dynamikbereich des Audios 6 * 8 = 48 dB. Ich weiß nicht, welchen Dynamikbereich das Kardiogramm hat, aber ich denke nicht mehr. Das Gerät selbst ist natürlich größer, aber beim Anzeigen eines Kardiogramms auf Papier ist ein Fehler unvermeidlich, insbesondere beim direkten Zeichnen mit einem Stift. Übrigens über Letzteres. Ich werde alte Muster, die mit einem „radialen“ Stift gezeichnet wurden, nicht berücksichtigen. Das Millimeter-Papierband für solche Kardiogramme ist spezifisch: Es werden vertikale Bögen anstelle von geraden Linien gezeichnet. Die horizontale Skala - die Abtastrate - wird anhand der Skala des Kardiogramms und der Bildgröße berechnet. Die Wiedergabegeschwindigkeit hängt von diesem Parameter ab und sollte der tatsächlichen „Kardiogrammgeschwindigkeit“ entsprechen.

Kardiogrammpapier sollte s / w mit Graustufen in ausreichender Auflösung gescannt werden. Anschließend müssen Sie die Größe des Bilds so ändern, dass das gewünschte Kardiogramm in einen Streifen mit einer Breite von 256 Pixel passt. Ich habe im Internet viele Bilder mit Kardiogrammen gefunden. Betrachten Sie als Beispiel zwei davon.



Das erste Bild, könnte man sagen, ist fast fertig. Bildhöhe - 431. Breite - 1023. Eine Welle über die Breite füllt das gesamte Bild vollständig aus. Sie müssen jedoch eine Höhe von 256 belassen und das Bild oben und unten zuschneiden, damit sich die Welle ungefähr in der Mitte befindet.



Die zweite Abbildung zeigt mehrere Kardiogramme gleichzeitig. Nimm den allerersten. Nach dem Zuschneiden erhielten wir ein Bild von 508 mal 61.



Ohne das Bild vertikal zu strecken, erstellen wir ein Bild mit einer Höhe von 256 und füllen den erstellten Bereich mit weißer Leere. Die Welle sollte sich auch ungefähr in der Mitte befinden. Beim Schneiden habe ich die Breite 508 so gewählt, dass möglichst viele ganzzahlige Millimeterzellen übrig bleiben, die auch im Bild sichtbar sind.

Beide Bilder müssen in eine Ansicht konvertiert werden, in der nur ein schwarzes Diagramm auf weißem Hintergrund und sonst nichts sichtbar ist. Dies geschieht auf elementare Weise. Aufgrund der Tatsache, dass das Diagramm viel dicker als das Millimetergitter gezeichnet ist, können Sie im Grafikeditor mit den Einstellungen „Helligkeit, Kontrast, Sättigung“ das gewünschte Ergebnis erzielen. Wenn die perfekte Konvertierung fehlschlägt, muss der überschüssige verbleibende „Müll“ über dem Diagramm mit dem Radiergummi entfernt werden. Alle Bilder müssen im monochromen BMP-Format gespeichert werden. Somit bleiben definitiv nur weiße und schwarze Farben im Bild.

Bevor Sie mit der Beschreibung des Algorithmus zum Konvertieren von Bildern in WAV beginnen, sollten Sie einige der Nuancen angeben, die die Programmierung vereinfachen. Die resultierenden Bilder müssen um 90 Grad gegen den Uhrzeigersinn gedreht werden (die Breite und Höhe des Bildes ändern die Position). Dies ist erforderlich, um den Anfang des Kardiogramms am Anfang der BMP-Datei auszurichten. Es ist bekannt, dass die Farbdaten jedes Pixels in einer BMP-Datei ausgehend von der unteren linken Ecke zeilenweise in die Datei geschrieben werden. Dann müssen Sie die Bilder im Editor „MS Paint“ (ich habe Windows XP) öffnen und in 8-Bit-BMP (256 Farben) speichern. Natürlich wird es eine "Neudefinition von Informationen" geben, aber bei diesem Format entspricht jedes Pixel im Bild einem Byte, was beim Programmieren sehr praktisch ist. Byte "0" ist ein schwarzes Pixel und Byte "255" ist weiß. Das Ergebnis sollte ungefähr so ​​aussehen (hier sind zwei Bilder verbunden und halbiert).



Das Ausgabeformat wird nicht in eine Standard-WAV-Datei, sondern in eine RAW-Datendatei (PCM) ausgegeben. Dies vereinfacht auch die Programmierung, da Sie bei der Ausgabe an WAV immer noch auf den 44-Byte-Header achten müssen. Im allgemeinen Audio-Editor Adobe Audition 1.5 wird die PCM-Datei problemlos geöffnet. Darüber hinaus können Sie sogar Dezimalzahlen von PCM-Daten in eine Spalte in einer Textdatei ausgeben, die zuvor einen bestimmten Textkopf gebildet hat. Seltsamerweise werden solche Dateien aber auch von Adobe Audition geöffnet.

Wir beschreiben den Transformationsalgorithmus. Und der Algorithmus ist sehr einfach: Sie müssen jede Zeile der BMP-Datei von unten nach oben analysieren. Die Analyse besteht aus dem Zählen der weißen Pixel von links nach rechts in einer Reihe, bis Schwarz auftritt. Die erhaltenen ganzzahligen nicht negativen Werte müssen in binärer Form in die Ausgabe-PCM-Datei geschrieben werden. Die Größe der Ausgabedatei entspricht genau der Höhe des verarbeiteten Bildes. Die Quantisierungstiefe von 8 Bit des PCM-Audiodatenformats impliziert die Codierung von Samples nach dem gleichen Prinzip. Der Wert „0“ ist der maximale negative Wert des Audio-Samples, der Wert „255“ ist der maximale positive Wert und „128“ ist der Nullwert (in der Mitte). Beispielsweise enthält eine PCM-Datei mit Stille-Audiodaten dieselben Bytes mit dem Wert "128". Es ist erwähnenswert, dass eine Zeile abhängig von der Dicke der Linie des Kardiogramms mehrere aufeinanderfolgende schwarze Pixel enthalten kann. Der beschriebene Algorithmus „fängt“ jedoch die obere Hüllkurve, was ausreicht. Darüber hinaus werden die scharfen Spitzen des nach oben gerichteten Kardiogramms auf diese Weise besser erfasst.

Jetzt können Sie mit dem Schreiben des Programmtextes beginnen. Das in C geschriebene Programm ist sehr einfach und benötigt keine detaillierten Kommentare.

#include <stdio.h> // ,  ; int main(){ //  ; FILE *in,*out; //   ; unsigned long int h,i; //    ; unsigned char px,s; //     ; in=fopen("1.bmp","rb"); //   ; out=fopen("1.pcm","wb"); //   ; fseek(in,22,SEEK_SET); //    ,     fread(&h,4,1,in); //   (4 ); for(i=0;i<h;i++){ // -   ; fseek(in,0x436+i*256,SEEK_SET); //   i-  s=0; //  ( ); do{ //  ; fread(&px,1,1,in); //  ; s+=1; //   ; }while(px); // ,     ; fwrite(&s,1,1,out); //     ; } fclose(in); //  ; fclose(out); //  ; return 0; //  ; } 


Nachdem das Programm in der Datei "1.bmp" ausgeführt wurde, wird die Datei "1.pcm" im selben Verzeichnis wie das Programm erstellt. Wenn Sie versuchen, eine Datei in Adobe Audition zu öffnen, sollte das folgende Fenster angezeigt werden.



Sie müssen "Mono", "8-Bit" auswählen und die Abtastfrequenz im Eingabefeld basierend auf der Berechnung drucken: f = h / (s / v), wobei h die Höhe des Bildes ist (es ist auch die Anzahl der Abtastungen im Audio), s - die Länge des Kardiogramms in Millimetern, v ist die Skala des Kardiogramms in mm / s. Der letzte Parameter wird in das Kardiogramm geschrieben. Auf dem ersten Kardiogramm ist nichts geschrieben, aber der Maßstab beträgt in der Regel oft 25 mm / s. Die Berechnung der Abtastraten in Excel für unsere Beispiele ist in der folgenden Abbildung dargestellt.



Wie oben erwähnt, geben wir die erforderlichen Werte der Abtastfrequenzen für jedes der Beispiele in das entsprechende Feld ein. Sie können sogar Dezimalstellen eingeben, dann erfolgt eine automatische Rundung auf das nächste Ganze.



Durch Klicken auf "OK" stimmen wir zu, dass wir mit "unsigned 8 bit" Samples arbeiten (es wird ein weiteres Fenster geben), wonach die Wellenform unserer Datei im Hauptfeld des Soundeditors erweitert wird. Beachten Sie, dass diese Ansicht „verkehrt herum“ angezeigt wird. Um die Papierversion vollständig zu erfüllen, sollten Sie die Welle im entsprechenden Menü umkehren. Infolgedessen wird es so aussehen.



Das zweite Kardiogramm sieht "leiser" aus, da es ursprünglich nicht sehr groß war.



Leider können Sie nicht auf allen Soundkarten Audio mit einer beliebigen Abtastfrequenz abspielen, genauer gesagt, die überwiegende Mehrheit weiß nicht wie. Um die Datei korrekt abzuspielen, müssen Sie die Funktion "Sample-Typ konvertieren" ausführen. Wir werden auf den nächsten Standardwert von 8000 Hz konvertieren und gleichzeitig die Auflösung in der Amplitude auf 16 Bit erhöhen. Letzteres ist für die Genauigkeit im Stadium der Interpolation während des Upsamplings erforderlich. Wenn Sie 8 Bits belassen, wird der verbleibende Bereich des Spektrums mit Quantisierungsrauschen gefüllt. Übrigens könnte dieses Verfahren in der BMP-PCM-Konvertierungsphase programmgesteuert durchgeführt werden, sogar unter Verwendung von Interpolation. Eines der Ziele war jedoch die Einfachheit des Programmcodes.

Nach dem Upsampling-Vorgang können Sie das Ergebnis anhören und genießen. Sie können das Ergebnis in einer Standard-WAV- oder MP3-Datei speichern. Es klingt genau so, wie ich es ursprünglich erwartet hatte.

Über diesen Link können Sie das rar-Archiv herunterladen, das zwei WAV-Dateien mit dem Ergebnis enthält.

Source: https://habr.com/ru/post/de419527/


All Articles