Upload
kool-rakesh
View
79
Download
2
Tags:
Embed Size (px)
DESCRIPTION
basics of Matlab
Citation preview
© M S Ramaiah School of Advanced Studies
Introduction to MATLAB
Preetham Shankpal
Asst. Professor,
M S Ramaiah School of Advanced Studies
Email: [email protected]
1
© M S Ramaiah School of Advanced Studies
Introduction
• What is Matlab? MATrix LABoratory.
• MATLAB is a numerical computing environment and programming language (initially written in C). MATLAB allows easy matrix manipulation, plotting of functions and data, implementation of algorithms, creation of user interfaces, and interfacing with programs in other languages.
• Powerful, extensible, highly integrated computation, programming, visualization, and simulation package
• Widely used in engineering, mathematics, and science
• It has packages with specialized functions
2
© M S Ramaiah School of Advanced Studies
MATLAB Toolboxes
Signal & Image Processing Signal Processing Image Processing Communications Frequency Domain System Identification
Higher-Order Spectral Analysis System Identification Wavelet Filter Design
Control Design Control System Fuzzy Logic Robust Control μ-Analysis and Synthesis Model Predictive Control
Math and AnalysisOptimizationRequirements Management InterfaceStatisticsNeural NetworkSymbolic/Extended MathPartial Differential EquationsPLS ToolboxMappingSpline
Data Acquisition and ImportData AcquisitionInstrument ControlExcel LinkPortable Graph Object
HELP WINDOW - DEMOS
3
© M S Ramaiah School of Advanced Studies
Toolboxes, Software, & Links
4
© M S Ramaiah School of Advanced Studies
MATLAB System
• Language: arrays and matrices, control flow, I/O, data structures, user-defined functions and scripts
• Working Environment: editing, variable management, importing and exporting data, debugging, profiling
• Graphics system: 2D and 3D data visualization, animation and custom GUI development
• Mathematical Functions: basic (sum, sin,…) to advanced (fft, inv, Bessel functions, …)
• One can use MATLAB with C, Fortran, and Java, in either direction
5
© M S Ramaiah School of Advanced Studies
Online MATLAB Resources
• www.mathworks.com/
• www.mathtools.net/MATLAB
• www.math.utah.edu/lab/ms/matlab/matlab.html
• web.mit.edu/afs/athena.mit.edu/software/matlab/
www/home.html
• www.utexas.edu/its/rc/tutorials/matlab/
• www.math.ufl.edu/help/matlab-tutorial/
• www.indiana.edu/~statmath/math/matlab/links.html
• www-h.eng.cam.ac.uk/help/tpl/programs/matlab.html
6
© M S Ramaiah School of Advanced Studies
References
Mastering MATLAB 7, D. Hanselman and B. Littlefield,Prentice Hall, 2004
Getting Started with MATLAB 7: A Quick Introductionfor Scientists and Engineers, R. Pratap, Oxford UniversityPress, 2005.
7
© M S Ramaiah School of Advanced Studies
Desktop Tools
• Command Window– type commands
• Workspace– view program variables– clear to clear – double click on a variable to
see it in the Array Editor
• Command History– view past commands– save a whole session using
diary
8
© M S Ramaiah School of Advanced Studies
Some MATLAB Development Windows
• Command Window: where you enter commands
• Command History: running history of commands which is preserved across MATLAB sessions
• Current directory: Default is $matlabroot/work• Workspace: GUI for viewing, loading and saving MATLAB
variables
• Array Editor: GUI for viewing and/or modifying contents of MATLAB variables (openvar varname or double-click the array’s name in the Workspace)
• Editor/Debugger: text editor, debugger; editor works with file types in addition to .m (MATLAB “m-files”)
9
© M S Ramaiah School of Advanced Studies
MATLAB Editor Window
10
© M S Ramaiah School of Advanced Studies
MATLAB Help Window (Very Powerful)
11
© M S Ramaiah School of Advanced Studies
Command-Line Help : List of Topic Functions
>> help matfun Matrix functions - numerical linear algebra. Matrix analysis. norm - Matrix or vector norm. normest - Estimate the matrix 2-norm. rank - Matrix rank. det - Determinant. trace - Sum of diagonal elements. null - Null space. orth - Orthogonalization. rref - Reduced row echelon form. subspace - Angle between two subspaces.
…
12
© M S Ramaiah School of Advanced Studies
Keyword Search of Help Entries
>> lookfor whonewton.m: % inputs: 'x' is the number whose
square root we seektestNewton.m: % inputs: 'x' is the number
whose square root we seekWHO List current variables.WHOS List current variables, long form. TIMESTWO S-function whose output is two times
its input.
>> whos Name Size Bytes Class Attributes ans 1x1 8 double fid 1x1 8 double i 1x1 8 double
13
© M S Ramaiah School of Advanced Studies
Variables (Arrays) and Operators
14
© M S Ramaiah School of Advanced Studies
Matlab as Calculator
• The basic arithmetic operators are + - * / ^ and these are used in conjunction with brackets: ( )
• The symbol ^ is used to get exponents (powers): 2^4=16
• You should type in commands shown following the prompt: >>.
>> 2+3/4*5
ans =
5.7500
15
© M S Ramaiah School of Advanced Studies
Matlab as Calculator
• Is this calculation 2 + 3/(4*5) or 2 + (3/4)*5? Matlab
• works according to the priorities:
1. quantities in brackets,
2. powers 2 + 3^2 ==> 2 + 9 = 11,
3. * /, working left to right (3*4/5=12/5),
4. + -, working left to right (3+4-5=7-5),
Thus, the earlier calculation was for 2 + (3/4)*5 by priority 3
16
© M S Ramaiah School of Advanced Studies
Matlab as Calculator
no declarations neededno declarations needed
mixed data types
mixed data types
semi-colon suppresses output of the calculation’s result
semi-colon suppresses output of the calculation’s result
>> 16 + 24ans = 40
>> product = 16 * 23.24product = 371.84
>> product = 16 *555.24;>> productproduct = 8883.8
17
© M S Ramaiah School of Advanced Studies
MATLAB Data•
The basic data type used in MATLAB is the double precision array
• No declarations needed: MATLAB automatically allocates required memory
• Resize arrays dynamically
• To reuse a variable name, simply use it in the left hand side of an assignment statement
18
© M S Ramaiah School of Advanced Studies
Numbers & Formats
• Matlab recognizes several different kinds of numbers
• The “e” notation is used for very large or very small numbers:
-1.3412e+03 = -1.3412 x103 = -1341.2
-1.3412e-01 = -1:3412 10-1 =-0.13412
• All computations in MATLAB are done in double precision, which means about 15 significant figures
• The format how Matlab prints numbers is controlled by the “format” command
19
© M S Ramaiah School of Advanced Studies
Numbers & Formats
• Type help format for full list.
• Should you wish to switch back to the default format then format will suffice.
• The command
format compact
• is also useful in that it suppresses blank lines in the output thus allowing more information to be displayed
20
© M S Ramaiah School of Advanced Studies
Variable Names
• Legal names consist of any combination of letters and digits, starting with a letter. These are allowable:
NetCost, Left2Pay, x3, X3, z25c5
• These are not allowable:
Net-Cost, 2pay, %x, @sign
• User names that reflect the values they represent
• Special names: you should avoid using
• eps = 2.2204e-16 =2-54 (The largest number such that 1 + eps is indistinguishable from 1) and pi = 3.14159... = .
• If you wish to do arithmetic with complex numbers, both i and j have the value √-1 unless you change them
21
© M S Ramaiah School of Advanced Studies
Variable Basicsclear all;close all;clc;product = 2 * 3^3;comp_sum = (2 + 3i) + (2 - 3i);show_i = i^2;save abc_1clearload abc_1who
complex numbers (i or j) require no special handling
save/load are used to
retain/restore workspace variables
Solve in MATLAB
22
© M S Ramaiah School of Advanced Studies
Variables Revisited
• Variable names are case sensitive and over-written when re-used
• Basic variable class: Auto-Indexed Array– Allows use of entire arrays (scalar, 1-D, 2-D, etc…) as
operands– Vectorization: Always use array operands to get best
performance (avoiding for loops)
• Terminology: “scalar” (1 x 1 array), “vector” (1 x N array), “matrix” (M x N array)
• Special variables/functions: ans, pi, eps, inf, NaN, i, nargin, nargout, varargin, varargout, ...
• Commands who (terse output) and whos (verbose output) show variables in Workspace
23
© M S Ramaiah School of Advanced Studies
Suppressing Output
• One often does not want to see the result of intermediate calculations terminate the assignment statement or expression with semicolon
• the value of x is hidden. Note also we can place several statements on one line, separated by commas or semicolons
24
>> x=-13; y = 5*x, z = x^2+yy = -65.00z = 104.00
© M S Ramaiah School of Advanced Studies
Trigonometric Functions
• Those known to Matlab are sin, cos, tan and their arguments should be in radians.
• e.g. to work out the coordinates of a point on a circle of radius 5 centred at the origin and having an elevation 30o = pi/6 radians.
• The inverse trig functions are called asin, acos, atan (as opposed to the usual arcsin or sin-1 etc.). The result is in radians.
25
>> x = 5*cos(pi/6), y = 5*sin(pi/6)x = 4.33y = 2.50
acos(x/5), asin(y/5)ans = 0.52ans = 0.52
>> pi/6ans = 0.52
© M S Ramaiah School of Advanced Studies
Other Elementary Functions
• These include sqrt, exp, log, log10
26
>> x = 9;sqrt(x),exp(x),log(sqrt(x)),log10(x^2+6)ans = 3.00ans = 8103.08ans = 1.10ans = 1.94
© M S Ramaiah School of Advanced Studies
Vectors – Rows and Columns
Row Vectors
• They are lists of numbers separated by either commas or spaces. The number of entries is known as the “length” of the vector and the entries are often referred to as “elements” or “components” of the vector
• The entries must be enclosed in square brackets
• Spaces can be vitally important:
27
>> v = [ 1 3, sqrt(5)]v = 1.00 3.00 2.24>> length(v)ans = 3.00
>> v2 = [3+ 4 5]v2 = 7.00 5.00>> v2 = [3 +4 5]v2 = 3.00 4.00 5.00
© M S Ramaiah School of Advanced Studies
Row Vectors
• We can do certain arithmetic operations with vectors of the same length, such as v and v3 in the previous section
28
>> v, v3, v+v3v = 1.00 3.00 2.24v3 = 3.00 4.00 5.00ans = 4.00 7.00 7.24
>> v, v2, v+v2v = 1.00 3.00 2.24v2 = 7.00 5.00??? Error using ==> plusMatrix dimensions must agree.
The error is due to v and v2 having different lengths
© M S Ramaiah School of Advanced Studies
Row Vectors
• A vector may be multiplied by a scalar (a number see v4), or added/subtracted to another vector of the same length. The operations are carried out element wise
• We can build row vectors from existing ones:
29
>> v, v4=3*vv = 1.00 3.00 2.24v4 = 3.00 9.00 6.71
>> w = [1 2 3], z = [8 9]cd = [2*z,-w], sort(cd)w = 1.00 2.00 3.00z = 8.00 9.00cd = 16.00 18.00 -1.00 -2.00 -3.00ans = -3.00 -2.00 -1.00 16.00 18.00
© M S Ramaiah School of Advanced Studies
Row vectors
• We can also change or look at the value of particular entries
30
w(2) = -2, w(3)w = 1.00 -2.00 3.00ans = 3.00
© M S Ramaiah School of Advanced Studies
The Colon Notation
• This is a shortcut for producing row vectors:
• More generally a : b : c produces a vector of entries starting with the value a, incrementing by the value b until it gets to c (it will not produce a value beyond c). This is why 1:-1 produced the empty vector [].
31
>> a= 1:4a = 1.00 2.00 3.00 4.00>> b=3:7b = 3.00 4.00 5.00 6.00 7.00>> c=-1:1c = -1.00 0 1.00>> d=1:-1d = Empty matrix: 1-by-0
Upper limitlower limit
>> 1:3:7ans = 1.00 4.00 7.00
© M S Ramaiah School of Advanced Studies
Extracting Bits of a Vector
• To get the 3rd to 6th entries:
• To get alternate entries
• What does r5(-6:2:1) give?
32
>> r5 = [1:2:6, -1:-2:-7]r5 = 1.00 3.00 5.00 -1.00 -3.00 -5.00 -7.00>> r5(3:6)ans = 5.00 -1.00 -3.00 -5.00
>> r5(1:2:7)ans = 1.00 5.00 -3.00 -7.00
>> r5(6:-2:1)ans = -5.00 -1.00 3.00
© M S Ramaiah School of Advanced Studies
Column Vectors
• These have similar constructs to row vectors. When defining them, entries are separated by ; or “newlines”
so column vectors may be added or subtracted provided that they have the same length
33
>> a= [1; 2; 3]a = 1.00 2.00 3.00>> b = [ 123]b = 1.00 2.00 3.00
>> c= 2*a -3*bc = -1.00 -2.00 -3.00
© M S Ramaiah School of Advanced Studies
Transposing a Matrix
• We can convert a row vector into a column vector (and vice versa) by a process called transposing denoted by ‘.
• If x is a complex vector, then x' gives the complex conjugate transpose of x:
34
>> a = [1 2 3]a = 1.00 2.00 3.00>> a'ans = 1.00 2.00 3.00>> c= [ 2; 3; 4]c = 2.00 3.00 4.00>> d= a'+(3*c)d = 7.00 11.00 15.00
a=[1-1i 1+1i];b=a';
1.00 - 1.00i 1.00+1.00i 1.00 + 1.00i1.00 - 1.00i
© M S Ramaiah School of Advanced Studies
Plotting Elementary Functions
• Plot(t, sin(2*pi*100*t))
• xlabel
• ylabel
• title
• grid
• figure
35
clear all;clcf=100;fs=40*f;ts=1/fs;t=0:ts:1;w=2*pi*f;y=3*sin(w*t);plot(t,y)
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1-3
-2
-1
0
1
2
3
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07-3
-2
-1
0
1
2
3
© M S Ramaiah School of Advanced Studies
Multiple Plots
• plot(t,sin(wt), t,cos(wt))
• xlabel
• ylabel
• title
• hold on
• subplot
• Data cursor (marker)
36
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1-3
-2
-1
0
1
2
3
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1-4
-2
0
2
4
0 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09 0.1-4
-2
0
2
4
© M S Ramaiah School of Advanced Studies
Vectorization Example*
tic;x=0.1;for k=1:199901 y(k)=besselj(3,x) +
log(x); x=x+0.001;endtoc;
Elapsed time is 17.092999 seconds.
tic;x=0.1:0.001:200;y=besselj(3,x) + log(x);toc;Elapsed time is 0.551970 seconds.
Roughly 31 times faster without use of for loop
37
© M S Ramaiah School of Advanced Studies
2D MATRIX Declaration
• M=[3 4 5; 6 7 8; 1 -1 0]
• M=magic(4)
38
>> a=[1;2;3];>> b=[3;4;5];>> c=[2;3;4];>> s=[a b c]s = 1.00 3.00 2.00 2.00 4.00 3.00 3.00 5.00 4.00
© M S Ramaiah School of Advanced Studies
Matrices: Magic Squares
This matrix is called a “magic square”
This matrix is called a “magic square”
Interestingly, Durer also dated this engraving by placing 15 and 14 side-by-side in the magic square.
Interestingly, Durer also dated this engraving by placing 15 and 14 side-by-side in the magic square.
39
© M S Ramaiah School of Advanced Studies
Durer Magic Square
>> M=magic(4);
>> [b]=[sum(M(1,:)) sum(M(2,:)) sum(M(3,:)) sum(M(4,:))]
>>[c]=[sum(M(:,1)) sum(M(:,2)) sum(M(:,3)) sum(M(:,4))]
40
© M S Ramaiah School of Advanced Studies
Matrix Manipulations
• Scalar Product (*)
• u= [ 1 2 3]; v= [2;3;4] ;
• Scalar_product= 1x2+2x3+3x4=20
• (row vector x column vector)
• (row vector x column vector)
• an error results because w is not a column vector
41
1
N
i ii
uv u v
>> u= [ 1 2 3]; v= [2;3;4];>> u*vans = 20.00
>> u= [ 1 2 3]; v= [2 3 4];>> u*v??? Error using ==> mtimesInner matrix dimensions must agree.
© M S Ramaiah School of Advanced Studies
Dot . Product• The second way of forming the product of two vectors of the same length is known
as the Hadamard product
• It is not often used in Mathematics but is an invaluable Matlab feature
• It involves vectors of the same type
• If u and v are two vectors of the same type (both row vectors or both column vectors), the mathematical definition of this product, which we shall call the dot product, is the vector having the components
• u . v = [u1v1, u2v2, ……., unvn]:
• The result is a vector of the same length and type as u and v. Thus, we simply multiply the corresponding elements of two vectors
42
>> u= [ 1 2 3]; v= [2 3 4];>> u*v??? Error using ==> mtimesInner matrix dimensions must agree. >> u.*vans = 2.00 6.00 12.00
Tabulate the function y = x sin(pi* x) forx = 0; 0:25; : : : ; 1.
plot(x,y)
© M S Ramaiah School of Advanced Studies
Dot Division of Arrays (./)
• There is no mathematical definition for the division of one vector by another. However, in Matlab, the operator ./ is defined to give element by element division it is therefore only defined for vectors of the same size and type
43
>> a=[1 2 3];>> b=[1 2 3];>> c=a/bc = 1.00>> c=a./bc = 1.00 1.00 1.00>> a=[12 24 36];b=[6 3 9];>> c=a/bc = 3.71>> c=a./bc = 2.00 8.00 4.00
© M S Ramaiah School of Advanced Studies
Dot Power of Arrays (.^)
• To square each of the elements of a vector we could, for example, do u.*u. However, a neater way is to use the .^ operator
44
>> a=[ 1 2 3];>> a=a.^2a = 1.00 4.00 9.00
a = 1.00 4.00 9.00>> a=a.^4a = 1.00 256.00 6561.00
Draw plots for the following
© M S Ramaiah School of Advanced Studies
Multidimensional Arrays>> r = randn(2,3,2) % create a 3 dimensional array filled
%with normally distributed random numbers
randn(2,3,2): 3 dimensions, filled with normally distributed random numbers
randn(2,3,2): 3 dimensions, filled with normally distributed random numbers
“%” sign precedes comments, MATLAB ignores the rest of the line
“%” sign precedes comments, MATLAB ignores the rest of the line
r=rand(2,3,2)
r(:,:,1) =
0.2769 0.0971 0.6948 0.0462 0.8235 0.3171
r(:,:,2) =
0.9502 0.4387 0.7655 0.0344 0.3816 0.7952
45
© M S Ramaiah School of Advanced Studies
2D Matrix Manipulations • size(A) , max, min transpose(A),
size(A)
• diag(A) fliplr(A)
• A=zeros(m,n) eye(A)
46
>> a= [ 2 3 4; 2 4 5; 5 6 7]a = 2.00 3.00 4.00 2.00 4.00 5.00 5.00 6.00 7.00>> size(a)ans = 3.00 3.00
>> diag(a)ans = 2.00 4.00 7.00
>> a= [ 2 3 4; 2 4 5]a = 2.00 3.00 4.00 2.00 4.00 5.00>> size(a)ans = 2.00 3.00>> a'ans = 2.00 2.00 3.00 4.00 4.00 5.00>> size(a')ans = 3.00 2.00
zeros(2,4)ans = 0 0 0 0 0 0 0 0
>> eye(3)ans = 1.00 0 0 0 1.00 0 0 0 1.00
© M S Ramaiah School of Advanced Studies
Matrix Manipulation• D=[1 2 3 4]; D=diag(1:4)
• F = [0 1 8 7; 3 -2 -4 2; 4 2 1 1] (non square matrix)
• What is diag(F)?
• Tabulate the functions y = 4 sin 3x and u = 3 sin 4x for x = 0, 0.1, 0.2,….,0.5.
• Given a matrix A = [ 1 2 3; 4 5 6; 5 6 7]; find the determinant of A; Adjoint of A; inverse of A;
• Find the inverse of matrix A = [ 1 2 3 4; 1 3 5 6; 5 4 3 2];
47
>> diag(1:4)ans = 1.00 0 0 0 0 2.00 0 0 0 0 3.00 0 0 0 0 4.00
© M S Ramaiah School of Advanced Studies
Matrix Manipulation
• Given Matrix A = [1 2 3 4; 5 3 1 7; 2 7 9 4; 2 4 6 8];
• Extract bits of A; extract locations of ( 8, 9 , 5, 1)
• Display the following
– Only row 3
– Only row 4
– Rows 2 and 4
– Cols 1 and 3
– Use the 4x 4 matrix concatenate it to make a 16x 16 Matrix
– Perform sum of diagonal elements
48
© M S Ramaiah School of Advanced Studies
Dot product of matrices (.*)
• The dot product works as for vectors: corresponding elements are multiplied together so the matrices involved must have the same size
» A*x
49
>> A= [ 1 2 3 4; 3 4 5 6; 6 7 8 9];>> B= [ 2 3 4 5; 5 6 7 7; 8 9 3 4];>> A*B??? Error using ==> mtimesInner matrix dimensions must agree. >> A.*Bans = 2.00 6.00 12.00 20.00 15.00 24.00 35.00 42.00 48.00 63.00 24.00 36.00
© M S Ramaiah School of Advanced Studies
Sparse Matrix
• Create a sparse 5x4 matrix S having only 3 non{zero values: S1,2 = 10, S3,3 = 11 and S5,4 =12.
50
>> m= [ 1 3 5];>> n=[2 3 4];>> v=[10 11 12];>> A=sparse(m,n,v)A = (1,2) 10.00 (3,3) 11.00 (5,4) 12.00>> A=full(A)A = 0 10.00 0 0 0 0 0 0 0 0 11.00 0 0 0 0 0 0 0 0 12.00
© M S Ramaiah School of Advanced Studies
Systems of Linear Equations• Mathematical formulations of engineering problems often lead to
sets of simultaneous linear equations. Such is the case, for instance, when using the finite element method (FEM).
• A general system of linear equations can be expressed in terms of a coefficient matrix A, a right-hand-side (column) vector b and an unknown (column) vector x as
Ax=b
• When A is non-singular and square (n x n), meaning that the number of independent equations is equal to the number of unknowns, the system has a unique solution given by
x= A-1B51
© M S Ramaiah School of Advanced Studies
Example
• Enter the symmetric coeffcient matrix and right hand side vector b given by
• and solve the system of equations Ax = b using the three alternative methods:
• i) x = A-1b, (the inverse A-1 may be computed in Matlab using inv(A).)
• ii) x = A \ b,
• iii) xT = btAT leading to xT = b' / A which makes use of the “slash” or “right division” operator “/”. The required solution is then the transpose of the row vector xT.
52
© M S Ramaiah School of Advanced Studies
Example
• Use the backslash operator to solve the complex system of equations for which
53
© M S Ramaiah School of Advanced Studies
Character Strings• close all;
• clear all;
• clc
• hi = ' hello';
• class = 'MATLAB';
• greetings = [hi class]
• vgreetings = [hi;class]semi-colon: join verticallysemi-colon: join verticallyconcatenation with blank or with “,”concatenation with blank or with “,”
54
© M S Ramaiah School of Advanced Studies
yo =
Hello
Class
>> ischar(yo)
ans =
1
>> strcmp(yo,yo)
ans =
1
String Functions
returns 1 if argument is a characterarray and 0 otherwise
returns 1 if argument is a characterarray and 0 otherwise
returns 1 if string arguments are thesame and 0 otherwise; strcmpi ignores
case
returns 1 if string arguments are thesame and 0 otherwise; strcmpi ignores
case
55
© M S Ramaiah School of Advanced Studies
Set FunctionsArrays are ordered sets:
>> a = [1 2 3 4 5]a = 1 2 3 4 5>> b = [3 4 5 6 7]b = 3 4 5 6 7
>> isequal(a,b)ans = 0>> ismember(a,b)ans = 0 0 1 1 1
returns true (1) if arrays are the same size and have the same values
returns true (1) if arrays are the same size and have the same values
returns 1 where a is in b and 0 otherwise
returns 1 where a is in b and 0 otherwise
56
© M S Ramaiah School of Advanced Studies
Lab 1
• Create a row vector called X whose elements are the integers 1 through 9.• Create another row vector called Temp whose elements are:
15.6 17.5 36.6 43.8 58.2 61.6 64.2 70.4 98.8• These data are the result of an experiment on heat conduction through an iron bar. The
array X contains positions on the bar where temperature measurements were made. The array Temp contains the corresponding temperatures.
• Make a 2-D plot with temperature on the y-axis and position on the x-axis.• The data shown in your plot should lie along a straight line (according to physics) but
don’t because of measurement errors. Use the MATLAB polyfit function to fit the best line to the data (use >> hold on; for multiple plots in same figure). In other words use polyfit to determine the coefficients a and b of the equation
T = ax + b• Lastly, we can calculate a parameter called chi-square (χ2) that is a measure of how
well the data fits the line. Calculate chi-square by running the MATLAB command that does the following matrix multiplication:
>> (Temp-b-a*X)*(Temp-b-a*X)'
57
© M S Ramaiah School of Advanced Studies
Lab 1
• close all;
• clear all;
• clc;
• x=1:9;
• temp=[15.6 17.5 36.6 43.8 58.2 61.6 64.2 70.4 98.8];
• p= polyfit(x,temp,1);
• T=p(1).*x+p(2);
• B=((temp-p(2)-p(1)).*x);
• Bd=((temp-p(2)-p(1)).*x)';
• C=B*Bd;
• figure;plot(x,temp,'-*'); hold on; plot(x,T)
•
58
© M S Ramaiah School of Advanced Studies
Lab 2• Write a MATLAB command that will generate a column vector called
theta. theta should have values from –2π to 2π in steps of π/100.• Generate a matrix F that contains values of the following functions in the
columns indicated: Column 1: cos(θ) Column 2: cos(2θ)(1 + sin(θ2) Column 3: e -0.1|θ|
• Evaluate each of the above functions for the θ values in the theta vector from above.
• Plot each of the columns of F against theta. Overlay the three plots, using a different color for each.
• Create a new column vector called maxVect that contains the largest of the three functions above for each theta. Plot maxVect against theta.
• Create a column vector called maxIndex that has the column number of the maximum value in that row.
59
© M S Ramaiah School of Advanced Studies
Lab 3
60
• Mesh and Contour plots
close all;clear all;clc;[X,Y] = meshgrid(2:.2:4, 1:.2:3); f =-X.*Y.*exp(-2*(X.^2+Y.^2));figure(1); mesh(X,Y,f), xlabel('x'), ylabel('y'), gridfigure (2), contour(X,Y,f)xlabel('x'), ylabel('y'), grid, hold onfmax = max(max(f));kmax = find(f==fmax);Pos = [X(kmax), Y(kmax)];plot(X(kmax),Y(kmax),'*')text(X(kmax),Y(kmax),' Maximum')
© M S Ramaiah School of Advanced Studies
Programming
61
© M S Ramaiah School of Advanced Studies
• MATLAB m-file Editor
– To start: click icon or enter edit command in Command Window, e.g., >> edit test.m
• Scripts and Functions
• Decision Making/Looping– if/else– switch – for and while
• Running Operating System Commands
Outline
62
© M S Ramaiah School of Advanced Studies
You can save and run the file/function/script in one step by clicking here
You can save and run the file/function/script in one step by clicking here
Tip: semi-colons suppress printing, commas (and semi-colons) allow multiple commands on one line, and 3 dots (…) allow continuation of lines without execution
Tip: semi-colons suppress printing, commas (and semi-colons) allow multiple commands on one line, and 3 dots (…) allow continuation of lines without execution
m-file Editor Window
63
© M S Ramaiah School of Advanced Studies
Scripts and Functions
• Scripts do not accept input arguments, nor do they produce output arguments. Scripts are simply MATLAB commands written into a file. They operate on the existing workspace.
• Functions accept input arguments and produce output variables. All internal variables are local to the function and commands operate on the function workspace.
• A file containing a script or function is called an m-file
• If duplicate functions (names) exist, the first in the search path (from path command) is executed.
64
© M S Ramaiah School of Advanced Studies
function [a b c] = myfun(x, y)b = x * y; a = 100; c = x.^2;
>> myfun(2,3) % called with zero outputs
ans = 100>> u = myfun(2,3) % called with one outputu = 100>> [u v w] = myfun(2,3) % called with all outputsu = 100v = 6w = 4
Functions – First Example
Write these two lines to a file myfun.m and save it on MATLAB’s path
Write these two lines to a file myfun.m and save it on MATLAB’s path
Any return value which is not stored in an output variable is simply discarded
Any return value which is not stored in an output variable is simply discarded
65
© M S Ramaiah School of Advanced Studies
Fibonacci
function f = fibonacci(n)
% FIBONACCI Fibonacci sequence
% f = FIBONACCI(n) generates the first n Fibonacci numbers.
f = zeros(n,1);
f(1) = 1;
f(2) = 2;
for k = 3:n
f(k) = f(k-1) + f(k-2);
end
66
© M S Ramaiah School of Advanced Studies
Sum
• Produce a list of the values of the sums
67
close all;clear all;clcx=1:20;s(20)=sum(1./(x.^2));for j= 21:100 s(j)=s(j-1)+(1./(j^2));ends
© M S Ramaiah School of Advanced Studies
Fast Fourier Transform (FFT)
• fft is one of the built-in functions in MATLAB
• The fft function can compute the discrete Fourier transform of any arbitrary length sequence. fft incorporates most known fast algorithms for various lengths (e.g. power of 2)
• Not all lengths are equally fast
68
© M S Ramaiah School of Advanced Studies
Discrete Fourier Transform Definition
•
21
0
21
0
[ ] [ ]
1[ ] [ ]
j knNN
n
j knNN
k
X k x n e
x n X k eN
69
© M S Ramaiah School of Advanced Studies
fft and fftshift
0 2
N=11
-
1 11
0
N=11
After fftshift
70
© M S Ramaiah School of Advanced Studies
Example: FFT of sine Wave in Noise
>> fs = 1000;>> t = [0:999]*(1/fs);>> x = sin(2*pi*250*t);>> X = fft(x(1:512));>> noise = 0.8*randn(size(x));>> xn = x + noise;>> XnMag = fftshift(20*log10(abs(fft(xn(1:512)))));>> XnMagPf = XnMag(256:512);>> frq = [0:length(XnMagPf) -
1]'*(fs/length(XnMag));>> plot(frq, XnMagPf)>> xlabel('freq. (Hz)');>> ylabel('Mag. (db)');
71
© M S Ramaiah School of Advanced Studies
Develop code for FFT
function [ F Fr] = FCFT(fo,fl,x,fint,fs) i=1;for fr=fo:fint:fl w=2*pi*fr;u=1; for t=0:1/fs:0.5 X(u)=x(u)*exp(-1i*w*t); u=u+1; end N = length(X); F(i) = simp(X,N,1/fs); i = i + 1;endFr = fo:fint:fl; end
72
© M S Ramaiah School of Advanced Studies
Frequency Spectrum
73
© M S Ramaiah School of Advanced Studies
Area
74
function [A] = area(a,b,c)s = (a+b+c)/2;A = sqrt(s*(s-a)*(s-b)*(s-c));
© M S Ramaiah School of Advanced Studies
Function Syntax Summary
• If the m-file name and function name differ, the file name takes precedence
• Function names must begin with a letter
• First line must contain function followed by the most general calling syntax
• Statements after initial contiguous comments (help lines) are the body of the function
• Terminates on the last line or a return statement
75
© M S Ramaiah School of Advanced Studies
Function Syntax Summary (cont.)
• error and warning can be used to test and continue execution (error-handling)
• Scripts called in m-file functions are evaluated in the function workspace
• Additional functions (subfunctions) can be included in an m-file
• Use which command to determine precedence, e.g.,
>> which titleC:\MATLAB71\toolbox\matlab\graph2d\title
76
© M S Ramaiah School of Advanced Studies
if/elseif/else Statement>> A = 2; B = 3;>> if A > B 'A is bigger' elseif A < B 'B is bigger' elseif A == B 'A equals B' else error('Something odd is happening') endans =B is bigger
77
© M S Ramaiah School of Advanced Studies
switch Statement
>> n = 8n = 8>> switch(rem(n,3)) case 0 m = 'no remainder' case 1 m = ‘the remainder is one' case 2 m = ‘the remainder is two' otherwise error('not possible') endm =the remainder is two
78
© M S Ramaiah School of Advanced Studies
for Loop>> for i = 2:5
for j = 3:6
a(i,j) = (i + j)^2
end
end
>> a
a =
0 0 0 0 0 0
0 0 25 36 49 64
0 0 36 49 64 81
0 0 49 64 81 100
0 0 64 81 100 121
79
© M S Ramaiah School of Advanced Studies
A Performance Tip
Input variables are not copied into the function
workspace, unless
– If any input variables are changed, the variable will be copied
– Avoid performance penalty when using large arrays by extracting only those elements that will need modification
80
© M S Ramaiah School of Advanced Studies
MATLAB’s Search Path
• Is name a variable?
• Is name a built-in function?
• Does name exist in the current directory?
• Does name exist anywhere in the search path?
• “Discovery functions”: who, whos, what, which, exist, help, doc, lookfor, dir, ls, ...
81
© M S Ramaiah School of Advanced Studies
Changing the Search Path• The addpath command adds directories to the MATLAB search
path. The specified directories are added to the beginning of the search path.
• rmpath is used to remove paths from the search path
>> path
MATLABPATH
E:\MATLAB\R2006b\workE:\MATLAB\R2006b\work\f_funcsE:\MATLAB\R2006b\work\na_funcsE:\MATLAB\R2006b\work\na_scriptsE:\MATLAB\R2006b\toolbox\matlab\generalE:\MATLAB\R2006b\toolbox\matlab\ops
>> addpath('c:\');>> matlabpath
MATLABPATH
c:\E:\MATLAB\R2006b\workE:\MATLAB\R2006b\work\f_funcsE:\MATLAB\R2006b\work\na_funcsE:\MATLAB\R2006b\work\na_scriptsE:\MATLAB\R2006b\toolbox\matlab\generalE:\MATLAB\R2006b\toolbox\matlab\ops
© M S Ramaiah School of Advanced Studies
Lab 1
• Create, perhaps using for-loops, a synthetic “image” that has a 1 in the (1,1) location, and a 255 in the (128,128) location, and i + j - 1 in the i, j location. This we'll refer to as the ”diagonal gray'' image. Can you manage to do this without using for-loops?
• Display the image using (we’ll assume you placed your image in a matrix named a) image(a); colormap(gray). (Don’t worry if this doesn’t work exactly the way you expect. Colormaps can be tricky!)
• Now convert your code to a MATLAB script
• Test your script to insure that it produces the same results as the ones obtained interactively.
83
© M S Ramaiah School of Advanced Studies
Lab 2
• Write a MATLAB function that implements Newton’s iterative algorithm for approximating the square root of a number.
• The core of Newton’s algorithm is that if last is the last approximation calculated, the next (improved) approximation is given by
next = 0.5(last +(x/last)) where x is the number whose square root you seek.
• Two other pieces of information are needed to implement the algorithm. The first is an initial guess at the square root. (A typical starting value might be 1.0, say). The second is the accuracy required for the approximation. You might specify you want to keep iterating until you get an approximation that is good to 5 decimal places for example.
• Your MATLAB function should have three input arguments: x, the initial guess, and the accuracy desired. It should have one output, the approximate square root of x to the desired accuracy.
84
© M S Ramaiah School of Advanced Studies
Data I/O
85
© M S Ramaiah School of Advanced Studies
Loading and Saving Workspace Variables
• MATLAB can load and save data in .MAT format
• .MAT files are binary files that can be transferred across platforms; as much accuracy as possible is preserved.
• Load: load filename OR A = load(‘filename’)
loads all the variables in the specified file (the default name is MATLAB.MAT)
• Save: save filename variables
saves the specified variables (all variables by default) in the specified file (the default name is MATLAB.MAT)
86
© M S Ramaiah School of Advanced Studies
ASCII File Read/Write
load and save can also read and write ASCII files with
rows of space separated values:
• load test.dat –ascii
• save filename variables
(options are ascii, double, tabs, append)
• save example.dat myvar1 myvar2 -ascii -double
87
© M S Ramaiah School of Advanced Studies
ASCII File Read/Write (cont.)
• dlmread
M = dlmread(filename,delimiter,range);
reads ASCII values in file filename that are separated by delimiter into variable M; most useful for numerical values. The last value in a line need not have the delimiter following it.
range = [R1 C1 R2 C2] (upper-left to lower-right corner)
• dlmwrite
dlmwrite(filename,A,delimiter);
writes ASCII values in array A to file filename with values separated by delimiter
• Useful with spreadsheet data
range of data to be readrange of data to be read
88
© M S Ramaiah School of Advanced Studies
More ASCII File Read• textread
[A, B, C, ...] = textread[‘filename’, ‘format’];[A, B, C, ...] = textread[‘filename’, ‘format’, N];[...] = textread[..., ‘param’, ‘value’, ...];
• The type of each return argument is given by format (C-style conversion specifiers: %d, %f, %c, %s, etc…)
• Number of return arguments must match number of conversion specifiers in format
• format string is reused N times or entire file is read if N not given• Using textread you can
– specify values for whitespace, delimiters and exponent characters– specify a format string to skip over literals or ignore fields
89
© M S Ramaiah School of Advanced Studies
textread Example
• Data file, tab delimited:
• MATLAB m-file:
• Results:
‘param’,’value’ pairs
use doc textread for available param options
© M S Ramaiah School of Advanced Studies
Import WizardImport ASCII and binary files using the Import Wizard. Type uiimport at the Command line or choose Import Data from the File menu.
91
© M S Ramaiah School of Advanced Studies
Low-Level File I/O Functions• File Opening and Closing
– fclose: Close one or more open files – fopen: Open a file or obtain information about open files
• Unformatted I/O– fread: Read binary data from file – fwrite: Write binary data to a file
• Formatted I/O– fgetl: Return the next line of a file as a string
without line terminator(s) – fgets: Return the next line of a file as a string with line terminator(s) – fprintf: Write formatted data to file – fscanf: Read formatted data from file
92
© M S Ramaiah School of Advanced Studies
Low-Level File I/O (cont.)
• File Positioning– feof: Test for end-of-file – ferror: Query MATLAB about errors in file input
or output – frewind: Rewind an open file – fseek: Set file position indicator – ftell: Get file position indicator
• String Conversion– sprintf: Write formatted data to a string – sscanf: Read string under format control
93
© M S Ramaiah School of Advanced Studies
File Open (fopen)/Close (fclose)• fid = fopen(‘filename’, ‘permission’);
• status = fclose(fid);
File identifiernumber
Name offile
Permissionrequested:‘r’, ’r+’‘w’, ’w+’‘a’, ’a+’
0, if successful-1, otherwise
File identifier numberor ‘all’ for all files
94
© M S Ramaiah School of Advanced Studies
Formatted I/O• fscanf: [A, count] = fscanf(fid,format,size);
• fprintf: count = fprintf(fid, format, A,...);
Dataarray
Numbersuccessfully
read
Fileidentifiernumber
Amount of data to read:
n, [n, m], Inf
Formatspecifier
Numbersuccessfully
read
Fileidentifiernumber
Formatspecifier
Dataarray(s) to
write
fscanf and fprintf are similar to C version but vectorized
95
© M S Ramaiah School of Advanced Studies
Format String Specification
%-12.5einitial %character
width andprecision
conversionspecifier
alignment flag
Specifier Description %c Single character %d Decimal notation (signed) %e Exponential notation %f Fixed-point notation %g The more compact of %e or %f %o Octal notation (unsigned) %s String of characters %u Decimal notation (unsigned) %x Hexadecimal notation ...others...
96
© M S Ramaiah School of Advanced Studies
Other Formatted I/O Commands• fgetl: line = fgetl(fid);
reads next line from file without line terminator
• fgets: line = fgets(fid);reads next line from file with line terminator
• textread: [A,B,C,...] = textread('filename','format',N)reads N lines of formatted text from file filename
• sscanf: A = sscanf(s, format, size);reads string under format control
• sprintf: s = sprintf(format, A);writes formatted data to a string
97
© M S Ramaiah School of Advanced Studies
Binary File I/O• [data, count] = fread(fid, num, precision);
• count = fwrite(fid, data, precision);
Dataarray
Numbersuccessfully
read
Fileidentifiernumber
Amount to read n, [n, m],...
‘int’, ‘double’, …
array towrite
Numbersuccessfully
written
Fileidentifiernumber
‘int’, ‘double’, …
fread and fwrite are vectorized
98
© M S Ramaiah School of Advanced Studies
Basic Data Analysis
99
© M S Ramaiah School of Advanced Studies
Basic Data Analysis
• Basic, and more advanced, statistical analysis is easily accomplished in MATLAB.
• Remember that the MATLAB default is to assume vectors are columnar.
• Each column is a variable, and each row is an observation.
100
© M S Ramaiah School of Advanced Studies
Vibration Sensors Data
Each column is the raw rpm sensor data from a different sensor used in an instrumented engine test. The rows represent the times readings were made.
Each column is the raw rpm sensor data from a different sensor used in an instrumented engine test. The rows represent the times readings were made.
101
© M S Ramaiah School of Advanced Studies
Plotting the Data
Note that in this case the plot command generates one time-series for each column of the data matrix
Note that in this case the plot command generates one time-series for each column of the data matrix
>> plot(rpm_raw)>> xlabel('sample number - during time slice');>> ylabel('Unfiltered RPM Data');>> title(‘3 sequences of samples from RPM sensor’)
102
© M S Ramaiah School of Advanced Studies
Average of the Data:
Applying the mean function to the data matrix yields the mean of each column
Applying the mean function to the data matrix yields the mean of each column
But you can easily compute the mean of the entire matrix (applying a function to either a single row or a single column results in the function applied to the column, or the row, i.e., in both cases, the application is to the vector).
But you can easily compute the mean of the entire matrix (applying a function to either a single row or a single column results in the function applied to the column, or the row, i.e., in both cases, the application is to the vector).
1
2
>> mean(rpm_raw)
ans = 1081.4 1082.8
1002.7
>> mean(mean(rpm_raw))
ans = 1055.6
103
© M S Ramaiah School of Advanced Studies
The mean Function
But we can apply the mean function along any dimension
But we can apply the mean function along any dimension
So we can easily obtain the row means
So we can easily obtain the row means
3
>> help mean MEAN Average or mean value. For vectors, MEAN(X) is the mean value of the elements in X. For matrices, MEAN(X) is a row vector containing the mean value of each column. For N-D arrays, MEAN(X) is the mean value of the elements along the first non-singleton dimension of X. MEAN(X,DIM) takes the mean along the dimension DIM of X. Example: If X = [0 1 2 3 4 5] then mean(X,1) is [1.5 2.5 3.5] and mean(X,2) is [1 4]>> mean(rpm_raw, 2)
ans = 1045.7 1064.7 1060.7 1055 1045
104
© M S Ramaiah School of Advanced Studies
max and its Index
We can compute the max of the entire matrix, or of any dimension
We can compute the max of the entire matrix, or of any dimension
1 2 MAX Largest component. For vectors, MAX(X) is the largest
element in X. For matrices, MAX(X) is a row vector containing the
maximum element from each column. For N-D arrays, MAX(X) operates
along the first non-singleton dimension.
[Y,I] = MAX(X) returns the indices
of the maximum values in vector I. If the values along the first non-
singleton dimension contain more than one maximal element, the index
of the first one is returned.
>> max(rpm_raw)ans = 1115 1120 1043
>> max(max(rpm_raw))ans = 1120
>> [y,i] = max(rpm_raw)y = 1115 1120 1043i = 8 2 17
max along the columnsmax along the columns
105
© M S Ramaiah School of Advanced Studies
min
>> min(rpm_raw)ans = 1053 1053 961
>> min(min(rpm_raw))ans = 961
>> [y,i] = min(rpm_raw)y = 1053 1053 961i = 22 1 22
min along each columnmin along each column
min of entire matrixmin of entire matrix
106
© M S Ramaiah School of Advanced Studies
Standard Deviation, Median, Covariance
>> median(rpm_raw) % median along each columnans = 1080 1083.5 1004>> cov(rpm_raw) % covariance of the dataans = 306.4 -34.76 32.192 -34.76 244.9 -165.21 32.192 -165.21 356.25>> std(rpm_raw) % standard deviation along each
columnans = 17.504 15.649 18.875>> var(rpm_raw) % variance is the square of stdans = 306.4 244.9 356.25
107
© M S Ramaiah School of Advanced Studies
Data Analysis: Histogram
HIST Histogram. N = HIST(Y) bins the elements of Y into 10 equally spaced containers and returns the number of elements in each container. If Y is a matrix, HIST works down the columns. N = HIST(Y,M), where M is a scalar, uses M bins. N = HIST(Y,X), where X is a vector, returns the distribution of Y among bins with centers specified by X. The first bin includes data between -inf and the first center and the last bin includes data between the last bin and inf. Note: Use HISTC if it is more natural to specify bin edges instead.
. . .
108
© M S Ramaiah School of Advanced Studies
Histogram (cont.)>> hist(rpm_raw) %histogram of the data
109
© M S Ramaiah School of Advanced Studies
Histogram (cont.) >> hist(rpm_raw, 20) %histogram of the data
110
© M S Ramaiah School of Advanced Studies
Histogram (cont.)>> hist(rpm_raw, 100) %histogram of the data
111
© M S Ramaiah School of Advanced Studies
Bin Average Filtering FILTER One-dimensional digital filter. Y = FILTER(B,A,X) filters the data in vector X with the filter described by vectors A and B to create the
filtered data Y. The filter is a "Direct Form II Transposed" implementation of the standard difference equation: a(1)*y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-
nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-
na)
>> filter(ones(1,3), 3, rpm_raw) ans = 359 351 335.67 719 724.33 667 1088.3 1081.7 1001 1084 1091.7 1004.7 1081 1073 1006.7
This example uses an FIR filter to compute a moving average using a window size of 3
This example uses an FIR filter to compute a moving average using a window size of 3
112
© M S Ramaiah School of Advanced Studies
Filtered Data Plot
113
© M S Ramaiah School of Advanced Studies
Load .dat file and carryout analysis
% MATLAB PROGRAM ecg_hfn.m
clear all % clears all active variables
close all
ecg = load('ecg_hfn.dat');
fs = 1000; %sampling rate = 1000 Hz
zero_padding = 0; % Number of samples to be added as zero padding
slen = length(ecg); %signal length
t=[1:slen]/fs;
ts=1/fs;
figure(1)
subplot(2,1,1),plot(t, ecg)
axis tight;
xlabel('Time in seconds');
ylabel('Amplitude in mV');
Title('Raw ECG');
% frequency domain
fft_samples = 2^nextpow2(slen + zero_padding);
raw_fft = fft(ecg,fft_samples);
f_axis = 0:1:(fft_samples-1)/2; % fft_samples -1 because we start at 0
avg_power = sum(abs(raw_fft(1:fft_samples/2)).^2./slen)/slen;
subplot(2,1,2)
plot( f_axis*fs/fft_samples, ...
abs(raw_fft(1:fft_samples/2))*2/slen,f_axis*fs/fft_samples,avg_power);
title('Raw ECG Frequency Domain');
ylabel('Magnitude [Normalized]');
xlabel('Frequency [Hz]');
% power spectrum in dB figure(3);psd(ecg,slen,1000)title('Power spectral density'); % high pass filter fc1= 0.5; % cut off frequencyn1=2;% order of filterwn1=(2*fc1/fs);[b1,a1] = butter(n1,wn1,'high');h1=filter(b1,a1,ecg);figure(5);plot(h1);xlabel('no. of samples');title('High pass filtered ECG at 0.5Hz');ylabel('Amplitude in mV');figure(6)freqz(b1,a1);title('High Pass Filter characteristics');
114
© M S Ramaiah School of Advanced Studies
Load .dat file and carryout analysis
% frequency domain
raw_fft1= fft(h1,fft_samples);
f_axis1= 0:1:(fft_samples-1)/2; % fft_samples -1 because we start at 0
avg_power1 = sum(abs(raw_fft1(1:fft_samples/2)).^2./slen)/slen;
figure(7);
plot( f_axis1*fs/fft_samples, ...
abs(raw_fft1(1:fft_samples/2))*2/slen,f_axis1*fs/fft_samples,avg_power1);
title('High pass filtered ECG signal frequency domain');
ylabel('Magnitude [Normalized]');
xlabel('Frequency [Hz]');
%notch filter
f = 0:fs/2;
F0 = 60; % Center frequency of notch filter in Hz
delF = 2; % bandwidth in Hz
Theta0 = (2*pi*F0)/fs;
r = 1 - (delF*pi)/fs;
% Notch filter coefficient
b0 = (abs(1-2*r*cos(Theta0)+r^2))/(2*abs(1-cos(Theta0)));
b2 = [b0 (b0*(-2)*cos(Theta0)) b0]; % Numerator coefficients for filter
a2 = [1 (-2*r*cos(Theta0)) r^2]; % Denominator coefficients for filter
h2 = filter(b2,a2,h1); % notch filterfigure(8);plot(h2)xlabel('no. of samples');title('Notch filtered ECG at 60 Hz');ylabel('Amplitude in mV ');figure(9);freqz(b2,a2);title('Notch Filter characteristics'); % frequency domain raw_fft2= fft(h2,fft_samples);f_axis2= 0:1:(fft_samples-1)/2; % fft_samples -1 because
we start at 0avg_power2 =
sum(abs(raw_fft2(1:fft_samples/2)).^2./slen)/slen;figure(10);plot( f_axis2*fs/fft_samples, ...
abs(raw_fft2(1:fft_samples/2))*2/slen,f_axis2*fs/fft_samples,avg_power2);
title('Notch filtered signal Frequency Domain');ylabel('Magnitude [Normalized]');xlabel('Frequency [Hz]');
115
© M S Ramaiah School of Advanced Studies
Load .dat file and carryout analysis
% IIR Low pass filter
fc3= 40;
n3=2;
wn3=(2*fc3/fs);
[b3,a3] = butter(n3,wn3);
h3=filter(b3,a3,h2);
figure(11);
plot(h3);
xlabel('Time in seconds');
title('Low pass filtered ECG at 40 Hz');
ylabel('LPF ECG');
figure(12)
freqz(b3,a3);
title('Low Pass Filter characteristics');
% frequency domain
raw_fft3= fft(h3,fft_samples);
f_axis3= 0:1:(fft_samples-1)/2; % fft_samples -1 because we start at 0
avg_power3 = sum(abs(raw_fft3(1:fft_samples/2)).^2./slen)/slen;
figure(13);
plot( f_axis3*fs/fft_samples, ...
abs(raw_fft3(1:fft_samples/2))*2/slen,f_axis3*fs/fft_samples,avg_power3);
title('Low pass filtered signal Frequency Domain');
ylabel('Magnitude [Normalized]');
xlabel('Frequency [Hz]');
% 1 epoch
figure(1)
subplot(4,1,1); plot(ecg(1:800));xlabel('samples');ylabel('Amplitude in mV');title('raw ECG');
subplot(4,1,2); plot(h1(1:800));xlabel('samples');;ylabel('Amplitude in mV');title('HPF ECG');
subplot(4,1,3); plot(h2(1:800));xlabel('samples');ylabel('Amplitude in mV');title('Notch ECG');
subplot(4,1,4); plot(h3(1:800));xlabel('samples');ylabel('Amplitude in mV');title('LPF ECG');
116
© M S Ramaiah School of Advanced Studies
Lab 1
• Load the data_analysis_lab1.mat file into the MATLAB workspace. This will produce an array variable called grades containing grades on an exam between 0 and 100.
• Calculate the average and standard deviation of the grades.
• Plot a histogram of the grades using 100 bins.
• We want to compare the histogram with a Gaussian distribution.
• Write you own MATLAB Gaussian function M-file which returns a value y using the following formula
y=exp(-[x-m]2/2σ2)
where m is the average and σ is the standard deviation of the distribution. Your function should have input arguments x,m, and σ.
• On the histogram plot also plot a Gaussian distribution of the grades using the calculated average and standard deviation.
117
© M S Ramaiah School of Advanced Studies
Lab 2
• Load the file data_analysis_lab2.mat. Since this is a .mat file, you should be able to load it easily using the load command.
• Your workspace should now contain a single variable x. x is 3000 points long and consists of the sum of 3 sine waves. The sampling frequency is 1000 Hz.
• Plot the first 0.33 seconds of x. You may find it convenient to create a second array (say called time) that has the time values corresponding to the samples in x.
>> Fs = 1000; %Sampling frequency >> time = [0:length(x)-1]’*(1/Fs); % time index• fft is a built-in function in MATLAB. We can compute and plot the magnitude
of the FFT of x to identify the frequencies of the sine waves. >> X = fft(x);• X is a complex valued array that is the FFT of x. We can compute the magnitude
of the FFT by taking the absolute value of X. >> Xmag = abs(X); >> plot(Xmag);
118
© M S Ramaiah School of Advanced Studies
Lab 2 (cont.)
• The plot of Xmag shows 6 components, and also we have only index values not real frequency values along the abscissa. Six components show up because the FFT is evaluated over positive and negative frequencies. Also, the frequencies are “wrapped around”. We can take care of the wrap around using the fftshift function.
>> Xmag = fftshift(Xmag);• Next, we can generate a suitable frequency axis for plotting Xmag.
>> frq = [0:length(Xmag)-1]’*(Fs/length(Xmag)) – (Fs/2);
>> plot(frq, Xmag);• Can you see the 3 frequency components (in the positive freq. part of
the axis)? Zoom into the plot either using the axis command or the interactive zoom button on the figure’s toolbar and determine the frequencies of the 3 components.
119
© M S Ramaiah School of Advanced Studies
Matrix Factorizations: lu
lu: factors a square matrix A into the product of a permuted lower triangular matrix L and an upper triangular matrix U such that A = LU.
Useful in computing inverses, Gaussian elimination.
>> A = [1 2 -1; 1 0 1; -1 2 1];
>> [L, U] = lu(A)L = 1 0 0 1 -0.5 1 -1 1 0U = 1 2 -1 0 4 0 0 0 2>> L * Uans = 1 2 -1 1 0 1 -1 2 1
© M S Ramaiah School of Advanced Studies
Matrix Factorizations: chol
chol: factors a symmetric, positive definite matrix A as RTR, where R is upper triangular.
Useful in solving least
squares problems.
>> A = [2 -1; 1 1; 6 -1];>> B = A'*AB = 41 -7 -7 3>> R = chol(B)R = 6.4031 -
1.0932 0
1.3435>> R'*Rans = 41 -7 -7 3
© M S Ramaiah School of Advanced Studies
Eigenvalues and Eigenvectors: eig
eig: computes the eigenvalues, i and eigenvectors, xi of a square matrix A..
• i and xi satisfy
Axi = i xi
• [V,D] = eig(A) returns the eigenvectors of A in the columns of V, and the eigenvalues in the diagonal elements of D.
>> A = [1 -1 0; 0 1 1; 0 0 -2];
>> [V, D] = eig(A)V = 1 1 -0.10483 0 0 -0.31449 0 0 0.94346D = 1 0 0 0 1 0 0 0 -2>> [A*V(:,3) D(3,3)*V(:,3)]ans = 0.20966 0.20966 0.62897 0.62897 -1.8869 -1.8869
© M S Ramaiah School of Advanced Studies
Singular Value Decomposition: svdsvd: factors an n x m matrix
A as A = USVT, where U and V are orthogonal matrices, and S is a diagonal matrix with singular values of A.
• Useful in solving least squares problems.
>> A = [2 -1; 1 1; 6 -1];>> [U,S,V] = svd(A)U = -0.32993 0.47852 -
0.81373 -0.12445 -0.87653 -
0.46499 -0.93577 -0.052149
0.34874S = 6.4999 0 0 1.3235 0 0V = -0.98447 -0.17558 0.17558 -0.98447
© M S Ramaiah School of Advanced Studies
Pseudoinverse: pinv
pinv: The pseudoinverse of an n x m matrix A is a matrix B such that
BAB = B and
ABA = A
• MATLAB uses the SVD of A to compute pinv.
• Useful in solving least squares problems.
>> A = [2 -1; 1 1; 6 -1];>> B = pinv(A)B = -0.013514 0.13514 0.14865 -0.36486 0.64865
0.013514>> A*B*Aans = 2 -1 1 1 6 -1>> B*A*Bans = -0.013514 0.13514 0.14865 -0.36486 0.64865
0.013514
© M S Ramaiah School of Advanced Studies
Numerical Integration
• trapz: Trapezoidal integration
• quad: Adaptive, recursive Simpson’s Rule for quadrature
• quadl: Adaptive, recursive Newton-Coates
8-panel rule
• dblquad: Double integration using quad or quadl
125
© M S Ramaiah School of Advanced Studies
Integration Example: humps Function
>> x = linspace(-1,2,150);>> y = humps(x);>> plot(x,y)>> format long>> trapz(x,y) % 5-digit accuracyans = 26.344859225225534
>> quad('humps', -1, 2) % 6-digit accuracy
ans = 26.344960501201232
>> quadl('humps', -1, 2) % 8-digit accuracy
ans = 26.344960471378968
126
© M S Ramaiah School of Advanced Studies
Root Finding and Minimization
• roots: finds roots of polynomials
• fzero: finds roots of a nonlinear function of one
variable
• fminbnd, fminsearch: finds maxima and
minima of functions of one and several variables
127
© M S Ramaiah School of Advanced Studies
Example of Polynomial Roots
p(x)=x3+4x2-7x-10
128
© M S Ramaiah School of Advanced Studies
Example of Roots for Nonlinear Functions
129
© M S Ramaiah School of Advanced Studies
Example of Function Minimization
>> p = [1 0 -2 -5];>> x = linspace(0,2,100);>> y = polyval(p,x);>> plot(x,y)>> fminbnd('x.^3-2*x-5',0,2)ans = 0.8165
>> polyval(p,ans)ans = -6.0887
130
© M S Ramaiah School of Advanced Studies
Lab 1
• Consider the set of equations Ax=b where A is an 8x8 matrix given by
A(i,j)=1.0+(|i-j|/8.0)½
• and b is a 8x1 array given by
b(i)=i• Solve for x using:
– The \ operator
– The MATLAB pinv function
– The MATLAB inv function
– LU Decomposition
• How do your answers compare?
• For best performance, evaluate the matrix A without using any for loops
131
© M S Ramaiah School of Advanced Studies
Lab 2
• Use numerical integration to integrate 1/(1+x2) from 0 to 1. The result is analytically calculated to be /4.
• Use the following three MATLAB functions:– trap()– quad()– quadl()
and compare the accuracy of your numerical result with the exact value.
• Use quad or quadl to get the most accurate result possible with MATLAB. How accurate is it?
132
© M S Ramaiah School of Advanced Studies
Tool boxes
• Signal and Image processing
• Audio processing
– wavread
– aviread
133
© M S Ramaiah School of Advanced Studies
WAV READclose all;clear all;clc%%%%%%%%%%%%%%%%%%% READ SIGNAL [s, fs, nbits, readinfo] = wavread('ak47-1.wav'); s=s(:,1)';L=length(s);t=1:L;t=t/fs;figure; plot(t,s)s1=s+awgn(s,10);figure; plot(t,s1)% xlabel('time in seconds');% ylabel('Amplitude');% title('AK47 Signal');N=1024;X = fft(s,N);F=fs*linspace(0,1,N);figure;plot(F(1:N/2),abs(X(1:N/2))); xlim([0 2000]); title('raw signal')X1 = fft(s1,N);F=fs*linspace(0,1,N);figure;plot(F(1:N/2),abs(X1(1:N/2))); xlim([0 2000]); title('noisy signal')% xlabel('frequency');% ylabel('Magnitude');% title('FFT of input AK47 Signal');
134
© M S Ramaiah School of Advanced Studies
AVI READ• clc;• clear all;• close all;• • • %----------------Inputs---------------------• • video = '7.avi';• Frm = 17;• • • %--------Reading Frame from Video-----------• a = aviread(video,Frm)• im5 = a.cdata;• • a = aviread(video,Frm+1)• im6 = a.cdata;• • %--------Converting Grey Scale-----------• • im3=rgb2gray(im5);• im4=rgb2gray(im6);• • %----------1 st Level Pyramid-----------• • im3=impyramid(im3,'reduce');• im4=impyramid(im4,'reduce');• • %----------2 nd Level Pyramid----------- • • im3=impyramid(im3,'reduce');• im4=impyramid(im4,'reduce');• • figure; imshow(im3)• figure;imshow(im4)
135
© M S Ramaiah School of Advanced Studies
Thank You
136