Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Lab 1: Introduction To MATLAB: DSP Praktikum Signal Processing Group Technische Universit at Darmstadt April 17, 2008

Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Lab 1: Introduction to MATLAB

DSP Praktikum Signal Processing Group Technische Universitt Darmstadt a April 17, 2008

1
1.1

Introduction
What is MATLAB

MATLAB is a high-performance language for technical computing. It integrates computation, visualization and programming in an easy-to-use environment where problems and solutions are expressed in familiar mathematical notation. MATLAB itself is often used eciently as a powerful graphical calculator. This tutorial helps you to learn the MATLAB language, which lets you construct commands to create and process variables. Parts of its content are based on the Getting Started videos in [1]. The tutorial can be used interactively, i.e. while running MATLAB. You can try out commands, read in the online help or have a look at some MATLAB demos. You should be able to reproduce all of the plots and calculations in the tutorials by cutting and pasting text from the tutorials into the MATLAB command window or an m-le.

1.2

How to get help

To get help, generally feel encouraged to use the reference list at the end of this document. For example, there is an ocially recommended tutorial section [1], which includes Getting started videos and interactive MATLAB tutorials. A good list of available MATLAB tutorials, some in german, can 1

2 A SHORT OUTLINE OF THE LANGUAGE

be found on [2]. Also, the classic primer by Kermit Sigmon [5], or a book on numerical computations by Cleve Moler[3] could be used as a second reference. After starting MATLAB you should see the MATLAB prompt >> in the command window. MATLAB has a fairly good online help; type >> help commandname for more information on any given command. All you need to know is the name of the command. You can also nd MATLAB command or function names via keyword search by typing >> lookfor keyword You can get the value of a particular variable at any time by typing its name. For example the predened constant : >> pi ans = 3.1416 You can have more that one statement on a single line by separating them with either a semicolon or comma. Also, you will see that as long as you do not assign a variable to a specic operation or result, MATLAB will store it in a temporary variable called ans.

A Short Outline of the Language

This section provides information about the basic syntax of MATLAB commands. We start o by introducing simple commands. You can create variables by entering them to the command window. For example >> a=1 a = 1 >> b=3; Note that MATLAB displays the value of the assigned variable. This can be avoided by adding a semicolon ; after the command. You can carry out operations on your variables. For example

2 A SHORT OUTLINE OF THE LANGUAGE >> c=a+b c = 4 >> d=cos(a) d = 0.5403

Important arithmetic operators in MATLAB are + - * / ^ standing for addition, subtraction, multiplication, division and exponation. You can nd basic MATLAB functions, such as cos sin abs etc. in the MATLAB function reference.

2.1

Vector operations

MATLAB is an array based language where variables can be vectors or matrices. You use square brackets [] to construct arrays. To create a row vector you can take >> t=[1 2 3 4 5] t = 1 2 3 4 5 Alternatively, you can use the colon operator : to simplify the creation of equally spaced arrays. The very same vector is obtained by typing >> t=1:5 t = 1 2

Other increments (spacing between vector elements) can be specied as follows >> t=0:0.01:1; which creates a vector with elements 0, 0.01, 0.02, . . . , 1. You can carry out operations on vectors just like simple scalars. For example >> x=sin(2*pi*t); which creates a sine wave. For visualization, you can plot x against t using the plot command

2 A SHORT OUTLINE OF THE LANGUAGE

1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

Figure 1: A simple plot of a sine wave. >> plot(t,x) The resulting plot is shown in Figure 1. If you want to see all currently existing variables in the MATLAB workspace, type >> whos Name a b c d t x

Size 1x1 1x1 1x1 1x1 1x101 1x101

Bytes 8 8 8 8 808 808

Class double double double double double double array array array array array array

Generally, variables can also be complex with i or j denoting the imaginary unit, such as >> z=3+4i z = 3.0000 + 4.0000i

2 A SHORT OUTLINE OF THE LANGUAGE

2.2

Matrix operations

You can enter matrices by using the semicolon to separate rows. For example >> A = [1 2 3;4 5 6;7 8 10] A = 1 2 3 4 5 6 7 8 10 Alternatively, you can use functions to create matrices. For instance, a random matrix of 4 rows by 4 columns is obtained by >> data=rand(4,4) data = 0.9501 0.8913 0.2311 0.7621 0.6068 0.4565 0.4860 0.0185

0.8214 0.4447 0.6154 0.7919

0.9218 0.7382 0.1763 0.4057

You can nd the dimension of an array using the size function >> size(data) ans = 4 4 You can perform matrix operations, such as the matrix transpose >> B=A B = 1 4 2 5 3 6

7 8 10

or matrix multiplication (Remember that the order matters when multiplying two matrices) >> C=A*B C = 14 32 32 77 53 128

53 128 213

2 A SHORT OUTLINE OF THE LANGUAGE

You can also perform element-wise operation by adding a dot before the operation symbol. As an example element-wise multiplication is done using >> C=A.*B C = 1 8 8 25 21 48

21 48 100

where the corresponding elements of A and B are multiplied. Note that the operant dimensions have to agree when using element-wise operations. You can calculate the inverse of A by typing >> inv(A) ans = -0.6667 -0.6667 1.0000

-1.3333 3.6667 -2.0000

1.0000 -2.0000 1.0000

and multiply it by A to conrm you get the identity matrix: >> inv(A)*A ans = 1.0000 0 -0.0000

0 1.0000 -0.0000

0.0000 0 1.0000

2.3

Selecting array elements

You can select elements or sections of an array by using indexing. For the variable A, the value of row 2 and column 3 is >> A(2,3) ans = 6 For the variable data rows 1 to 2, columns 2 to the end, can be selected by typing

2 A SHORT OUTLINE OF THE LANGUAGE >> data(1:2,2:end) ans = 0.8913 0.8214 0.7621 0.4447

0.9218 0.7382

You can set values in this way, too. Take the variable data and set rows 1 to 2 and all the columns to 0 by >> data(1:2,:)=0 data = 0 0 0 0 0.6068 0.4565 0.4860 0.0185

0 0 0.6154 0.7919

0 0 0.1763 0.4057

Note that the colon operator : used on his own in indexing species all elements, in this case all columns. Note also that the array indexing in MATLAB starts with 1.

2.4

Programming structures

This section introduces two simple programming structures in MATLAB: if-else statements and for loops. The typical form of if-else statements is as follows: The if command evaluates a logical expression and executes a group of statements when the expression is true. You can use optional elseif and else commands that allow for alternative groups of statements. An end command terminates the last group of statements. For example >> if c<0 s=-1; elseif c>0 s=1; else s=0; end This code sequence sets variable s to be 1 or +1 if c is negative or positive, respectively. If c is zero, s is set to zero.

2 A SHORT OUTLINE OF THE LANGUAGE

You can use a for loop to repeat a group of statements for a xed number of times. for loops start with the for keyword and the denition of the iteration variable. Followed by the group of statements and a terminating end command. For example >> for n=1:10 y(n)=log(n)-0.2*n; end will produce a row vector x with values log(n) 0.2n for n = 1, 2, . . . , 10. Note that MATLAB allows you to get the same vector without using a for loop, simply typing >> n=1:10; >> y=log(n)-0.2*n;

2.5

Plotting with MATLAB

As you have seen above, simple x-y plots can be done using the plot command. For example plotting the previously dened variable y against variable n can be done using >> plot(n,y) You can plot multiple lines in one plot by using the hold function. For example, >> >> >> >> y2=sin(n/2); hold on plot(n,y2,g:*) hold off

produces an additional green, dotted line with markers. You can put labels to the x and y axis using >> xlabel(n) >> ylabel(y) and add a legend to the graph using >> legend(curve 1,curve 2)

2 A SHORT OUTLINE OF THE LANGUAGE

1 0.8 0.6 0.4 0.2 0 0.2 0.4 0.6 0.8 1 y curve 1 curve 2

5 n

10

Figure 2: A plot with multiple lines, labels and a legend. The created plot is shown in Figure 2. Additionally, you can add a title using the title command, or put multiple plots into one gure by using the subplot command. For more details, we refer to the corresponding help les.

2.6

Reading and saving data

You can save all variables on the MATLAB workspace using the save command. Typing >> save mydata creates a mydata.mat le in the current directory. You can clear individual variables or the entire workspace using the clear command, such as >> clear y >> clear all You can read the workspace data back into MATLAB with the load command: >> load mydata

2 A SHORT OUTLINE OF THE LANGUAGE

10

2.7

MATLAB programs

This section will show you how to create and run a MATLAB program. Surely, you have noticed that the command window is designed to execute individual commands, one at a time. You can automate the execution of many commands or build a complex application by writing a MATLAB program. A MATLAB program is a collection of MATLAB commands and functions, also known as statements, stored on disk as a le with extension .m, known as an m-le. You can create a new MATLAB program with the MATLAB editor, which can be started using >> edit functionname For example take the following code sequence f(1)=1; f(2)=2; for i=3:8 f(i)=f(i-1)+f(i-2); end which creates the rst 8 Fibonacci numbers, and save it to fibonacci.m. You can run this type of MATLAB program, called a script, by clicking the run button in the MATLAB editor or calling the le name in the command window: >> fibonacci which will store the variable f to the workspace. >> f f = 1

13

21

34

Note that to call an m-le from its name, it has to be located in the current directory or in the MATLAB search path. As well as MATLAB script les you can also create MATLAB function les. MATLAB function les start with the function keyword; the function name should match the name of the le. You can have optional input arguments and specify one or more output arguments. As an example, simply modify fibonacci.m as follows:

3 PREPARATION function f=fibonacci(n) % FIBONACCI fibonacci sequence f(1)=1; f(2)=2; for i=3:n f(i)=f(i-1)+f(i-2); end

11

Note that comments can be made after the percent symbol %. Save the changes and call your function, assigning the result to variable f while specifying an input argument of 10. >> f=fibonacci(10) f = 1 2 3 5

13

21

34

55

89

You can call a MATLAB function or script from another function or script, allowing you to create large multi-le applications. To conclude this short outline of MATLAB, you are encouraged to browse for examples and demos in the help section of MATLAB, which can be opened by typing >> doc

Preparation
1. What does MATLAB stand for? 2. Fundamentally, there is one data type in MATLAB, a rectangular array of numbers, stored in double precision format. It is convenient to think of three special cases. Name and describe them briey. 3. Provide the MATLAB commands to create a vector v with elements -1 -0.9 -0.8 . . . 1. Next, use a for loop and if/ else statements to determine the sign of each element of v and write it to a new vector s.

4 EXPERIMENT 4. The following matrix is considered 0.6 1.5 2.3 0.5 8.2 0.5 0.1 2.0 G = 5.7 8.2 9.0 1.5 0.5 0.5 2.4 0.5 1.2 2.3 4.5 0.5 What is the size of G? Is it square? Determine the indices of elements that contain the value 0.5. Give indices of elements that contain negative values.

12

5. Use the MATLAB help (while operating MATLAB or surng the web) and make sure you understand how to use arithmetic operators, matrix operation and element-wise (help arith) relational and logic operators (help relop etc.) programming structures (help if, help for, etc.) plotting functions (help plot, etc.), e.g. how to plot multiple lines in one graph, having dierent color, line style or marker symbols? 6. What is the dierence between MATLAB scripts and MATLAB functions.

4
4.1

Experiment
Magic matrices

The special properties of magic matrices or D rer matrices are often used u when introducing MATLAB. Enter the following command >> M=magic(5); What is special about M? Try sum(M) and sum(M). Next determine the rst row of M, the third column of M, column 1 to 3, row 2 to the end of M. all indices of elements with values > 10, and indices of elements < 4.

4 EXPERIMENT

13

4.2

Fibonacci numbers

The Fibonacci numbers are computed according to the following relation: fn = fn1 + fn2 , f0 = f1 = 1

Construct a function fibonacci.m by using copy/paste from the text. Your function should have input argument n and return a vector containing the rst n Fibonacci numbers. 1. Use your function to calculate the rst 12 Fibonacci numbers. 2. Compute the sequence of ratios fn /fn1 for n = 1, . . . , 12. It is claimed that this ratio converges to the value of the golden ratio = 5+1 . 2 Show this approximation using an appropriate plot.

4.3

Statistical measurements

Uniformly distributed random numbers can be generated in MATLAB using the rand function. For example, a random vector of size 1000 1 can be constructed by entering >> x=rand(1000,1); 1. Determine the minimum and maximum value of x. Further calculate the mean and the standard deviation of x. 2. Generate new random numbers using the transformation y = 4x 2. Calculate mean and standard deviation of y. Could you have predicted the approximate result? 3. Repeat 1. using randn instead of rand to generate your random numbers. Also, have a look at the histograms using the hist function. Can you tell what randn generates?

4.4

An optimization example

We want to nd the optimal dimensions of a common beverage can (Cola Dose), such that the surface area (material) is minimized while the volume

4 EXPERIMENT

14

is kept xed at 330 ml. We assume a simplied cylinder shape with radius r and height h, whose surface area and volume are A = 2r 2 + 2rh and V = r 2 h. To determine the optimal r and h, proceed as follows:
V Arrange the second equation to h = r2 and substitute this into the rst equation to obtain A(r) = 2r 2 + 2V . r

Take V = 330 (in ml cm3 ) and plot A(r) on the interval 0.5 r 10 (in cm). Find the minimum of A(r), determine the optimal r and highlight it in your plot. Does your result (r and h) match a common beverage can?

4.5

The moving average

Let us have a look at some climate data, and discover how the moving average can be used to highlight long-term trends. Enter the following command >> load glob_warm.mat which loads variables year and Ta into your workspace. Ta is a vector of the yearly averaged temperature anomaly, recorded over the years 1850-2007. Here, anomaly means dierence to the previous year. To get rid of short-term uctuations, we apply a moving average and therewith smooth our data xn for n = 1, . . . , N. An new value xn is obtained by averaging xn over 2m + 1 surrounding values: xn = xnm + + xn1 + xn + xn+1 + + xn+m 2m + 1

To implement the moving average, proceed as follows: Use a for loop to iterate over all elements of your data vector. Take into account the edges separately by using an if-else statement. We consider edges as iterations, when fewer summands than 2m + 1 are available for averaging, i.e. for n < m + 1 and n > N m.

4 EXPERIMENT

15

To carry out an averaging operation, rst select all desired vector elements, then use the sum function and divide by the number of summands. Experiment with dierent values for m and look at the result. Finally, plot the original series and the smoothed version for the case m = 7 in one plot. Use a legend and label the axes properly.

4.6

A signal processing example

1. Generate and plot a digital sinusoidal signal, proceed as follows: Construct a digital time vector, n=0:100; Set a continuous-time frequency F=1; (in Hz) and a sampling time T=0.05; (in seconds). Generate a signal s=sin(2*pi*F*n*T); Plot your signal using plot(n,s) vs. discrete-time, or using plot(n*T,s) vs. continuous-time. The command stem(n,s) is also useful to emphasize the discrete-time nature of sampled signals. 2. Sure, that looks like a sine-wave. Let us look at it in the frequency domain (we will explain the FFT and the Periodogram later in the course): Compute a 128-point FFT, S=fft(s,128); Calculate the Spectrum by P=S.*conj(S); Generate a normalized frequency vector, f=(0:127)/128; Plot the spectrum of your signal using plot(f,P) (vs. normalized frequency) or plot(f/T,P) (vs. frequency in Hz). 3. Now, let us add a disturbance and see if we can remove it by ltering! Add a 4 Hz distrubance, s2=s+sin(2*pi*4*n*T); Plot s and s2 and compare.

REFERENCES

16

Set the numerator coecient of a digital lter as b=[1 1 1 1]/4; and denominator coecients as a=1. Calculate the frequency response of your lter [H,w]=freqz(b,a); and plot it by using plot(w/pi/2/T,abs(H)) (Magnitude vs. frequency in Hz) Filter your signal, sf=filter(b,a,s2); Look at the recovered signal in both time and frequency domain. Observe that the disturbance is not gone, but suppressed!

References
[1] List of ocially recommended MATLAB tutorials. The MathWorks, Inc. 2008. www.mathworks.com/academia/student_center/tutorials [2] Good reference list of MATLAB Tutorials (in German, Skripte zur Einf hrung in MATLAB) u www.ant.uni-bremen.de/teaching/glab/matlab/literatur [3] Cleve Moler. Numerical Computing with MATLAB. The MathWorks, Inc. 2004. www.mathworks.com/moler [4] A three day MATLAB tutorial from MIT. www.mit.edu/people/abbe/matlab/main.html [5] Kermit Sigmon. MATLAB Primer. Third edition 1998.

You might also like