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

Filterfunktion nach uigetfile - Aufruf ausführen.

 

simpeldimpel
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2012, 13:57     Titel: Filterfunktion nach uigetfile - Aufruf ausführen.
  Antworten mit Zitat      
Hallo zusammen,

wie im Titel schon beschrieben hab ich ein Problem mit dem Aufrufen von einer Filterfunktion.
Es stehen im Matlab-Verzeichnis verschiedene Filterfunktionen zu Verfügung und über den Befehl uigetfile() soll die entsprechende Filterfunktion die in einem m-File abgespeichert ist ausgewählt werden können.
Das abholen des Funktionsnamens funktioniert ja noch. Ich erhalte dann z.B. den Filternamen : filter_50_Hz_bandstopp.m. Leider ist dieser Filtername in einem Char abgespeichert und ich weiß nicht wie ich jetzt den Filternamen in die Filterfunktion bekomme. Die Filterfunktion lautet ja:

filter(filter_50_Hz_banstopp,'daten');

Meine Frage ist jetzt: Wie bekomme ich aus dem Char in dem 'filter_50_Hz_bandstopp.m' steht das .m entfernt und den Namen in die Filterfunktion eingetragen. Ich komme einfach nicht dahinter.

Code:

[daten,time] = getdata(ai0, datasize);
netzfilter = uigetfile('*.m','Bitte den 50 Hz Netzfilter auswählen');
filter(netzfilter,'daten');
 


Fehlermeldung: ??? Undefined function or method 'filter' for input arguments of type 'char'.

Habe schon versucht über getlength(netzfilter) die länge des Strings herrauszufinden und dann die letzten 2 Zeichen wegzunehmen. Leider funktioniert der Befehl getlength bei einem Char nicht.



Gruß Simpeldimpel
Private Nachricht senden Benutzer-Profile anzeigen


simpeldimpel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.04.2012, 14:16     Titel:
  Antworten mit Zitat      
Ok wie ich das .m wegbekomme habe ich inzwischen rausbekommen. Das funktioniert mit dem regexprep(netzfilter,'\.(.)*','') befehl.

Also neuer Code:

Code:

[daten,time] = getdata(ai0, datasize);
netzfilter = uigetfile('*.m','Bitte den 50 Hz Netzfilter auswählen');
netzfilter_geschnitten = regexprep(netzfilter,'\.(.)*','')
filter(netzfilter_geschnitten,'daten');


Fehlermeldung ist immer noch die selbe.

??? Undefined function or method 'filter' for input arguments of type 'char'.

Nochmal zum verdeutlichen:

Der Befehl filter(50_Hz_filter,'Daten'); funktioniert.
aber wenn ich 50_Hz_filter.m über uigetfile einlese, mit regexprep auf 50_Hz_filter kürze und dann als funktion ausführen will funktioniert es nicht.

Gruß Simpeldimpel
Private Nachricht senden Benutzer-Profile anzeigen
 
simpeldimpel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2012, 10:45     Titel:
  Antworten mit Zitat      
So ich bin wieder ein Schritt weiter gekommen.

Über die Funktion

Code:


lässt sich der String in ein Function-Handle umwandeln. Wendet man dies jedoch auf eine Funktion an:

Code:


[daten,time] = getdata(ai0, datasize);  
netzfilter = uigetfile('*.m','Bitte den 50 Hz Netzfilter auswählen');
netzfilter_geschnitten = regexprep(netzfilter,'\.(.)*','') ;
netzfilter_func = str2func(netzfilter_geschnitten);

filter(netzfilter_func,'daten');  
 


So kommt die Fehlermeldung:

??? Undefined function or method 'filter' for input arguments of type
'function_handle'.


Kennt sich damit jemand aus? Die googel Suche bringt da nichts vernünftiges.

Gruß Simpeldimpel
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 26.04.2012, 11:26     Titel:
  Antworten mit Zitat      
Hallo
du versuchst wohl eigene Filter zu erzeugen und verwenden
Dann solltest du dir FDESIGN oder FILTERBUILDER anschauen.

FILTER braucht einen Filterobjekt keine Funktionhandle
Erzeugt deine Funktion "netzfilter_func" so einen Objekt?
dann sollst du Funktion ausführen und einen Objekt erzeugen.
Code:

netzfilter_geschnitten = regexprep(netzfilter,'\.(.)*','') ;
netzfilter_func = str2func(netzfilter_geschnitten);
filtobj =netzfilter_func()
% warum sind daten als char deklariert, es muss doch ein Double Vektor sein
filter(filtobj, daten )
 



Schaue dir auch FSPECIAL an
Private Nachricht senden Benutzer-Profile anzeigen
 
simpeldimpel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2012, 11:42     Titel:
  Antworten mit Zitat      
Ja so in der Art, aber ich hatte was anderes vor.

Ich habe mir über das fdatool verschiedene Filter generiert und als Matlab Code abgespeichert. Über verschiedene GUI-Oberflächen kann ich jetzt Einstellungen vornehmen, z.B. auf welchen Channel die Analogdaten aufgezeichnet werden sollen, wie lange die Aufzeichnung dauern soll usw..

Darunter soll es dann auch eine Auswahlmöglichkeiten zwischen verschiedenen Filtern geben die schon vordefiniert wurden über das besagte fdatool. Je nach dem welchen filter ich dann auswähle sollen die daten mit diesem gefiltert werden. Bei deinen Vorschlägen muss ich ja den Filter jedes mal neu entwerfen, was nicht der Sin der Sache ist, sondern ich will den entsprechenden Filter einfach nur Abrufen.

Ich habe mir halt vorgestellt, das ganze System offen zu halten, damit wenn ein neuer Filter in das Matlab-Verzeichnis gestellt wird, er automatisch im Suchpfad auftaucht und verwendet werden kann, ohne dass eine Änderung im Matlab-Code vorgenommen werden muss.

Mit deinen Vorschlägen muss ich ja über die Programmieroberfläche von Filtern gehen.

Gruß Simpeldimpel
Private Nachricht senden Benutzer-Profile anzeigen
 
simpeldimpel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 25.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.04.2012, 12:40     Titel:
  Antworten mit Zitat      
So

ich bin jetzt dahintergestiegen wie ich das Problem lösen kann. Es ist eigentlich ganz Simpel. Hier mal der komplette Code für alle die auch das selbe Problem haben.

Code:

[daten,time] = getdata(ai0, datasize);  
netzfilter = uigetfile('*.m','Bitte den 50 Hz Netzfilter auswählen');
netzfilter_geschnitten = regexprep(netzfilter,'\.(.)*','') ;
netzfilter_func = str2func(netzfilter_geschnitten);
netzfilter_parameter = netzfilter_func();  %<-- Diese Zeile ist das Geheimnis!!
filter(netzfilter_parameter,daten);  
 


Das Problem war, das er die Func-Handel in der Filterfunktion nicht mochte. Wenn aber mit
Code:

netzfilter_fertig = netzfilter_func();  
 


die Funktion aufgerufen wird und die berechneten Filterparameter filter_parameter abgespeichert werden, kann ich mit diesen Parametern die Filterfunktion aufrufen!!

@denny
Danke für deine Hilfe, hast mir wirklich sehr weitergeholfen für dieses doch recht schwere Problem. Die Daten lagen ja auch als double vor, hab mich bei diesem Beispiel leider verschrieben Sad.
Das Problem waren die Filterparameter, die ich nicht wie gewohnt in aufrufen konnte da die Funktion als Funktion-Handle vorlag.

@alle
Wirklich tolles Forum hier, macht weiter so.

Gruß Simpeldimpel
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.