Getting Error while implementing Filter object.

18 views (last 30 days)
I am using the Digital Filter with properties. I have defined filt(1) as:
digitalFilter with properties:
Coefficients: [20x6 double]
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.
Riyasat on 4 Mar 2017
Edited: Riyasat on 4 Mar 2017
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.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 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.
Riyasat on 4 Mar 2017
Edited: Riyasat on 4 Mar 2017
I think this was the issue. I generated the filters again in MATLAB 2016a, and now it's working properly. Thanks.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!