2017-03-03 5 views
0

Ich verwende den Digitalfilter mit Eigenschaften in MATLAB. Ich habe diesen Filter mit designfilt entworfen. Ich habe das Filterobjekt filt (1) definiert als:Matlab, Fehler beim Versuch, ein Filterobjekt zu implementieren

digitalFilter with properties: 
      Coefficients: [20x6 double] 
    Specifications: 
     FrequencyResponse: 'bandpass' 
     ImpulseResponse: 'iir' 
       SampleRate: 1000 
     PassbandFrequency1: 59.9000 
      PassbandRipple: 3 
    StopbandAttenuation2: 80 
    StopbandAttenuation1: 80 
     PassbandFrequency2: 60.0800 
      FilterOrder: 40 
      DesignMethod: 'ellip' 

Ähnlich Ich habe andere Filter unter filt Objekt als filt (2), filt (3) bis zu filt (8), die jeweils mit unterschiedlichen Frequenzen.

Nun, aus irgendeinem Grund, warum ich den Fehler, wenn mein Programm versucht, die Linie zu laufen:

Q = filter(filt(1),x); 

wo x eine 600000x1 Spaltenvektor mit nur positiven und negativen realen Werten (ähnlich einem langen Sinus Welle)

Der Fehler, die ich bekommen ist:

Subscript indices must either be real positive integers or logicals. 

Error in digitalFilter/filter (line 870) 
    y = obj.FilterFunction(obj.Coefficients,x); 

Könnte jemand bitte das Problem hinweisen? Danke vielmals.

EDIT:

Die

designfilt 

Befehl öffnet eine interaktive Schnittstelle, wo Sie Ihre Filteranforderungen ändern und optimieren können. Ich habe die Filter optimiert und die Ergebnisse als .mat Datei gespeichert. [Dieses ganze Programm arbeitete früher, war Teil eines bedeutenden Projekts, das wir erfolgreich abgeschlossen haben, aber nach einem Jahr scheint irgendwie nicht zu funktionieren.]

Ich habe die Datei filter_8th.mat angehängt. Hier gibt es verschiedene Filter. Ich habe diese Filter bereits vorher erstellt, da Matlab viel Zeit benötigt, um diese zu erstellen.

In diesem .mat Datei werden die Filterobjekte als D_n1_50, D_n1_60, D_sig50 genannt, D_sig60 usw. (leicht erkennbar aus dem Arbeitsbereich.)

Die Codezeile, die diese Filter auf die variable filt zuweist ist, zum Beispiel:

filt = D_sig50 

Diese in einer Schleife, ausgewählt wird. Welcher Filter ausgewählt wird, hängt von einer bedingten if-else-Struktur ab.

the .mat file containing "filters" and the variable "x" are in this dropbox link:

+2

"x ist ein ... Vektor mit nur positiven und * negativen * realen Werten VS. x muss entweder real * positiv sein * ganze Zahlen oder logische" Denkst du nicht, das könnte die Fehlerquelle sein? – NKN

+0

Ich glaube nicht, dass das das Problem ist. Aber selbst dann habe ich versucht, abs (x) zu verwenden, aber das Problem bleibt bestehen. Der Filter soll an x ​​mit positiven und negativen Werten arbeiten (dies sind Amplituden-Abtastpunkte). Die Indexindizes müssen positiv und logisch sein. 'x' ist das Signal. – Rio1210

+0

Ohne tatsächliche Nummerierung ist der Fehler nicht möglich. Verwenden Sie eine Variable namens 'filter'? Sie können überprüfen, indem Sie diesen Befehl 'which filter' ausführen – NKN

Antwort

0

Das Problem behoben wurde. Dies ist aufgrund der Abwesenheit der Filterobjektfelder:

    FilterFunction: 
        FiltfiltFunction: 
GetCoefficientsForAnalysisFunction: 

In MATLAB 2015a diese Felder aus den Filtern Objekte fehlen. Aber in MATLAB 2016a (was ich verwende, scheinen diese Felder erforderlich zu sein.) Da die Dateien nach der Erstellung in MATLAB 2015a importiert wurden, scheint das das Problem zu sein. Nacherzählen, die Felder in MATLAB 2016a haben das Problem gelöst. Die Felder wurden ebenfalls erstellt.

Der Code lief zu überprüfen:

filt = D_sig50(1); 
sf = struct(filt) ; 
sf.FilterFunction 

Erstellt in MATLAB 2015a: Ausgabe:

    FilterFunction: [] 
        FiltfiltFunction: [] 
GetCoefficientsForAnalysisFunction: [] 

Diese Felder in dem Filterobjekt leer sind (nach diesen Filter in MATLAB 2016a Laden)

Erstellt in MATLAB 2016a:

    FilterFunction: @filterIIR 
        FiltfiltFunction: @filtfiltIIR 
GetCoefficientsForAnalysisFunction: @getCoeffsForAnalysisIIR 

Die Felder sind nun im Filterobjekt vorhanden und der Code funktioniert jetzt.

Verwandte Themen