- 70 Views
- Uploaded on
- Presentation posted in: General

Handling Arrays 1/2

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Handling Arrays 1/2

Numerical Computing

with .

MATLAB

for Scientists and Engineers

- Create vectors and matrices,
- Perform math operations on matrices,
- Extract part of a matrix,
- Plotsimple graph using arrays,
- Manipulatesound using array operations

- Array: Collection of scalar values
- Vector: n x 1 or 1 x n
- Matrix: n x m

>> m = [ 1 3 2 4]

m =

1 3 2 4

>> v = [ 1; 2; 3; 4]

v =

1

2

3

4

>> M = [ 1 2; 3 4]

M =

1 2

3 4

row vector

column vector

matrix

- whos: prints its size, class, number of bytes
- size: print its number of rows and columns
- length: max(size(v))

s=size(a)

2

3

a

[m,n]=size(a)

3

2

m

n

1

2

3

m=size(a,1)

2

4

5

6

n=size(a,2)

3

l=length(a)

3

e=numel(a)

6

- plot, stem, bar, ...

matrix_plot.m

%% Plotting vector

v = [1 3 2 4];

figure(1), plot(v,'r-');

figure(2), plot(v,'bs');

figure(3), stem(v);

figure(4), bar(v)

%% plotting matrix

M = [1 3 2 4 8 3 5;

2 6 1 2 4 5 2]';

figure(5), plot(M)

figure(6), bar(M)

- MATLAB understands i or j as

[ i 8 1+i sin(0.1*pi)]

0 + 1.0000i

8.0000

1.0000 + 1.0000i

0.3090

a=[ i 8 1 + i 2 * 4 ]

MATLAB is smart!

0 + 1.0000i

8.0000

1.0000 + 1.0000i

8

a(1)

a(2)

a(3)

a(4)

- Array index starts from 1.

Array Index :

1

2

3

4

5

6

0

a=[ 0:0.2:1];

0.2

0.4

0.6

0.8

1.0

0

b=a(1:3);

0.2

0.4

0

b=a(1:2:5);

0.4

0.8

b=a(3:end);

0.6

0.8

1.0

0.4

b=a(end:-1:1);

1.0

0.8

0.6

0.4

0.2

0

b=a([3 1 4 2 6 5]);

0.4

0

0.6

0.2

1.0

0.8

- Index should be integer type or an integer value

0

a=[ 0:0.2:1];

0.2

0.4

0.6

0.8

1.0

b=a(8);

b=a(1.2);

b=a(ceil(2.3*2));

0.8

b=a(int16(2.3));

0.2

b=a(int16([2.3 3.2]);

0.4

0.2

- Range: start : step : end

3.0000

a=[ 3 pi log(2) ];

3.1416

0.6931

3

a=3:6;

4

5

6

8

a=8:-1:6;

7

6

5

0

a=[0:2:6] * 0.1;

0.2

0.4

0.6

1.00

a=linspace(1,2,5);

1.25

2.00

1.50

1.75

1

a=logpace(0,4,5);

10

10000

100

1000

- Create a row vector in which the first element is 5, and the last element is 41, with an increment of 3.
- Create a column vector that has the elements: 3, ln(2), 0.34, and .

- Read a sound file using wavread( ) and plot it.

waveform_plot.m

[s Fs] = wavread('thankyou.wav');

Ts = 1/Fs; % time between two adjacent samples

N = length(s);

t = (0:N-1)*Ts; % generate time values

figure(1), plot(t,s);

soundsc(s,Fs) % play the sound

- Row or Column Vector
- Transpose operator: '

3

a=[ 3;5;2 ];

3

b=a';

5

2

Transpose

5

2

a=[1 2; 4 5]

b=a';

1

2

1

4

4

5

2

5

- Hermitian – Complex conjugate transpose: '
- Just transpose: .'

a=[1:3]';

1

b=complex(a,a);

1+1i

2

2+2i

3

3+3i

c=b';

1-1i

2-2i

3-3i

c=b.';

1+1i

2+2i

3+3i

- Scalar operations affect all the elements in the array.

a=[1 2; 4 5]

b=a+2

1

3

2

4

4

6

5

7

b=2*a-1

b=a/2+1

1

1.5

3

2.0

7

3.0

9

3.5

- Standard matrix operations apply.

a=[1 2; 4 5]

1

2

x=a+b

2

4

4

5

5

6

b=[0 0; 1 1]

1

2

x=a.*b

1

4

1

1

4

5

x=a*b

x=a/b

3

1

4

0

9

1

13

3

- Element wise operations: .*, ./, .^

a=[1 2; 4 5]

1

2

4

5

x=a.^2

x=2.^a

1

4

2

4

16

16

25

32

x=a^2

x=a.^a

9

1

12

4

24

256

33

3125

- Useful for creating basic arrays for operations

a=ones(2)

b=ones(2,1)

1

1

1

1

1

1

c=zeros(3)

d=size(c)

0

0

3

3

0

0

0

0

m=2*ones(2)

2

2

0

0

0

2

2

- Identity matrix: eye(n)
- Magic square: magic(n)

b=eye(3,2)

1

0

a=eye(2)

1

0

0

1

0

1

0

0

c=rand(2)

d=magic(3)

8

1

6

0.4103

0.0579

3

5

7

0.8936

0.3529

4

9

2

Uniform random variable

between 0 and 1

- diag(v,n)

a=1:3

b=diag(a)

1

1

0

0

2

3

0

2

0

0

0

3

b=diag(a,1)

b=diag(a,-1)

0

1

0

0

0

0

0

0

2

1

0

0

0

0

0

0

2

0

- repmat( ) is the fastest.

SLOW

d=3.14

a = d * ones(5,3)

3.14

3.14

3.14

a = d + zeros(5,3)

3.14

3.14

3.14

3.14

3.14

3.14

a = d( ones(5,3) )

3.14

3.14

3.14

a = repmat(d,5,3)

3.14

3.14

3.14

FAST

- Getting rows
- n-th row: M( n, : )
- m~n-th row: M( m:n,:)

- Getting columns
- r-th column: M( :, r )
- r~s-th cols: M( :,r:s)

a= [1 2 3; 4 5 6; 7 8 9]

b= a(1,:)

1

2

3

4

5

6

7

8

9

c= a(:,2:end)

- Extract 'than-' female voice and '-kyou' male voice from 'thankyou.wav'. Concatenate them to forge a new 'thank-you' voice. Play the sound and plot the waveform.

tha---n-- - k- you--

tha---n-- - k- you--

tha---n-- - k- you--

ref: two.wav

- Script
- Sound Waveform

thankou_twovoices.m

[s Fs] = wavread('thankyou.wav');

figure(1), plot(s);

soundsc(s,Fs) % play the sound

..

soundsc(two,Fs) % play the forged sound