Forum: PC-Programmierung Matlab Vektoren durchsuchen


von Aerodynamiker (Gast)


Lesenswert?

Hallo,
ich habe folgende Aufgabe(mit Matlab):

Ich habe zwei Vektoren, der eine beinhaltet sozusagen die x-Achse, der 
andere die y-Achse. Der eine Vektor hat also die Daten  an einer 
bestimmten Position, die vom anderen Vektor definiert wird.
Als Bsp:

Pos:   1    2    3    4    5    6    7    8    9
V1= [1,1  2,4  3,3  4,8  5,2  6,9  7,1  8,4  9,5] - Position (x-Achse)
V2= [  3    7    5    9    7    3    4    5    2] - entsprechender Wert 
(y-Achse)

jetzt möchte ich einen Teilbereich des V1 Vektors raussuchen und mir die 
Werte des V2 anzeigen.
Als Bsp:
Der Bereich soll von 3 bis 7 gehen:
Ich muss also aus V1 heraussuchen, wann zum ersten mal die 3 kommt (>=3) 
und wann zum letzen Mal etwas kleineres als >7 kommt.
Das wäre hier von Pos 3 bis Pos 7.
Diese beiden Positionen brauche ich um dann auf V2 so zuzugreifen: 
V2(3:7).

Kann mir jemand bitte bei der Syntax helfen?

von Walter T. (nicolas)


Lesenswert?

1
%Pos:   1    2    3    4    5    6    7    8    9
2
V1= [1,1  2,4  3,3  4,8  5,2  6,9  7,1  8,4  9,5] %- Position (x-Achse)
3
V2= [  3    7    5    9    7    3    4    5    2] %- entsprechender Wert 
4
5
V2n = [V2 V2]
6
V2n(1:2:end) = V2;
7
V2n(2:2:end) = V2;
8
9
ott = 1:numel(V1);
10
i1 = ott(V1>3);
11
i1 = i1(1);
12
13
i2 = ott(V1>7);
14
i2 = i2(end);
15
16
plot(V1(i1:i2), V2n(i1:i2))

Wobei ich keine Ahnung habe, was das seltsame Datenformat soll - also 
warum V1 doppelt so viele Elemente wie V2 hat.

Wenn die Kommata Dezimalpunkte sein sollen und beide Vektoren die 
gleiche Anzahl an Elementen haben, kann man sich den Krampf mit V2n 
sparen.

von Aerodynamiker (Gast)


Angehängte Dateien:

Lesenswert?

Danke, habe hinbekommen was ich wollte.

Jetzt habe ich aber noch eine Frage:

Ich habe ein Audiosignal, das wird mit einer FFT analysiert und die 
Frequenzen mit Amplitude werden dargestellt.
Danach mache ich eine Terzbandanalyse.
Die Syntax steht und es läuft auch alles wie gewünscht. Ich bin mir aber 
nicht sicher, ob ich richtig verstanden habe wie eine Terzanalyse 
funktioniert.
Ich integriere das FFT Signal im Bereich der einzelnen Terzbänder und 
nehme dann den maximalen Wert der Integration. Diesen lege ich dann als 
Amplitude der ganzen Terz fest. Ich bekomme also ein Stufensignal über 
die Frequenz. Weil die Terzbänder aber mit steigender Frequenz immer 
breiter werden, ist die Amplitude bei höheren Frequenzen deutlich höher 
als bei niedrigen. Also wenn die hohen Frequenzen wenig Amplitude haben, 
führen sie dennoch zu einer großen Amplitude in der Terzanalyse (wg 
großem Integrationsbereich). Man sieht im angehängten Bild, dass die 
Terzbandanalyse das eigentliche Signal nicht wirklich abbildet.
Ist das so gewollt oder habe ich da was falsch verstanden?
Muss das Signal zuvor A-bewertet werden? (hohe Frequenzen nehmen dann ja 
ab)

Hier der Ausschnitt wie ich die Terzbänder berechne:
terzdaten = xlsread('C:\Terzbaender.xlsx');
zeilen=size(terzdaten);
for i=1:1:zeilen(1)
    minimum=find(gfreq>=terzdaten(i,3),1); % in Spalte 3 steht die 
untere Terzfreqenz
    maximum=find(gfreq> terzdaten(i,4),1); % in Spalte 4 steht die obere 
Terzfrequenz
    integral(minimum:maximum-1)=max(cumtrapz(abs_h(minimum:maximum-1)));
end

von Freddy (Gast)


Lesenswert?

Moin,
ich habe zwar gerade kein Matlab zur Hand, aber guck Dir mal bitte bei 
Matlab die FIND Funktion an. Ich glaube damit sollte das auch ein wenig 
einfacher gehen.

Gruß

von Aerodynamiker (Gast)


Lesenswert?

mit der find Funktion habe ich es gemacht, sieht man im Programmcode, 
den ich bei meinem letzten Post angefügt habe.

Könnte aber noch Hilfe bei der Terzanalyse gebrauchen.

von Aerodynamiker (Gast)


Lesenswert?

hat niemand eine Idee?
Über jede Hilfe wäre ich sehr froh.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.