Matlab 'hjälp'
Matlab 'hjälp'
Eftersom det verkar finnas mycket kunskap om det mesta på detta forum provar jag att fråga efter lite Matlab-support
Försöker göra en program i Matlab som styr ett mätinstrument (spektrumanalysator) via ett GPIB interface. Det funkar fint att styra instrumentet.
Använder mig av funktionen 'query' för att läsa ut mätdatat från instrumentet. Problemet är bara att matlab läser in all data som en textsträng och inte som numerisk dataarray eller en textarray.
Nån som vet hur man gör om datat sådet går att plotta
Försöker göra en program i Matlab som styr ett mätinstrument (spektrumanalysator) via ett GPIB interface. Det funkar fint att styra instrumentet.
Använder mig av funktionen 'query' för att läsa ut mätdatat från instrumentet. Problemet är bara att matlab läser in all data som en textsträng och inte som numerisk dataarray eller en textarray.
Nån som vet hur man gör om datat sådet går att plotta
Re: Matlab 'hjälp'
Lätt fixat med str2num eller str2double!
Kod: Markera allt
s = query(gpibObject, 'READ?');
x = str2double(s);
Re: Matlab 'hjälp'
Får inte funktionen 'str2double()' att fungera här. Matlab svarar 'NaN'
Textsträngen som returneras från instrumentet innehåller alltså många mätdata. Klipper jag ut en bit ser det ut så här:
'-99.24,-99.99,-73.03,-72.88,-99.99,-73.05',-70.03 osv
Datat är inte uppdelat i celler utan ligger som text i en cell.
Textsträngen som returneras från instrumentet innehåller alltså många mätdata. Klipper jag ut en bit ser det ut så här:
'-99.24,-99.99,-73.03,-72.88,-99.99,-73.05',-70.03 osv
Datat är inte uppdelat i celler utan ligger som text i en cell.
Re: Matlab 'hjälp'
Är sista fnutten felplacerad eller hur menar du annars? Ingår fnuttarna i strängen?
Provade du str2num?
Provade du str2num?
Kod: Markera allt
>> s = '-99.24,-99.99,-73.03,-72.88,-99.99,-73.05'
s =
-99.24,-99.99,-73.03,-72.88,-99.99,-73.05
>> str2num(s)
ans =
-99.2400 -99.9900 -73.0300 -72.8800 -99.9900 -73.0500
>> whos
Name Size Bytes Class Attributes
ans 1x6 48 double
s 1x41 82 char
Re: Matlab 'hjälp'
En ny fundering/problem.
Får en textsträng returnerad från instrumentet med diverse information jag skulle behöva använda, ser ut så här:
CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM
Skulle behöva använda mig av siffervärdena från denna sträng men hur gör man på enklaste sett?
Får en textsträng returnerad från instrumentet med diverse information jag skulle behöva använda, ser ut så här:
CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM
Skulle behöva använda mig av siffervärdena från denna sträng men hur gör man på enklaste sett?
Re: Matlab 'hjälp'
Googla på orden "matlab split string" så finner du lösningen på ditt problem. Alternativt plockar du fram manualen och läser om funktionen textscan.
Re: Matlab 'hjälp'
Eller quick 'n' dirty, bara strunta i alla tecken som inte kan ingå i en vektor med tal. t.exObservera att du då får med -20 från LEV-20.
Kod: Markera allt
>> s = 'CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM'
s =
CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM
>> str2num(s(s>='0' & s<='9' | s == ' ' | s == '.' | s == '-'))
ans =
844.7000 50.0000 1.0000 -20.0000 1.0000 5.0000
Re: Matlab 'hjälp'
Textscan kan också funka.
Kod: Markera allt
>> str=('CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM')
str =
CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM
>> textscan(str, '%s %s %f32 %s %d8 %s %d8 %s %s %d8 %s %d8 %s')
ans =
Columns 1 through 9
{1x1 cell} {1x1 cell} [844.7000] {1x1 cell} [50] {1x1 cell} [1] {1x1 cell} {1x1 cell}
Columns 10 through 13
[1] {1x1 cell} [5] {1x1 cell}
Re: Matlab 'hjälp'
snigelen skrev:Eller quick 'n' dirty, bara strunta i alla tecken som inte kan ingå i en vektor med tal. t.exObservera att du då får med -20 från LEV-20.Kod: Markera allt
>> s = 'CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM' s = CTR WL 844.7,SPAN 50.0,RESOLN 1.0,REF LEV-20,AVR 1,LSCL 5.0,NORM >> str2num(s(s>='0' & s<='9' | s == ' ' | s == '.' | s == '-')) ans = 844.7000 50.0000 1.0000 -20.0000 1.0000 5.0000
Tack, det var en enkel o bra lösning.
Re: Matlab 'hjälp'
Ett nytt huvudbry har dykt upp.
Använder mig av "UIGETFILE" för att öppna till ex. en textfil och "load" för att hämta filen vilket funkar bra.
Ex.
[FILENAME, PATHNAME, FILTERINDEX] = UIGETFILE('*.*', 'Load file');
load (fullfile(PATHNAME,FILENAME));
Problemet är bara att nät jag ska använda mig av filen i "FILENAME" så har den en filändelse se nedan.
Ex.
FILENAME=data1.txt
Fråga hur gör jag på ett 'snyggt' och enkelt sätt för att ta bort filändelsen så jag kan använda datat i "data1.txt"
gjorde en fullösning med att döpa om filen enl. nedan men det borde finnas nått bättre sätt.
Ex.
filnamn=load (fullfile(PATHNAME,FILENAME));
Använder mig av "UIGETFILE" för att öppna till ex. en textfil och "load" för att hämta filen vilket funkar bra.
Ex.
[FILENAME, PATHNAME, FILTERINDEX] = UIGETFILE('*.*', 'Load file');
load (fullfile(PATHNAME,FILENAME));
Problemet är bara att nät jag ska använda mig av filen i "FILENAME" så har den en filändelse se nedan.
Ex.
FILENAME=data1.txt
Fråga hur gör jag på ett 'snyggt' och enkelt sätt för att ta bort filändelsen så jag kan använda datat i "data1.txt"
gjorde en fullösning med att döpa om filen enl. nedan men det borde finnas nått bättre sätt.
Ex.
filnamn=load (fullfile(PATHNAME,FILENAME));
Re: Matlab 'hjälp'
T.ex.men det funkar inte om det finns mer än en punkt. tar bort allt från första punkten till slutet (med max blir det från sista punkten). Finns det ingen punkt så händer inget med s.
Kod: Markera allt
>> s = 'filename.txt'
s =
filename.txt
>> s(find(s=='.'):end)=[]
s =
filename
Kod: Markera allt
>> s = 'filename.txt'
s =
filename.txt
>> s(min(find(s=='.')):end)=[]
s =
filename