I'm trying to write a function to read an audiofile applying it a filter. I first use audioread function that gives me my (441000x2) signal matrix of n samples in 2 channels/columns. I generate a filter with the ellip function in the [b,a] form. Now my problem is: A) if I use the command window, i have my 441000x2 (double) signal and my 1x7 (double) vector of the filter transfer function coefficients. y = filter(b,a,u); returns me a 441000x2 matrix which actually is the filtered signal. I can plot both channels in the freq. domain and it works. B) if I call my function, that is more or less like: %reading (durata)seconds of my file info = audioinfo(filename_formato); [y, Fs] = audioread(filename_formato,[1 info.SampleRate * durata]); ns = size(y,1); ts = 1/Fs; %generating time vector t = linspace(0,ts*ns,ns); %designing the filter (let's say Fs = 44100Hz, fstop = 1000Hz) [z,p,k] = ellip(6,0.5,20,fstop/Fs*2); [b,a] = zp2tf(G.Z{1,1},G.P{1,1},G.K); y = filter(b,a,u); I receive the following error message: " Index in position 1 is invalid. Array indices must be positive integers or logical values. Error in TOTAL (line 71) y = filter(b,a,u); " where TOTAL is the name of the function. I tried using a for loop to work on one channel at a time but still y(:,i) = filter(b,a,u(:,i)) works in the command window but gives me the same error when calling TOTAL
Neeta Dsouza answered .
2025-11-20
I am assuming you are using MATLAB 2019b. The above issue can be due to linspace. It is generating indices which are not integers (due to numerical approximation errors) and this made matrix indexing fail. You can verify this yourself, if you run the following code in MATLAB R2019b or later:
x = -50:1:50; y = linspace(-50,50,101); % Verify that result is different isequal(x,y) % Show that this makes indexing fail indices = y + 51; A = [1:1000]; B = A(indices);