filtrera importerad fil i Matlab
filtrera importerad fil i Matlab
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.
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.
Nu har jag skrivit ihop lite matlabkod som delvis fungerar:
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]
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
Exempel: Filen innehåller: "12,124,a12,012"
Jag får: "12,124,0,012"
Jag vill alltså få: "12,124,012"[/b]
Re: filtrera importerad fil i Matlab
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
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
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
jag skulle lösa det på följande vis: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]
Kod: Markera allt
arrays=arrays(find(arrays));
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
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]
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]
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
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?
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?