Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
Abschlussarbeit / Praktikum: Entwicklung Matlab (m/w)
Branche: Informationstechnologie, Elektrotechnik, Elektronik
GIGATRONIK Technologies GmbH - Ulm

Werkstudent (m/w) in der MATLAB-Entwicklung
Branche: Luft-, Raumfahrttechnik, Dienstleistungen
univativ GmbH & Co. KG - Hamburg

Praktikant (m/w) Entwicklung Funkpeiltechnik
Branche: Mess-, Regel-, Automatisierungstechnik, Telekommunikation, Nachrichtentechnik
ROHDE & SCHWARZ GmbH & Co. KG - München

Intern (m/f) System development for antenna measurement systems
Branche: Mess-, Regel-, Automatisierungstechnik, Telekommunikation, Nachrichtentechnik
ROHDE & SCHWARZ GmbH & Co. KG - München

Werkstudent/in im Bereich Funktionsentwicklung für Batterie-Management-Systeme
Branche: Fahrzeugtechnik, Fahrzeugteile, Maschinentechnik, Industrietechnik, Luft-, Raumfahrttechnik
Schaeffler Technologies AG & Co. KG - Karlsruhe

weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

parfor funktioniert nicht, andere Programmierung gesucht

 

rollmops94

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 10:39     Titel: parfor funktioniert nicht, andere Programmierung gesucht
  Antworten mit Zitat      
Hallo,

ich habe eine Anwendung, in der ich Signale mit einem Bandpass filtern möchte. Die Signale enthalten aufgenommene Messwerte und sind ca 100Mio bis 200Mio Werte lang.

Ich habe hier einen Beispielcode, der verdeutlichen soll was ich machen muss:

A =[ 1 7 4 8 9 4 4 8 0 2 4 1 7 9 4 9 2 8 4 6 7 3 5 6 0 6 1 3 1 5];
B =[ 1 10 20];

UntereFrequenz = [50 60 70 80 90 100];
ObereFrequenz = [200 210 220 230 240 250];

for i=1:length(UntereFrequenz) %( HIER PARFOR)
BandpassFilter = designfilt('bandpassfir', 'StopbandFrequency1', UntereFrequenz(i)-40, 'PassbandFrequency1', UntereFrequenz(i), 'PassbandFrequency2', ObereFrequenz(i), 'StopbandFrequency2', ObereFrequenz(i)+40, 'StopbandAttenuation1', 60, 'PassbandRipple', 1, 'StopbandAttenuation2', 60, 'SampleRate', 1000);
Agefiltert = filter(BandpassFilter,A);

for j=1:length(B)
bereich = Agefiltert(B(j):30);
Ergebnis(i,j) = sum(bereich);
end
end

In Wirklichkeit handelt es sich natürlich um andere Werte und Berechnungen, aber das hier ist die einfachste Möglichkeit alles darzustellen.

Da das Anwenden der Filter sehr lange dauert, würde ich das gern in einer parfor Schleife machen. Ich meine damit die erste for-Schleife.
Leider geht das nicht, da ich in der zweiten Schleife das Ergebnis mit den Parametern der ersten und zweiten Schleife schreibe.
Ich bekomme diese Fehlermeldung:
"Error: The variable Ergebnis in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview"."

Es ist mir klar, dass es daran liegt, wie ich das Ergebnis schreiben möchte. Aber ich kenne keine andere Möglichkeit, die mir es erlaubt parfor zu verwenden. Kann mir nitte jemand weiterhelfen? Ich hätte gerne einen Tipp, wie man es anders machen kann.

Vielen Dank schon mal!


Harald
Forum-Meister

Forum-Meister


Beiträge: 17.980
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     Beitrag Verfasst am: 25.01.2018, 10:50     Titel:
  Antworten mit Zitat      
Hallo,

hier gibt es Tutorials dazu:
https://www.mathworks.com/videos/se.....ting-tutorials-97719.html
Hier hilft besonders Teil 4.

Oder auch ein kleiner Trick:
Code:
Ergebnis = zeros(length(UntereFrequenz), length(B));
parfor i=1:length(UntereFrequenz) %( HIER PARFOR)
    BandpassFilter = designfilt('bandpassfir', 'StopbandFrequency1', UntereFrequenz(i)-40, 'PassbandFrequency1', UntereFrequenz(i), 'PassbandFrequency2', ObereFrequenz(i), 'StopbandFrequency2', ObereFrequenz(i)+40, 'StopbandAttenuation1', 60, 'PassbandRipple', 1, 'StopbandAttenuation2', 60, 'SampleRate', 1000);
    Agefiltert = filter(BandpassFilter,A);
   
    tmp = zeros(1, length(B));
    for j=1:length(B)
        bereich = Agefiltert(B(j):30);
        tmp(j) = sum(bereich);
    end
    Ergebnis(i, :) = tmp;
end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
rollmops94

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.01.2018, 15:22     Titel:
  Antworten mit Zitat      
Vielen Dank!
Ich werde es sofort ausprobieren. Und das Video schaue ich mir auch an.

Das wird mir viel helfen!
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2018 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.