Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

Index exceeds matrix dimensions at buffer function

Asked by I Made

I Made (view profile)

on 27 Feb 2013

Here is what i'm gona trying to do :

  1. I read a .wav file called tes.wav stored in y
  2. I try performing 3-level Haar Wavelet Transform on it
  3. I try to framing the D3 (detail subband level 3)

So i have this following code :

f=wavread('tes.wav','native');
v=[1/sqrt(2) 1/sqrt(2)]; 
w=[1/sqrt(2) -1/sqrt(2)]; 
if mod(length(f),2)~=0
    f=[f 0];
end
d=length(f);
m=1:d/2;
a1=f(2*m-1).*v(1) + f(2*m).*v(2);
d1=f(2*m-1).*w(1) + f(2*m).*w(2);
d=length(a1);
m=1:d/2;
a2=a1(2*m-1).*v(1) + a1(2*m).*v(2);
d2=d1(2*m-1).*w(1) + a1(2*m).*w(2);
d=length(a2);
m=1:d/2;
a3=a2(2*m-1).*v(1) + a2(2*m).*v(2);
d3=d2(2*m-1).*w(1) + a2(2*m).*w(2);
x=d3(1:length(d3),1);
frame=buffer(x,10);

But i Keep getting error message like this :

??? Index exceeds matrix dimensions.

Error in ==> Project at 32 x=d3(1:length(d3),1);

0 Comments

I Made

I Made (view profile)

Products

No products are associated with this question.

2 Answers

Answer by per isakson

per isakson (view profile)

on 28 Feb 2013
Edited by per isakson

per isakson (view profile)

on 28 Feb 2013
Accepted answer

Add the line

    size( d3 )

before the line that errors. What does it show? (I guess d3 doesn't have the size you expect.)

Why do you use

    x = d3( 1:length(d3), 1 );

and not

    x = d3( :, 1 );

?

The error message indicates that the rows of d3 has more elements than the columns.

3 Comments

I Made

I Made (view profile)

on 28 Feb 2013

Yeah you are right, i've just saw the error now. the size of the d3 is just not like i expected. Thanks isakson for your reply. Anyway are you fammiliar with haar transform? i want to ask some more that i found d3 not like i expected.

the raw signal was < 250608x2 int16 > but after i process it become like a1 < 1x125304 int16 > and d1 < 1x125304 int16 >, what i expected is like a1 < 125304x1 int16 > ? do you know how i can achieve this?

Why is that change from 250608x2 become 1x125304 anyway. m x n, m = number of sample and n=number of chanel right? why does it's change position?

per isakson

per isakson (view profile)

on 28 Feb 2013

No, I'm not. However, searching the File Exchange for "haar transform" returned 18 contributions. Many of them with high ratings.

You could open a new question in Answers.

I Made

I Made (view profile)

on 28 Feb 2013

Yeah, anyway i got the code above there too. But when i add somemore code to framing it just dont working because the size change after the transform. Anyway thanks for your reply

per isakson

per isakson (view profile)

Answer by Shashank Prasanna

Shashank Prasanna (view profile)

on 27 Feb 2013
Edited by Shashank Prasanna

Shashank Prasanna (view profile)

on 27 Feb 2013
>> clear

and start fresh, There could be a conflict in the name of the variable vs name of the function

2 Comments

Sean de Wolski

Sean de Wolski (view profile)

on 27 Feb 2013

Yeah; looks like length() was shadowed.

which -all length
I Made

I Made (view profile)

on 28 Feb 2013

Thanks for your reply, by the way where should i put the "clear all" or "clear" code? i've tried use it before

x=d3(1:length(d3),1);
frame=buffer(x,10);

But i got another error :

??? Reference to a cleared variable d3.

Error in ==> haarTransform at 34

Shashank Prasanna

Shashank Prasanna (view profile)

Contact us