filtrera importerad fil i Matlab

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

filtrera importerad fil i Matlab

Inlägg av fatpo83 »

Jag har nu lyckats komma igång med Matlab som skall användas till att analysera loggad data. Jag har ritat några grafert och dyl till att börja med.

Men jag märkte att logg-filen innehöll "sk*t"data, dvs. vissa siffror har bytts ut mot tecken som %,(,&,: osv. Säkerligen beror det på att jag inte kontroller om erhållit värde från COM porten är rätt, och hyperterminalen sparar ju allt som kommer till porten så...

Det skulle vara bra om man kunde ignorera dessa värden i matlab. Finns det något smidigt sätt? Jag kanske måste gå genom varje rad i filen och jämföra om det är en tal eller inte? Dock måste noteras att filen kommer att innållan flera 100k rader, är det nåt problem för Matlab?

För övrigt skickar PICen 10bitar till PCn.
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

du kan använda en texteditor med ersätt-funktion ...

jag skulle först kolla om serieporten verkligen tar emot rätt data, det ska ju inte bli några fel alls
Användarvisningsbild
simon78
Inlägg: 1091
Blev medlem: 8 juni 2004, 11:05:51
Ort: Vinninga/Lidköping
Kontakt:

Inlägg av simon78 »

om du kör windows installera cygwin. Sen kan du använda grep från matlab, typ

!grep -v [0-9] <felfil.txt >rättfil.txt

typ...
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

enklast skulle nog vara att skriva ett scrip som tar bort alla skräpvärden, alt ett litet console-baserat c++ program..
eller som strombom säger att se till att bara giltliga värden sparas.
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Nu har jag skrivit ihop lite matlabkod som delvis fungerar:

Kod: Markera allt

clear all;
global arrays;
fid=fopen('fil.dat');
for i=1:100
    tline = fgetl(fid);
    if ~ischar(tline)
        break
    end
    if str2num(tline)
        arrays(i)=str2num(tline);
    else 
        i=i-1;
    end
end
fclose(fid);
arrays
Problemet är att den rad i filen som inte är ett "tal" inte ska skrivas i arrayen. Det skrivs inte heller men jag får '0' i den positionen. Jag har försökt minska 'i' med 1 men det hjälper inte, jag får fft '0'!

Exempel: Filen innehåller: "12,124,a12,012"
Jag får: "12,124,0,012"

Jag vill alltså få: "12,124,012"[/b]
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Re: filtrera importerad fil i Matlab

Inlägg av Kaggen »

fatpo83: "Men jag märkte att logg-filen innehöll "sk*t"data, dvs. vissa siffror har bytts ut mot tecken som %,(,&,: osv. Säkerligen beror det på att jag inte kontroller om erhållit värde från COM porten är rätt, och hyperterminalen sparar ju allt som kommer till porten så..."

Jag skulle nog vara supspekt inställd till alla värden (även till synes normala) om det kommer skräptecken emellanåt. Iaf om jag inte har full koll på vad det är för något "skräp".

fatpo83: "För övrigt skickar PICen 10bitar till PCn."

Hur kopplar du samman dessa värden då? Normalt får du ju in 8:a bitar per byte från serieporten. Skickas 10bitar in så hamnar väl de två sista i nästa byte (om inte du har nån specialhårdvarulösning). Detta skulle isåfall förklara "skräptecknen". Fast om dina värden skickas som ASCII-tecken och inte binärt så håller inte den teorin.

Mats
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Kaggen jag samplar 10bitar men allt skickas som ASCII och tecken för tecken. Efter att ha skickat samplat värde görs en radbrytning. Värdet i sin helthet kan alltså innehålla "A123" eller "2&/9" etc. you get the point...
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

fatpo83 skrev:
Exempel: Filen innehåller: "12,124,a12,012"
Jag får: "12,124,0,012"

Jag vill alltså få: "12,124,012"[/b]
jag skulle lösa det på följande vis:

Kod: Markera allt

arrays=arrays(find(arrays));
Lägg in ovanstående rad sist i din kod.
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Nu får jag meddelandet "Not enough memory to read file contents". Filen är ca 2 meg och innehåller säkert minst 100k värden. Kan nån hjälpa mig??!?

MicaelKarlsson hur skulle du lösa mitt problem i Matlab? Jag menar, matlab borde ju greja det här....
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Kan du skicka en exempelfil samt info om vad du vill få ut så kan jag göra ett försök.
E-post: micael.karlsson(at)home.se
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Tjenare micke,

jag har löst problemet. Grejen är den att värdena i filen innehöll skräpvärden. Och dessa skräpvärden kunde då innehålla vad som helst. Jag la in några test variabler och märkte då att tex. ett värde innehöll ",", ".", ";" osv. vilket matlab inte gillar. Det resulterar ju att talet uppfattas som två olika tal, i kolumner och rader. Eftersom min array bara är en dimensionell så klagade matlab på detta.

Tack för alla svar![/b]
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Joo, det har man ju råkat ut för x^y gånger, speciellt en gång när jag skulle läsa in värden från en fil skapad i LabView då blev det sannerligen skräpdata som kom ut :lol:
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

Förresten, har nån testat att koppla ett oscilloskop direkt till Matlab? Det finns väl såna funktioner har jag för mig...har ett digitalt oscilloskop som har en serie-utgång, man borde testa det nån gång :D
Användarvisningsbild
MicaelKarlsson
Inlägg: 4669
Blev medlem: 18 juni 2004, 09:16:07
Ort: Aneby
Kontakt:

Inlägg av MicaelKarlsson »

Låter spännande!

Glöm inte att berätta "alla smaskiga detaljer" :D :D
fatpo83
Inlägg: 282
Blev medlem: 21 april 2004, 22:42:28
Ort: Sthlm

Inlägg av fatpo83 »

En snabb fråga bara Micke,

Hur resulterar med en "range" av en array i matlab? alltså jag vill ha en del utav en array. Typ: array[12 13 14 15 16 17], och jag vill ha från position 2 till 4, alltså 13,14,15...

Det måste väl finnas en sån funktion inbyggd i matlab, eller är det så att man måste göra en egen funktion för det?
Skriv svar