WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Datensatz reduzieren mit Blockmittel

 

sweety2210
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 09.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 18:23     Titel: Datensatz reduzieren mit Blockmittel
  Antworten mit Zitat      
Hallo ihr Lieben,

ich einer Aufgabe, die ich berechnen soll, wurden Positionsdaten eines Messflugzeuges ermittelt, die von einer Frequenz von 100Hz auf 1 Hz reduziert werden sollen.

Dazu sollen wir einen Funktion zur Berechnung des sogenannten Blockmittels erstellen (kennt das jemand? In Google hab ichs nicht gefunden).

Ich hab das auch probiert, aber es funktioniert nicht.

Code:


function [ Y ] = bm (x,M)

Y=x;

n=length(x)
m=floor(M/100)

for j=1:n/m
    summex=0;  
    for i=1:m
        summex=summex+n*m*(j-1)+i;
    end
    Y(j)=summex/m;
end
end

 


In unserem Fall müsste die Blocklänge ja m=100 sein, oder?

Hab euch mal mein vorliegende Erklärung zum Blockmittel beigefügt.

Vielen Dank schon mal. Wink

Blockmittel.png
 Beschreibung:

Download
 Dateiname:  Blockmittel.png
 Dateigröße:  42.18 KB
 Heruntergeladen:  601 mal
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.08.2013, 18:31     Titel:
  Antworten mit Zitat      
in der aufgabe steht doch was du machen sollst. immer den mittelwert aus 10er blöcken
das geht mit for schleife oder reshape und mean oder auch mit einem gleitenden mittelwert mittels filter.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
sweety2210
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 09.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 18:49     Titel:
  Antworten mit Zitat      
Das in der Aufgabe ist ja nur ein Beispiel. Da ich ja von 100Hz auf 1 Hz kommen muss, muss ich ja 100er Blöcke nehmen.
Ja, ich weiß theoretisch was ich machen muss, weiß aber nicht wie ich das in Matlab umsetze. Ich bin leider ein totaler Anfänger. Sad

Was ist denn an meinem Code falsch?

Ich bekomme zwar keine Fehlermeldung, aber der Datensatz wird trotzdem nicht reduziert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2013, 19:21     Titel:
  Antworten mit Zitat      
Hallo,

du setzt am Anfang Y=x.
In der Schleife überschreibst du die ersten Elemente von Y, die weiteren bleiben aber natürlich erhalten. Du müsstest also nur Y anders vorbelegen, z.B.
Code:


Die Anwendung von mean über Vektorteile wird effizienter sein als das händische Berechnen des Mittelwerts in einer for-Schleife. Allerdings gibt es in der for-Schleife zusätzlich das Problem, dass du in x hineinindizieren müsstest.

Ich würde eine systematische Einarbeitung empfehlen. Für den Anfang z.B. das Durcharbeiten der "Getting Started"-Tutorials:
http://www.mathworks.com/help/matla.....-started-with-matlab.html
Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
sweety2210
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 09.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2013, 19:38     Titel:
  Antworten mit Zitat      
Hi,

danke dir. Hat funktioniert!

Vielen, vielen Dank!

Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
dödel0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.08.2013, 16:51     Titel:
  Antworten mit Zitat      
Hallöchen,

was genau bedeutet denn das "große" M? klein m ist ja die Blocklänge soweit ich das verstanden habe. und wie hast du M definiert?

Liebe Grüße
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 27.08.2013, 17:37     Titel:
  Antworten mit Zitat      
Hallo dödel0815,

Im Code-Beispiel is "M" die Blocklänge.

Nebenbei hier noch eine einfache und effiziente Implementierung:
Code:
x = rand(1, 10000);
m = 10;
blocked_x = sum(reshape(x, m, [])) / m;

Falls das Signal nicht glatt durch m teilbar ist:
Code:
crop = length(x) - mod(length(x), m);
blocked_x = sum(reshape(x(1:crop), m, [])) / m;

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
sweety2210
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 09.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2013, 11:36     Titel:
  Antworten mit Zitat      
Also hier ist meine Variante, die jetzt auch funktioniert.

Code:

function [ Y ] = bm (x,M)

n=length(x);
Y=zeros(floor(n/M),1);

for j=1:n/M
    Y(j)=sum(x((M*(j-1)+1):(M*(j-1)+M)))/M;
end
end
 


Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
dödel0815

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2013, 12:12     Titel:
  Antworten mit Zitat      
Hallo Jan,

danke für deine Antwort.
Also "M" ist die Blocklänge in dem Beispiel auf der Folie, aber nicht in dem Code-Beispiel von sweety2210 oder? was ist dann "m", ich dachte nämlich das wäre die Blocklänge. Mich verwirren nur die zwei verschiedenen m's.

Grüße
 
sweety2210
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 09.08.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2013, 12:26     Titel:
  Antworten mit Zitat      
Vergiss mal das kleine m. Das hab ich am Anfang so gemacht, ist aber unnötig.
M ist die Blocklänge und x der Vektor, der gekürzt werden soll...
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.