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:
"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
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
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