Getting Error while implementing Filter object.

2 vues (au cours des 30 derniers jours)
Riyasat
Riyasat le 3 Mar 2017
Hello,
I am using the Digital Filter with properties. I have defined filt(1) as:
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'
Similarly, I have other filters under filt object as filt(2), filt(3) upto filt(8) each at different frequencies.
Now, for some reason I get the error, when my program tries to run the line:
Q = filter(filt(1),x);
where, x is a 600000x1 column vector with only positive and negative real values (resembling a long sine wave)
The error that I get is:
Subscript indices must either be real positive integers or logicals.
Error in digitalFilter/filter (line 870)
y = obj.FilterFunction(obj.Coefficients,x);
Could anyone please point out the problem? Thanks a lot.
  4 commentaires
Walter Roberson
Walter Roberson le 4 Mar 2017
I am not all that familiar with designfilt. It would be easier if you could give specific commands to create a filter that you have difficulty with, or if you were to attach the .mat that had the stored filters.
Riyasat
Riyasat le 4 Mar 2017
Modifié(e) : Riyasat le 4 Mar 2017
designfilt
command opens up an interactive interface where you can change and tune your filter requirements. I have optimized the filters, and saved the results as a .mat file. [This whole program used to work, was part of a significant project which we completed succesfully, but after a year doesn't seem to work somehow.]
I have attached the filter_8th.mat file. There are various filters here. I have already created these filters before hand because Matlab takes a lot of time to create these.
In this .mat file, the filter objects are named as D_n1_50, D_n1_60, D_sig50, D_sig60 etc. (easily recognizable from the Workspace.)
The line of code that assigns these filter to the variable filt is
filt = D_sig50
for example. (Depends on a conditional if-else structure which filter would be selected.)
I have also, attached the variable x as a .mat file.

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 4 Mar 2017
When I design a filter matching the specifications of D_sig50(1), I see for it
FilterFunction: @filterIIR
FiltfiltFunction: @filtfiltIIR
GetCoefficientsForAnalysisFunction: @getCoeffsForAnalysisIIR
whereas for the loaded objects
FilterFunction: []
FiltfiltFunction: []
GetCoefficientsForAnalysisFunction: []
So either the filter functions were not saved or else the saved function reference could not be located at the time of reload of the objects and [] was substituted.
... Experimenting with a few back releases, I find that the filters work if you load them in R2015a, but not if you load them in R2015b.
  3 commentaires
Walter Roberson
Walter Roberson le 4 Mar 2017
Modifié(e) : Walter Roberson le 4 Mar 2017
Load the file. Then
filt = D_sig50(1);
sf = struct(filt) ;
sf.FilterFunction
The field does not exist in R2015a because the implementation was different
Riyasat
Riyasat le 4 Mar 2017
Modifié(e) : Riyasat le 4 Mar 2017
I think this was the issue. I generated the filters again in MATLAB 2016a, and now it's working properly. Thanks.

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by