Diese Daten sollen jetzt also ohne die Nullen in die Struktur eingelesen werden, wobei limits{1,1} die erste und limits{1,2} die Daten der zweiten Kennlinie sind.
Dann soll jeweils nach der ersten Spalte (Frequenzwerte) aufsteigend in jeder Kennlinie sortiert werden.
Müssen die Kennlinien untereinander nicht auch noch sortiert werden?
Ja das denke ich wäre sinnvoll, denn ich möchte ein gemeinsames Minimum und/oder maximum der beiden(später auch mehreren) Kennlinien plotten!
Somit muss ja die Abfrage bei der Kennlinie mit dem kleinsten Frequenz Wert gestartet werden!
Danke das du mir hilfst!!
Du hattest ja bisher vor, immer 2x- und 2y-Werte in eine Zelle zu speichern. Hat das einen bestimmten Grund? Dürfen dann nur jeweils 4er Päckchen sortiert werden oder so wie oben angegeben, alle Freq.werte einzeln betrachten und sortieren.
Du hattest ja bisher vor, immer 2x- und 2y-Werte in eine Zelle zu speichern.
Das wollte ich deswegen, um die daten1. von 0 zu trennen und um sie später auf x - Werte aller Kennlinien vergleichen zu können um auf die betreffenden Punkte für meine Minimum Kennlinie zu kommen.
Die 0 hatte eigentlich schon eine Berechtigung. denn die kennlinien werden logarithmisch geplottet und dadurch erreiche ich, das ich keine Schrägen in den jeweiligen kennlinien widerfinde!
ob das jetzt 2er oder 4er Päckchen sind ist egal. Das wichtigste ist, das die Sortierung so erfolgt, dass ich später auf relativ unkomplizierte weise meine Minimakennlinie plotten kann!
Ist das Bsp für die erste Kennlinie aus limits nun korrekt, oder muss anders sortiert werden? Also immer nur die Pakate, die durch Null getrennt waren?
% Kennlinien-Daten aus Limits in Struktur laden for i=1:length(limits)
Kennlinie(i).name = ['Limit', num2str(i)];
Kennlinie(i).frequenz = [limits{1,i}(limits{1,i}(:,1)>0,1)];
Kennlinie(i).dbV = [limits{1,i}(limits{1,i}(:,2)>0,2)];
end
% Frequenzwerte jeder Kennlinie aufsteigend sortieren % Anzahl der Kennlinien ermitteln
anzahl_k = length({Kennlinie.name});
for i=1:anzahl_k
[Kennlinie(i).frequenz,index] = sort(Kennlinie(i).frequenz);
% dbV Werte entsprechend der Sortierung der Frequenzen sortieren
Kennlinie(i).dbV = Kennlinie(i).dbV(index);
end
% Kennlinien untereinander nach dem 1. Frequenzwert aufsteigend sortieren for i=1:anzahl_k
min_freq_1(i) = Kennlinie(i).frequenz(1);
end % erste Frequenzwerte sortieren [freq_1_sort,list_sort_kennlinien] = sort(min_freq_1);
% in list_sort_kennlinien steht nun die Reihenfolge der sortierten % Kennlinien. So muss nicht die komplette Struktur umsortiert werden
oh Gott ja stimmt, das berühmte sprichwort mit den Wald und den Bäumen!
Naja, die daten die du sortiert hast entsprechen ja zwei verschiedenen Kennlinien. Mein Hauptziel ist es ja immer das X-y- Wertepaar der entsprechenden Kennlinie zu plotten, das kleiner als das andere ist!
Das verstehe ich leider auch nicht...ich habe dir zwar Teile des Programms geschrieben, aber deine Gedanken kann ich dennoch nicht lesen, noch habe ich einen Überblick über deine Daten und deine Vorstellungen. Da musst du schon präziser werden.
Damit erstellst du jetzt die Gesamtkennlinie: Wie ich dich verstanden habe, stören dich aber die Schrägen. Es dürften also immer nur Punkte verbunden werden, die den gleichen Y-Wert haben.
Code:
% Kennlinien laden und sortieren [Kennlinie,list_sort_kennlinien] = load_and_sort(limits);
% Anzahl der Kennlinien ermitteln
anzahl_k = length({Kennlinie.name});
% Freq.-Minima jeder Kennlinie ab K2 ermitteln for i=2:anzahl_k
minima_x(i-1) = min(Kennlinie(list_sort_kennlinien(i)).frequenz);
end
% gesamte Kennlinie erstellen
m = 1; % aktueller Index der n+1. Kennlinie
l = 1; % l = gibt den aktuellen Index von K gesamt an for n = 1:length(minima_x) iflength(Kennlinie(list_sort_kennlinien(n+1)).frequenz) < length(Kennlinie(list_sort_kennlinien(n)).frequenz)
k = length(Kennlinie(list_sort_kennlinien(n+1)).frequenz);
else
k = length(Kennlinie(list_sort_kennlinien(n)).frequenz);
end for i = 1:k
% i. Frequenzwert der n. Kennlinie kleiner n. minimum? if Kennlinie(list_sort_kennlinien(n)).frequenz(i) <= minima_x(n) % ja...Werte der n. Kennlinie nehmen
Kennlinie(anzahl_k+1).frequenz(l) = Kennlinie(list_sort_kennlinien(n)).frequenz(i);
Kennlinie(anzahl_k+1).dbV(l) = Kennlinie(list_sort_kennlinien(n)).dbV(i);
else % Werte von der nächsten Kennlinie (n+1) nehmen
Kennlinie(anzahl_k+1).frequenz(l) = Kennlinie(list_sort_kennlinien(n+1)).frequenz(m);
Kennlinie(anzahl_k+1).dbV(l) = Kennlinie(list_sort_kennlinien(n+1)).dbV(m);
m = m + 1;
end
l = l + 1;
end % aktuellen Index von K gesamt in l speichern
l = l + m - 1;
j = m; % j wird für den Rest benötigt
m = 1; % nächste Kennlinie: m zurücksetzen end % Rest von letzter Kennlinie anhängen
Kennlinie(anzahl_k+1).frequenz(l:l + length(Kennlinie(list_sort_kennlinien(anzahl_k)).frequenz) - j) = Kennlinie(list_sort_kennlinien(anzahl_k)).frequenz(j:end);
Kennlinie(anzahl_k+1).dbV(l:l + length(Kennlinie(list_sort_kennlinien(anzahl_k)).dbV) - j) = Kennlinie(list_sort_kennlinien(anzahl_k)).dbV(j:end);
semilogx(Kennlinie(list_sort_kennlinien(1)).frequenz .*10^6, Kennlinie(list_sort_kennlinien(1)).dbV,'b*-','LineWidth',2);
hold on
semilogx(Kennlinie(list_sort_kennlinien(2)).frequenz .*10^6, Kennlinie(list_sort_kennlinien(2)).dbV,'r*-','LineWidth',2);
semilogx(Kennlinie(3).frequenz .*10^6,Kennlinie(3).dbV,'g.-','LineWidth',2);
hold off;
grid on;
%axis([0.9*min(Kennlinie(1).frequenz)1.1*max(Kennlinie(3).frequenz)4855]);
xlabel('Frequenz in [MHz]');
ylabel('Magnitude in [dBµV]');
legend('K1','K2','K3','K gesamt')
Hey
das geht schon in die richtige Richtung, aber wie du gesagt hast kann ich die Schrägen nicht brauchen.
Und ja genau es dürfen nur die punkt verbunden werden mit gleichen y-Werten.
Tut mir leid wegen der schlechten Beschreibung, aber du hast es trotzdem richtig verstanden.
Mich ärgert mittlerweile sehr stark, dass ich es programmiertechnisch nicht umsetzten konnte und du hast es jetzt auf ein paar Stunden geschafft! Ich glaube ich lass des programmieren jetzt dann bleiben!!
Geschafft habe ich es noch längst nicht....es geht nämlich nicht so wie die ursprüngliche Version. Eigentlich muss die Gesamt-Kennlinie ja komplett aus der blauen K. bestehen und dann nur ein Rest der roten K. Schau dir mal mein Ergebnis an.
Jeder hat mal klein angefangen...ich würde gegenüber einem echten Matlabprofi oder einem Informatiker auch alt aussehen
Der eine rätselt gern oder spielt Sudoku...ich knobbel gern bei Programmen. Aber da braucht es oft Geduld bzw. mehrere Ansätz bis es geht. Ist bei mir nicht anders
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.