Datenanalysefirma !
-
max ermittelst du aus den Headerinformationen:
int max = arrHeader[12] + (arrHeader[13] << 8); max += (arrHeader[14] << 16) + (arrHeader[15] << 24); cout << "Datasets: " << max << endl; int readsize = max * 12 / 8; // bytes an nutzdaten cout << "Readsize: " << readsize << " bytes" << endl; unsigned char * dataInPtr = new unsigned char[readsize]; f.read((char *)dataInPtr, readsize);
So, das sollte nun komplett sein!
Gruß mcr
-
ShadowEater schrieb:
Hi,
@mcr:
Sind die Samplewerte nicht etwas groß:
3f7----3f6-----3f8----3ff-----40c----41d
1015--1014--1016--1023--1036--1053Diese Werte sind Punktpaare X und Y Koordinaten der Punkte die dann die EKG Kurve darstellen, die sind im 1000'er Bereich, ist das nicht etwas groß ?
Vilen Dank
Gruß
ShadowEaterDu, ich habe keine Ahnung, welche Bedeutung diese Zahlen haben.
Sorry, da kann ich dir nicht weiterhelfen.Gruß mcr
PS: vielleicht steht ja in deiner Beschreibung etwas genaueres über die
Einheiten.
-
Hi mcr,
danke für Deine droßartige Hilfe !
In der Beschreibung steht leider nichts, naja, das kann ich vllt. durch ausprobieren herausfinden.Eine frage hätte ich noch :
int max = arrHeader[12] + (arrHeader[13] << 8); max += (arrHeader[14] << 16) + (arrHeader[15] << 24); cout << "Datasets: " << max << endl; int readsize = max * 12 / 8; // bytes an nutzdaten cout << "Readsize: " << readsize << " bytes" << endl; unsigned char * dataInPtr = new unsigned char[readsize]; f.read((char *)dataInPtr, readsize);
wenn ich diese Zeilen einpflege bekomm ich bein kompilieren wieder keine Fehler aber beim ausführen die Feklermeldung dass ein fehler gefunden wurde... an Microsoft sensen... !
Wo muss ich mit den Zeilen hin und was muss raus !
Vielen Dank für Deine Hilfe und Mühe
ShadowEaterP.S.: Wenn Du möchtest halt ich Dich auf dem Laufenden (was die Daten betrifft)
-
Hier die kompletten Files:
ECG_ReadIn_01.h
#include <iostream> #include <fstream> using namespace std; class cEcgReadIn { private: public: unsigned char arrHeader[60]; cEcgReadIn (); ~cEcgReadIn (); unsigned short int *LoadEcg(); }; cEcgReadIn::cEcgReadIn() { } cEcgReadIn::~cEcgReadIn() { } unsigned short int* cEcgReadIn::LoadEcg() { fstream f; f.open("44DBE2AD.ecg",ios::in | ios::binary); if (!f) cout << "Fehler beim oeffnen der Datei...\n"; f.read((char*)arrHeader, 60); int max = arrHeader[12] + (arrHeader[13] << 8); max += (arrHeader[14] << 16) + (arrHeader[15] << 24); cout << "Datasets: " << max << endl; int readsize = max * 12 / 8; // bytes an nutzdaten cout << "Readsize: " << readsize << " bytes" << endl; unsigned char * dataInPtr = new unsigned char[readsize]; f.read((char *)dataInPtr, readsize); unsigned short int * samplBuffer = new unsigned short int [max]; int j = 0; // daten werden separat eingelesen, daher hier die 0 /* for all sampls do */ for (int i = 0; i < max; ++i) { /* if even sampl */ if ((i % 2) == 0) { /* add bit 0 to7 bit to sampl */ samplBuffer [i] = dataInPtr[j++]; /* add bit 8 to 11 bit to sampl */ samplBuffer [i] |= ( dataInPtr[j] & 0x0F ) << 8; } /* if odd sampl */ else { /* add bit 0 to 3 to the sampl */ samplBuffer [i] = ( dataInPtr[j++] & 0xF0 ) >> 4; /* add bit 4 to 11 to the sampl */ samplBuffer [i] |= dataInPtr[j++] << 4; } } cout << "Die ersten 9 eingelesenen Bytes: "; for (int i = 0; i<9; ++i) cout << hex << (int)dataInPtr[i] << " "; cout << endl; cout << "Die ersten 6 Samples: "; for (int i = 0; i<6; ++i) cout << hex << (int) samplBuffer[i] << " "; cout << endl; f.close(); return samplBuffer; }
und AX_ECG_ReadIn_01.cpp
#include <iostream> #include <iomanip> using namespace std; #include "ECG_ReadIn_01.h" int main() { cEcgReadIn EcgRead; unsigned short int *samplearr; samplearr = EcgRead.LoadEcg(); return 0; }
Viel Spaß damit..
Kannst mich gerne auf den Laufenden halten. Es interessiert mich auch,
was da rauskommt.Gruß mcr
-
Hi mcr,
eine Frage hab ich immer noch:samplBuffer [i] |= dataInPtr[j++] << 4;
Ist dies die verkürzte Schreibweise für:
samplBuffer [i] = samplBuffer [i] | dataInPtr[j++] << 4;
Und weshalb muß hier ein e OR und keine AND Verknüpfung durchgeführt werden ?
Ansonsten: GEIL, DAT FUNKTIONIERT!!!!!
http://filehosting.at/images/download.php?file=0ea174f6e6c2c2221a7346753d43034c
Vielen vielen vielen Dank!!!!!ShadowEater
-
1. Ja, das ist diese verkürzte Schreibweise
2. Mit | (or) fügst du Bits hinzu. Mit & (and) schneidest du Bits ab.Beispiel or
101100 010110 -------- 111110
Beispiel and
101100 010110 -------- 000100
Wie hast du dieses Bild erzeugt?
Kannst du mir dazu mal deinen Code schicken?Gruß mcr
-
Hi mcr,
das Bild hab ich mit Excel(OpenOffice)gemacht.
Ja selbstverständlich schick ich Dir die Datei zu, später werd icg die Grafik in einem ChartControl anzeigen (im fertigen Programm).Kannst Du mir Deine MailAdresse irgendwie senden, gibts hier die Möglichkeit einer Pn (Personal Note) oder so ?
Gruß
ShadowEater
-
Hi, hast Post
-
Hi mcr,
Du auch
Gruß
ShadowEater
-
ShadowEater schrieb:
Pn (Personal Note)
*klugscheiß*
Pn = persönliche Nachricht
Pm = personal message
/klugscheiß