<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-33845523</id><updated>2012-02-16T06:17:51.305-08:00</updated><title type='text'>/*Class: Blog.cpp*/</title><subtitle type='html'>while(!Myself-&gt;is_full_knowledge())
     Myself-&gt;learn(Myself-&gt;enjoy);</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>24</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-33845523.post-4442422834151416804</id><published>2007-10-07T21:30:00.000-07:00</published><updated>2007-10-07T21:31:37.954-07:00</updated><title type='text'>Mathematics Complete(All books Categorized)</title><content type='html'>Mathematics Complete(All books Categorized)              &lt;div class="postbody"&gt;Algebra :&lt;br /&gt;&lt;br /&gt;A Computational Introduction To Number Theory And Algebra - Victor Shoups&lt;br /&gt;A course in computational algebraic number theory - Cohen&lt;br /&gt;A Course in Homological Algebra - P. Hilton, U. Stammbach&lt;br /&gt;A Course In Universal Algebra - S. Burris and H.P. Sankappanavar&lt;br /&gt;A First Course In Linear Algebra - Robert A. Beezer&lt;br /&gt;A First Course in Noncommutative Rings - T. Lam&lt;br /&gt;A Primer of Algebraic D-modules - S. Coutinho&lt;br /&gt;Abel's Theorem in Problems and Solutions - V.B. Alekseev&lt;br /&gt;Abstract Algebra - the Basic Graduate Year - R. Ash&lt;br /&gt;Advanced Modern Algebra - Joseph J. Rotman&lt;br /&gt;Algebra &amp;amp; Trigonometry Graphs &amp;amp; Models 3rd ed - Marvin L. Bittinger&lt;br /&gt;Algebra Abstract - Robert B. Ash&lt;br /&gt;Algebra Demystified - Rhonda Huettenmueller&lt;br /&gt;Algebra I Basic Notions Of Algebra - Kostrikin A I , Shafarevich I R&lt;br /&gt;Algebra Sucsess In 20 Minutes a Day - LearningExpress&lt;br /&gt;Algebraic D-modules - A. Borel et. al&lt;br /&gt;Algebraic Groups and Discontinuous Subgroups - A. Borel, G. Mostow&lt;br /&gt;Algebraic Surfaces and Holomorphic Vector Bundles - R. Friedman&lt;br /&gt;Algorithmic Algebra - B. Mishra&lt;br /&gt;Algorithms for Computer Algebra - K. Geddes, S. Czapor, G. Labahn&lt;br /&gt;An Elementary Approach to Homological Algebra - L. Vermani&lt;br /&gt;An Introduction To Linear Algebra - Kenneth Kuttler&lt;br /&gt;Applications of Abstract Algebra with MAPLE - R. Klima, N. Sigmon, E. Stitzinger&lt;br /&gt;Applied Linear Algebra And Matrix Analysis - Thomas S. Shores&lt;br /&gt;Applied Numerical Linear Algebra - James W. Demmel&lt;br /&gt;Bialgebraic Structures - W. Kandasamy&lt;br /&gt;Calculus approach to matrix eigenvalue algorithms - Hueper&lt;br /&gt;Commutative Algebra 2nd ed. - H. Matsumura&lt;br /&gt;Commutative Ring Theory - H. Matsumura&lt;br /&gt;Compact Numerical Methods for Computers Linear Algebra and Function Minimisation 2Ed - Adam Hilger&lt;br /&gt;Computational Commutative Algebra - Kreuzer and Robbiano&lt;br /&gt;Computer Algebra and Differential Equations - E. Tournier&lt;br /&gt;Determinants and Their Applications in Mathematical Physics - R. Vein, P. Dale&lt;br /&gt;Differential Galois Theory - M. van der Put, M. Singer&lt;br /&gt;Elementary Linear Algebra - K. R. MATTHEWS&lt;br /&gt;Elements of Abstract and Linear Algebra - E. H. Connell&lt;br /&gt;Fileds and Galois Theory [jnl article] - J. Milne&lt;br /&gt;fundamental problems in algorithmic algebra - chee keng yap&lt;br /&gt;Galois Theory 2nd ed. - E. Artin&lt;br /&gt;Group Characters, Symmetric Functions and the Hecke Algebras - D. Goldschmidt&lt;br /&gt;Handbook of Algebra Vol 1 - M. Hazewinkel&lt;br /&gt;Handbook of Algebra Vol 2 - M. Hazewinkel&lt;br /&gt;Hankel and Toeplitz Matrices and Forms - I. Iohvidov&lt;br /&gt;Homotopical Algebra - D. Quillen&lt;br /&gt;Intro Abstract Algera - P.Garret&lt;br /&gt;Introduction to Commutative Algebra - M. Atiyah, I. Macdonald&lt;br /&gt;Invitation to Higher Local Feilds - I. Fesenko, M. Kurihara&lt;br /&gt;Lectures on Matrices - wedderburn&lt;br /&gt;Linear Algebra - Jim Hefferon&lt;br /&gt;Linear algebra 3ed - Greub, W.H&lt;br /&gt;Linear Algebra And Its Applications   - David C Lay&lt;br /&gt;Linear Algebra and Its Applications 3e - Gilbert Strang&lt;br /&gt;Linear Algebra and Multidimensional Geometry - R. Sharipov&lt;br /&gt;LINEAR ALGEBRA and SMARANDACHE LINEAR ALGEBRA - w. b. vasantha kandasamy&lt;br /&gt;Linear Algebra Done Right, 2nd Ed - Sheldon Axler&lt;br /&gt;Linear Algebra Gateway to Mathematics -  Robert Messer&lt;br /&gt;Linear Algebra with Applications 3rd Edition -  Nicholson, W. Keith&lt;br /&gt;Linear Algebra, 2Nd Edition - Kenneth Hoffmann And Ray Kunze&lt;br /&gt;Linear algebraic groups 2ed - Borel A&lt;br /&gt;Logic and Boolean Algebra - Kathleen and Hilbert Levitz&lt;br /&gt;Matrices Over Commutative Rings - W. Brown&lt;br /&gt;Matrices theory and applications  - Serre D.&lt;br /&gt;Matrix Analysis &amp;amp; Applied Linear Algebra - Carl D Meyer&lt;br /&gt;Matrix Theory - [jnl article] - T. Banks&lt;br /&gt;Methods of Homological Algebra - S. Gelfand, Y. Manin&lt;br /&gt;Modern Algebra With Applications 2Ed - Gilbert, Nicholson&lt;br /&gt;Modern Computer Algebra - Von Zur Gathen, Gerhard&lt;br /&gt;Operator Algebras and Quantum Statistical Mechanics V1 2nd ed. - O. Bratelli.djv&lt;br /&gt;Operator Algebras and Quantum Statistical Mechanics V2 2nd ed. - O. Bratelli.djv&lt;br /&gt;Polynomials and Polynomial Inequalities&lt;br /&gt;Quadratic Forms and their Applications&lt;br /&gt;Ring of Quotients - Introduction to Methods of Ring Theory - Bo Stenstrom&lt;br /&gt;SCHAUM'S OUTLINE OF THEORY AND PROBLEMS OF LINEAR ALGEBRA Second Edition - SEYMOUR LIPSCHUTZ&lt;br /&gt;Schemes - D. Eisenbud, J. Harris&lt;br /&gt;SMARANDACHE FUZZY ALGEBRA - W. B. Vasantha Kandasamy&lt;br /&gt;Smarandache Loops - W. Kandasamy&lt;br /&gt;Smarandache Near-Rings - W. Kandasamy&lt;br /&gt;Smarandache Rings - W. Kandasamy&lt;br /&gt;Smarandache Semirings, Semifields,Semi Vector Spaces - W. Kandasamy&lt;br /&gt;Structure and Representation of Jordan Algebras - N. Jacobson&lt;br /&gt;The Algebraic Theory of Spinors and Clifford Algebras  - C. Chevalley&lt;br /&gt;The Theory Of Algebraic Numbers 2nd ed. - H. Pollard, H. Diamond&lt;br /&gt;Toposes, Triples and Theories - M. Barr, W. Wells&lt;br /&gt;Treatise on Quantum Clifford Algebras - Fauser&lt;br /&gt;Vector Math for 3D Computer Graphics - Interactive Tutorial&lt;br /&gt;Workbook in Higher Algebra - David Surowski&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://www.rapidsafe.net/rc-MmMygDOxcTM/Algebra.part1.rar&lt;br /&gt;http://www.rapidsafe.net/rc-QzMzgDOxcTM/Algebra.part2.rar&lt;br /&gt;http://www.rapidsafe.net/rc-UjZzgDOxcTM/Algebra.part3.rar&lt;br /&gt;http://www.rapidsafe.net/rc-EWO0gDOxcTM/Algebra.part4.rar&lt;br /&gt;http://www.rapidsafe.net/rc-E2N1gDOxcTM/Algebra.part5.rar&lt;br /&gt;http://www.rapidsafe.net/rc-gDN2gDOxcTM/Algebra.part6.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Algebraic geometry :&lt;br /&gt;&lt;br /&gt;Abelian Varieties - D. Mumford&lt;br /&gt;Algebraic Curves and Riemann Surfaces - R. Miranda&lt;br /&gt;Algebraic Geometry - D. Bump&lt;br /&gt;Algebraic Geometry - Js Mine&lt;br /&gt;Algebraic Geometry - R. Hartshorne&lt;br /&gt;Algebraic geometry I-V - Shafarevich I.R&lt;br /&gt;Algebraic Geometry I. From Algebraic Varieties to Schemes - K. Ueno&lt;br /&gt;Combinatorial Convexity and Algebraic Geometry - G. Ewald&lt;br /&gt;Commutative Algebra, with a View Toward Algebraic Geometry - D. Eisenbud&lt;br /&gt;Computational Algebraic Geometry - F. Eyssette, A. Galligo&lt;br /&gt;Current Trends in Arithmetical Algebraic Geometry - K. Ribet&lt;br /&gt;Geometric Algebra - E. Artin.djv&lt;br /&gt;Geometric Algebra and its Application to Mathematical Physics - C. Doran&lt;br /&gt;Geometry of Algebraic Curves (vol 1) - E. Arabello, M. Cornalba, P. Griffiths, J. Harris&lt;br /&gt;Introduction to Algebraic Geometry - Dolgachev&lt;br /&gt;Mirror  Symmetry and Algebraic Geometry - D. Cox, S. Katz&lt;br /&gt;Moduli of Curves - J. Harris, I. Morrison&lt;br /&gt;Positivity In Algebraic Geometry - R. Lazarsfeld&lt;br /&gt;Real Algebraic Geometry - J. Bochnak, M. Coste, M. Roy&lt;br /&gt;Zeta Functions, Introduction to Algebraic Geometry - Thomas&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt; http://www.rapidsafe.net/rc-gDNxgDOxcTM/Algebraic_geometry.part1.rar&lt;br /&gt;http://www.rapidsafe.net/rc-cjNxgDOxcTM/Algebraic_geometry.part2.rar&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Analysis :&lt;br /&gt;&lt;br /&gt;A Course of Higher Mathematics vol 1 - V. Smirnov.djv&lt;br /&gt;A Course of Higher Mathematics vol 2 - V. Smirnov.djv&lt;br /&gt;A Course of Modern Analysis 4th ed. - E. Whittaker, G. Watson.djv&lt;br /&gt;A Quick Introduction to Tensor Analysis - R. Sharipov&lt;br /&gt;Acourse of pure mathematics - Hardy&lt;br /&gt;Algebraic Numbers and Fourier Analysis - Salem&lt;br /&gt;An Introduction to Complex Analysis for Engineers - M. Adler&lt;br /&gt;An Introduction To Functional Analysis - Vitali Milman&lt;br /&gt;An Introduction to Numerical Analysis for Electrical and Computer Engineers - Wiley&lt;br /&gt;Analysis - Hyland&lt;br /&gt;Analysis and Simulation of Chaotic Systems 2nd ed. - F. Hoppensteadt&lt;br /&gt;Applied and Computational Complex Analysis Vol 1 - P. Henrici&lt;br /&gt;Applied and Computational Complex Analysis Vol 2 - P. Henrici&lt;br /&gt;Applied Nonlinear Analysis - A. Sequeira, H. da Vega, J. Videman.djv&lt;br /&gt;Automorphic Forms on GL(2) - H. Jacquet, R. Langlands&lt;br /&gt;Automorphic Forms, Representations and L-Functions Part 1 - A. Borel, W. Casselman&lt;br /&gt;Automorphic Forms, Representations and L-Functions Part 2 - A. Borel, W. Casselman&lt;br /&gt;Basic Analysis - K. Kuttler&lt;br /&gt;Basic Elements of Real Analysis - M. Protter&lt;br /&gt;Basic Math Conecpts - E. Zakon&lt;br /&gt;Complex Analysis - Ahlfors&lt;br /&gt;Complex Analysis - cain&lt;br /&gt;Complex Analysis - K. Houston&lt;br /&gt;Complex Analysis 2nd ed. - L. Alhford&lt;br /&gt;Computer Analysis of Number Sequences - H. Ibstedt&lt;br /&gt;Convex Analysis and Non Linear Optimization Theory and Examples - Borwein,Lewis&lt;br /&gt;Differential Inequalities - J. Szarski.djv&lt;br /&gt;Elementary Numerical Analysis  An Algorithmic Approach, 3rd Ed - de Boor&lt;br /&gt;Finite Element Analysis Theory and Application with ANSYS - S. Moaveni&lt;br /&gt;Foundations of Algebra and Analysis - C. Dodge&lt;br /&gt;Foundations of modern analysis - Friedman&lt;br /&gt;Foundations of Real and Abstract Analysis - Axler , Gehring , Ribet&lt;br /&gt;Fourier analysis on groups - Rudin, Walter&lt;br /&gt;Fourier Theory - B. Clarke&lt;br /&gt;Functional Analysis - K Yoshida&lt;br /&gt;Functional Analysis - W. Rudin&lt;br /&gt;Functional Analysis and Semi-Groups - E. Hille, R. Phillips&lt;br /&gt;Functional Equations in a Single Variable - M. Kuczma.djv&lt;br /&gt;Functional Operators, Vol.1 - Measures and Integrals - J. von Neumann&lt;br /&gt;Functions of One Complex Variable 2nd ed. - J. Conway&lt;br /&gt;Fundamental Numerical Methods and Data Analysis - G. W. Collins&lt;br /&gt;Harmonic Analysis And Partial Differential Equations - B. Dahlberg, C. Kenig&lt;br /&gt;Harmonic Analysis on Semisimple Lie Groups - V. Varadarajan.djv&lt;br /&gt;Harmonic Analysis, Real Variable Methods Orthogonality &amp;amp; Oscillatory Integrals - Stein&lt;br /&gt;Homeomorphisms in Analysis - C. Goffman, T. Nishiura, D. Waterman.djv&lt;br /&gt;Integral Equations - A Practical Treatment - D. Porter, D. Stirling.djv&lt;br /&gt;Integral Equations - H. Hochstadt.djv&lt;br /&gt;Introduction to Complex Analysis - R. Nevanlinna, V. Paatero&lt;br /&gt;Introduction to Complex Analysis Lecture notes - W. Chen&lt;br /&gt;Introduction to Numerical Analysis 2 ed - J.Stoer,R.Bulirsch&lt;br /&gt;Introduction To p-adic Numbers and p-adic Analysis - A. Baker&lt;br /&gt;Introduction to the theory of Fourier's series and integrals 2ed- Carslaw H.S.&lt;br /&gt;Introductory Real Analysis - A. Kolmogorov, S. Fomin&lt;br /&gt;Manifolds, Tensor Analysis and Applications 3rd ed. - Marsden, Ratiu and Abraham&lt;br /&gt;Mathematical analysis - Apostol T.M.&lt;br /&gt;Mathematical Analysis - E. Zakon&lt;br /&gt;Mathematical Methods of Engineering Analysis - E. Cinlar, R. Vanderbei&lt;br /&gt;Mathematics of the Discrete Fourier Transform&lt;br /&gt;Means of Hilbert Space Operators - F. Hiai, H. Kosaki&lt;br /&gt;Measure And Integral an introduction to  Real analysis - Wheeden and Zygmund,&lt;br /&gt;Mixed Motives - M. Levine&lt;br /&gt;Monotone Operators in Banach Space and Nonlinear partial differential equation - P. Showalter&lt;br /&gt;Nonlinear System Theory - W. Rugh&lt;br /&gt;Notions of Convexity - L. Hoermander&lt;br /&gt;p-adic numbers, p-adic analysis, and zeta-functions 2nd ed. - N. Koblitz&lt;br /&gt;Partial Differantial  Equations and Fourier Analysis  an Introduction - K. Tung&lt;br /&gt;Principles and Applications of Tensor Analysis - M. Smith&lt;br /&gt;Principles of Mathematical Analysis 3ed - Rudin W&lt;br /&gt;Real And Complex Analysis International Student edn - W. Rudin&lt;br /&gt;Real and complex analysis third edition - Rudin&lt;br /&gt;Real Mathematical Analysis- Charles Chapman&lt;br /&gt;Summation of Series 2nd rev. ed. - L. B. W. Jolley&lt;br /&gt;The Elements of Real Analysis - R. Bartle&lt;br /&gt;The Theory Of The Riemann Zeta-Function -Titshmarch&lt;br /&gt;theory and Problems Of Fourier Analysis with Applications to Boundary value problems - Spiegel&lt;br /&gt;Theory of Functions of a Real Variable - S. Sternberg&lt;br /&gt;Vector and Tensor Analysis with Applications - A. Borisenko and I.Tarapov.djv&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt; http://www.rapidsafe.net/rc-QGO3gDOxcTM/Analysis.part1.rar&lt;br /&gt;http://www.rapidsafe.net/rc-Y2M4gDOxcTM/Analysis.part2.rar&lt;br /&gt;http://www.rapidsafe.net/rc-YmZ4gDOxcTM/Analysis.part3.rar&lt;br /&gt;http://www.rapidsafe.net/rc-gTY5gDOxcTM/Analysis.part4.rar&lt;br /&gt;http://www.rapidsafe.net/rc-ITNhhDOxcTM/Analysis.part5.rar&lt;br /&gt;http://www.rapidsafe.net/rc-MmY2gDOxcTM/Analysis.part6.rar&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Applied mathematics :&lt;br /&gt;&lt;br /&gt;A First Course On Wavelets - E. Hernandez, G. Weiss&lt;br /&gt;Applied Mathematics - P. Oliver, C. Shakiban&lt;br /&gt;Chaos Theory Tamed - G. Williams&lt;br /&gt;Classification of Nuclear C-algebras - Entropy in Operator Algebras&lt;br /&gt;Explaining Chaos - P. Smith&lt;br /&gt;Fundamentals of Wavelets - Theory, Algorithms, and Applications - J. Goswami, A. Chan&lt;br /&gt;Information Theory - R. Ash&lt;br /&gt;Intro to the Math. and Stat. Foundations of Econometrics - H. Bierens&lt;br /&gt;Introduction To Finite Mathematics, 3Rd Edition&lt;br /&gt;Inverse Problem Theory and Methods for Model Parameter Estimation - A. Tarantola&lt;br /&gt;Linear Programming - Foundation and Extensions 2nd ed. - R. vanderbei&lt;br /&gt;Mathematics of Quantum Computation - Chen and Brylinski&lt;br /&gt;Probabilistic Inference Using Markov Chain Monte Carlo Methods - R. Neal&lt;br /&gt;Renormalization Groups - G. Benfatto, G. Gallavotti&lt;br /&gt;The Mathematical Theory Of Cosmic Strings - M. Anderson&lt;br /&gt;Theory and Problems of Finite Mathematics (Schaums Outlines) - S. Lipschutz&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt; http://www.rapidsafe.net/rc-QGMihDOxcTM/Applied_mathematics.part1.rar&lt;br /&gt;http://www.rapidsafe.net/rc-kjMihDOxcTM/Applied_mathematics.part2.rar&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;calculus :&lt;br /&gt;&lt;br /&gt;A Treatise On The Differential Calculus with numerous examples - Todd Hunter&lt;br /&gt;Advanced Calculus - a Differential Forms Approach - H. Edwards&lt;br /&gt;Advanced Calculus - Widder D.V.&lt;br /&gt;Advanced Calculus 2Ed , 1990 - Loomis L H , Sternberg S&lt;br /&gt;Advanced Calculus 2Nd Ed  - wrede &amp;amp; Spiegel&lt;br /&gt;Advanced Calculus 3rd Edition - Taylor Angus &amp;amp; Wiley.Fayez&lt;br /&gt;Advanced Calculus and Analysis - Ian craw&lt;br /&gt;Advanced Calculus fifth edition - Wilfred Kaplan&lt;br /&gt;Advanced Calculus of real valued functions of real variable and vectored valued functions of a vector variable - Sagan&lt;br /&gt;Advanced Calculus With Applications In Statistics - A Khuri&lt;br /&gt;An introduction to the fractional calculus and fractional differential equations - Miller K.S., Ross B.&lt;br /&gt;Calculus 5th Edition - James Stewart solution&lt;br /&gt;Calculus 5th Edition - James Stewart&lt;br /&gt;Calculus Bible&lt;br /&gt;Calculus Concepts and Contexts 2nd Ed - James Stewart&lt;br /&gt;Calculus Demystified - Krantz&lt;br /&gt;Calculus for the Clueless - Calc.I - Bob Miller's&lt;br /&gt;Calculus for the Clueless, Calc II - Bob Millers&lt;br /&gt;Calculus For The Utterly Confused - Oman&lt;br /&gt;CALCULUS OF FINITE DIFFERENCES - jordan&lt;br /&gt;Calculus of Variations &amp;amp; Optimal Control - Sasane&lt;br /&gt;Calculus of Variations &amp;amp; Solution Manual - Russak&lt;br /&gt;Calculus Of Variations, With Applications To Physics And Engineering - Weinstock R&lt;br /&gt;Calculus on manifolds - Spivak, M.&lt;br /&gt;Calculus With Complex Numbers - Read&lt;br /&gt;Calculus Workbook For Dummies - Mark Ryan&lt;br /&gt;Calculus, applications and theory - K Kuttler&lt;br /&gt;Derivatives and Integrals Chart (basic)&lt;br /&gt;Dictionary of analysis, calculus, and differential equations - Gibilisco&lt;br /&gt;Differential Forms, a Complement to Vector Calculus - S. Weintraub&lt;br /&gt;Elementary calculus an infinitesimal approach 2ed - Keisler H.J.&lt;br /&gt;Elementary Textbook on the Calculus - Snyder&lt;br /&gt;Foundations Of Differential Calculus - Euler&lt;br /&gt;Foundations Of Infinitesimal Calculus 2nd ed. - K. Stroyan&lt;br /&gt;From Calculus to Chaos - D. Acheson&lt;br /&gt;Functional Calculus of Pseudo-Differential Boundary Problems - Birkhauser&lt;br /&gt;Geometric Approach to Differential Forms - D. Bachman&lt;br /&gt;Handbook Of Integral Equations - A. Polyanin, A. Manzhirov&lt;br /&gt;How To Solve Word Problems In Calculus - Don&lt;br /&gt;INTRODUCTION TO THE CALCULUS OF VARIATIONS - Bernard Dacorogna&lt;br /&gt;Introduction To The Calculus Of Variations - Byerly 1917&lt;br /&gt;Master Math  Pre-Calculus And Geometry - Debra Ross&lt;br /&gt;Mathematical Background Foundations of Infinitesimal Calculus 2nd Ed - K. D. Stroyan&lt;br /&gt;Mlulti Variable Calculus and Linear Algebra, with Applications to DifFeren tial Equations and Probability SECOND EDITION - Apostol&lt;br /&gt;Multivariate Calculus - Alder&lt;br /&gt;On the Shoulders of Giants A Course in Single Variable Calculus - Smith &amp;amp; Mcleland&lt;br /&gt;One-Variable Calculus, with an Introduction to Linear Algebra SECOND EDITION vol I - Apostol&lt;br /&gt;Quantum calculus - Kac V. &amp;amp; Cheung P.&lt;br /&gt;Rings of Differential Operators - J. Bjoerk.djv&lt;br /&gt;Ryerson Calculus &amp;amp; Advanced Functions - McGraw-Hill&lt;br /&gt;Selected Chapters In The Calculus Of Variations - Moser J&lt;br /&gt;The Fractional Calculus Theory And Applications Of Differentiation And Integration To Arbitrary Order - Oldham K B , Spanier J&lt;br /&gt;Theory and Problems of ADVANCED CALCULUS Second Edition - WREDE &amp;amp; SPIEGE&lt;br /&gt;Theory and Problems of Beginning Calculus Second Edition - Elliott Mendelson&lt;br /&gt;THEORY AND PROBLEMS OF DIFFERENTIAL AND INTEGRAL CALCULUS Third Edition - AYRES &amp;amp; MENDELSON&lt;br /&gt;Vector Calculus - Theodore Voronov&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt; http://www.rapidsafe.net/rc-EGMjhDOxcTM/calculus.part1.rar&lt;br /&gt;http://www.rapidsafe.net/rc-YDZjhDOxcTM/calculus.part2.rar&lt;br /&gt;http://www.rapidsafe.net/rc-IDOkhDOxcTM/calculus.part3.rar&lt;br /&gt;http://www.rapidsafe.net/rc-QDNlhDOxcTM/calculus.part4.rar&lt;br /&gt;http://www.rapidsafe.net/rc-EmZlhDOxcTM/calculus.part5.rar&lt;br /&gt;http://www.rapidsafe.net/rc-I2YmhDOxcTM/calculus.part6.rar&lt;br /&gt;http://www.rapidsafe.net/rc-YTZmhDOxcTM/calculus.part7.rar&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;CRC Concise Encyclopedia of Mathematics :&lt;br /&gt;&lt;br /&gt;CRC Concise Encyclopedia of Mathematics [part 1 of 4] - E. Weisstein&lt;br /&gt;CRC Concise Encyclopedia of Mathematics [part 2 of 4] - E. Weisstein&lt;br /&gt;CRC Concise Encyclopedia of Mathematics [part 3 of 4] - E. Weisstein&lt;br /&gt;CRC Concise Encyclopedia of Mathematics [part 4 of 4] - E. Weisstein&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://www.rapidsafe.net/rc-M2YwkDOxcTM/CRC_Concise_Encyclopedia_of_Mathematics.part1.rar&lt;br /&gt;http://www.rapidsafe.net/rc-kzYxkDOxcTM/CRC_Concise_Encyclopedia_of_Mathematics.part2.rar&lt;br /&gt;http://www.rapidsafe.net/rc-kTOykDOxcTM/CRC_Concise_Encyclopedia_of_Mathematics.part3.rar&lt;br /&gt;http://www.rapidsafe.net/rc-UmYykDOxcTM/CRC_Concise_Encyclopedia_of_Mathematics.part4.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Cryptography :&lt;br /&gt;&lt;br /&gt;Applied Cryptography 2nd ed. -  B. Schneier&lt;br /&gt;Cryptography Theory And Practice - Douglas Stinson.chm&lt;br /&gt;Guide to Elliptic Curve Cryptography - D. Hankerson, A. Menezes, S. Vanstone&lt;br /&gt;Handbook of Applied Cryptography - A. Menezes, P. VanOorschot, S. Vanstone&lt;br /&gt;Modern Cryptography  Theory And Practice - Wenbo Mao&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44900223/Cryptography.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Differential Algebra :&lt;br /&gt;&lt;br /&gt;Differential Algebra  - Joseph Ritt&lt;br /&gt;Differential Algebra and Algebraic Groups - E. Kolchin&lt;br /&gt;Differential Algebra and Diophantine Geometry - A. Buium&lt;br /&gt;Differential Algebraic Groups - E. Kolchin&lt;br /&gt;Differential Algebraic Groups of Finite Dimension - A. Buium&lt;br /&gt;Differential Function Fields and Moduli of Algebraic Varieties - A. Buium&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44900294/Differential_Algebra.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Differential Geometry :&lt;br /&gt;&lt;br /&gt;An Introduction To Differential Geometry With Use Of Tensor Calculus - Eisenhart L P.djv&lt;br /&gt;Classical differential geometry of curves and surfaces - Varliron G.&lt;br /&gt;Complex Analytic and Differential Geometry - J. Demailly&lt;br /&gt;Complex Analytic Differential Geometry - Demailly&lt;br /&gt;Course of Differential Geometry - R. Sharipov&lt;br /&gt;Differential and Physical Geometry - J. Lee&lt;br /&gt;Differential Geometry in Physics - G. Lugo (&lt;br /&gt;Foundations Differential Geometry  - Michor&lt;br /&gt;Foundations of Differential Geometry - P. Michor&lt;br /&gt;Foundations of Differential Geometry vol 1 - Kobayashi, Nomizu&lt;br /&gt;Intro to Differential Geometry and General Relativity - S. Warner&lt;br /&gt;Introduction to Differential Geometry &amp;amp; General Relativity - waner&lt;br /&gt;Lectures on Differential Geometry - S. Chen, W. Chen, K. Lam&lt;br /&gt;Minkowski Geometry - A. Thompson&lt;br /&gt;Modern Differential Geometry for Physicists 2nd ed. - C. Isham&lt;br /&gt;Natural Operations in Differential Geometry - Ivan ,Peter, Jan&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44900475/Differential_Geometry.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;differentials equations :&lt;br /&gt;&lt;br /&gt;A First Course in Partial Differential Equations with complex variables and transform methods - H. Weinberger&lt;br /&gt;A Treatise on Differential Equations 2nd ed. - A. Forsyth.djv&lt;br /&gt;An Introduction to MultiGrid Methods - P. Wesseling&lt;br /&gt;Difference Equations and Inequalities - Theory, Methods, and Applications 2nd ed. - P. Agarwal.djv&lt;br /&gt;Differential Equations Crash Course  - R. Bronson&lt;br /&gt;Differential Equations From the Group Standpoint - L. Dickson.djv&lt;br /&gt;Differential Equations with Mathematica - M. Abell, J. Braselton&lt;br /&gt;Differential Equations, Dynamical Systems and Linear Algebra - M. Hirsch, S. Smale.djv&lt;br /&gt;Differential Subordinations, Theory and Applications - S. Miller, P. Mocanu.djv&lt;br /&gt;Elementary Differential Equations and boundry value problems 7th ed.  - W. Boyce, R. Diprima&lt;br /&gt;Exterior Diff Systems And Euler-Lagrange Partial Diff Eqns - Bryant, Griffiths and Grossman&lt;br /&gt;Galois Theory of Linear Differential Equations - M. van der Put, M. Singer&lt;br /&gt;Generalized Difference Methods for Differential Equations - R. Li, Z. Chen, W. Wu&lt;br /&gt;Hilbert Space Methods For Partial Differential Equations - R. Showalter&lt;br /&gt;Introduction to Partial Differential Equations - A Computational Approach - A. Tveito, R. Winther&lt;br /&gt;Introduction to Stochastic Differential Equations v1.2 (Berkeley lecture notes) - L. Evans&lt;br /&gt;Introduction To Tensor Calculus &amp;amp; Continuum Mechanics - J. Heinbockel&lt;br /&gt;Linear Diff Eqns in the Complex Domain - Problems of Analytic Continuation Y. Sibuya.djv&lt;br /&gt;Mesh-free Methods - Moving Beyond Finite Element Methods - G. Liu&lt;br /&gt;Nonlinear Analysis &amp;amp; Differential Equations, An Introduction - Schmitt &amp;amp; Thompson&lt;br /&gt;Nonlinear Partial Differential Equations - G. Chen, E. DiBenedetto.djv&lt;br /&gt;Numerical Methods for Ordinary Differential Equations - J.C. Butcher&lt;br /&gt;Numerical Methods for Partial Differential Equations 2nd ed. - W. Ames&lt;br /&gt;Ordinary Differential Equations - P. Hartman.djv&lt;br /&gt;Ordinary Differential Equations - V. Arnold.djv&lt;br /&gt;Ordinary Differential Equations and Dynamical Systems - G. Teschl&lt;br /&gt;Ordinary Differential Equations, with Intro to Lie Theory - J. Page&lt;br /&gt;Partial Differential Equations - L. Evans&lt;br /&gt;Partial Differential Equations and Mathematica - P. Kythe&lt;br /&gt;Partial differential equations and the finite element method - Pave1 Solin&lt;br /&gt;Partial Differential Equations Vol 1 - Basic Theory - M. Taylor.djv&lt;br /&gt;Partial Differential Equations Vol 2 - Qualitative Studies of Linear Equations - M. Taylor.djv&lt;br /&gt;Partial Differential Equations Vol 3 - Nonlinear Equations - M. Taylor.djv&lt;br /&gt;Partial Differential Equations, (MA3132 lecture notes) - B. Neta (&lt;br /&gt;Singular Perturbation Theory - Math and Analyt Technique w. appl to Engineering - R. Johnson&lt;br /&gt;Stochastic Differential Equations 5th ed. - B. Oksendal&lt;br /&gt;The Qualitative Theory of Ordinary Diff. Equations - F. Brauer, H. Nohel&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44900857/differentials_equations.part1.rar&lt;br /&gt;http://rapidshare.com/files/44901173/differentials_equations.part2.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Discrete Mathematics :&lt;br /&gt;&lt;br /&gt;A First Course in Discrete Mathematics 2nd ed - ANdersonn&lt;br /&gt;Advanced Combinatorics (revised) - L. Comtet&lt;br /&gt;Algorithm theory - Penttonen,Meineche&lt;br /&gt;Algorithms - R. Sedgewick&lt;br /&gt;Algorithms and Complexity - wilf&lt;br /&gt;Combinatorics - Topics, Techniques and Algorithms - P. Cameron&lt;br /&gt;Combinatorics 2nd ed. - R. Merris&lt;br /&gt;Concrete Mathematics - R. Graham, D. Knuth, O. Patashnik&lt;br /&gt;Discrete Math in Computer Science - Bogart , Stein&lt;br /&gt;Discrete Mathematics - Chen&lt;br /&gt;Discrete Mathematics - Yale&lt;br /&gt;Discrete Mathematics And Its Applications 4Th Ed - Rosen&lt;br /&gt;Discrete Mathematics for New Technology Second Edition - Garnier , Taylor&lt;br /&gt;Generatingfunctionology - H. Wilf&lt;br /&gt;Handbook of Combinatorics Vol 2 - R. Graham, M. Grotschel, L. Lovasz&lt;br /&gt;Handbook of discrete and combinatorial mathematics - Crc Press&lt;br /&gt;Introduction to Algorithms 2nd ed. - MIT Faculty&lt;br /&gt;Introduction to Genetic Algorithms for Scientists and Engineers - D. Coley&lt;br /&gt;Monte Carlo Concepts, Algorithms and Applications - G. Fishman&lt;br /&gt;Probabilistic methods in algorithmic discrete mathematics - Springer&lt;br /&gt;Representations for Genetic and Evolutionary Algorithms 2nd ed. - F. Rothlauf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44901497/Discrete_Mathematics.part1.rar&lt;br /&gt;http://rapidshare.com/files/44901568/Discrete_Mathematics.part2.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dynamical Systems :&lt;br /&gt;&lt;br /&gt;Dynamical Systems - G. Birkhoff&lt;br /&gt;Dynamical Systems and Fractals - Computer Graphics Exper. in  Pascal - K. Becker, M. Dorfler&lt;br /&gt;Elementary Catastrophe Theory - P. Michor&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44901608/Dynamical_Systems.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Encyclopedia of Mathematics - Gale Group :&lt;br /&gt;&lt;br /&gt;Encyclopedia of Mathematics - Gale Group (Vol.1 Ab-Cy)&lt;br /&gt;Encyclopedia of Mathematics - Gale Group (Vol.2 Da-Lo)&lt;br /&gt;Encyclopedia of Mathematics - Gale Group (Vol.3 Ma-Ro)&lt;br /&gt;Encyclopedia of Mathematics - Gale Group (Vol.4 Sc-Ze)&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44901643/Encyclopedia_of_Mathematics_-_Gale_Group.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fun :&lt;br /&gt;&lt;br /&gt;Abel's Proof - Essay on the Sources and Meaning of Mathematical Unsolvability - P. Pesic&lt;br /&gt;Breakthroughs in Mathematics - P. Wolff&lt;br /&gt;Math Wonders to Inspire Teachers and Students&lt;br /&gt;Prime Numbers - The Most Mysterious Figures in Math&lt;br /&gt;The Art of the Infinite - The Pleasures of Math&lt;br /&gt;The Riemann Hypothesis The Greatest Unsolved Problem in Mathematics . - J. Derbyshire.djv&lt;br /&gt;Wiley Mathematical Journeys&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44902052/Fun.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Geometry :&lt;br /&gt;&lt;br /&gt;Euclid's Elements&lt;br /&gt;Algebraic geometry a first course - Harris.J&lt;br /&gt;Computational Geometry algorithms and applications 2d ed - De berg&lt;br /&gt;Computational Geometry in C - J o'orourk&lt;br /&gt;Computational Geometry Methods And Applications - chen&lt;br /&gt;Conceptual Spaces The Geometry Of Thought - Gardenfors.chm&lt;br /&gt;Exploring Analytic Geometry with Mathematica - D. Vossler&lt;br /&gt;Exploring analytic geometry with Mathematica - Vossler&lt;br /&gt;&lt;span class="posthilit"&gt;Fractal&lt;/span&gt; Geometry Mathematical Foundations &amp;amp; Applications - Falconer&lt;br /&gt;Fundamentals of College Geometry 2nd ed. -  E. M. Hemmerling&lt;br /&gt;Fundamentals of Mathematics Vol.2, Geometry - Behnke, Bachmann&lt;br /&gt;Geometric Models for Noncummutative Algebras - A.da Silva, A. Weinstein&lt;br /&gt;Geometry Asymptotics - Guillemin,Sternberg&lt;br /&gt;Glimpses of Algebra and Geometry, 2nd Edition - Verlag&lt;br /&gt;Handbook of discrete and computational geometry and its applications - Rosen&lt;br /&gt;Introduction to geometry 2ed - coxeter&lt;br /&gt;Introduction to Lie groups and symplectic geometry - Bryant R.L.&lt;br /&gt;Mirrors and Reflections- The Geometry of Finite Reflection Groups - A. Borovik, A. Borovik&lt;br /&gt;Non-Euclidean Geometry 6th ed. - H.S.M. Coxeter&lt;br /&gt;Plane Analytic Geometry With Differential Calculus - Maxime Bocher&lt;br /&gt;Sphere Packings - C. Zong&lt;br /&gt;The Geometry &amp;amp; Topology of 3-Manifold - Thurston&lt;br /&gt;The Geometry of Hamilton and Lagrange Spaces - Miron, Hrimiuc, Shimara, Sabau.&lt;br /&gt;The Geometry of Schemes - Eisenbud D., J.Harris.&lt;br /&gt;Treatise of plane geometry through geometric algebra - Calvet R.G. -&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44902383/Geometry.part1.rar&lt;br /&gt;http://rapidshare.com/files/44902692/Geometry.part2.rar&lt;br /&gt;http://rapidshare.com/files/44903074/Geometry.part3.rar&lt;br /&gt;http://rapidshare.com/files/44903102/Geometry.part4.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Graph Theory :&lt;br /&gt;&lt;br /&gt;Graph Theory - R. Diestel&lt;br /&gt;Graph Theory With Applications - J. Bondy, U. Murty&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44903232/Graph_Theory.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Group Theory :&lt;br /&gt;&lt;br /&gt;Planar Graph Drawing - T. Nishizeki, M. Rahman&lt;br /&gt;Abstract Theory of Groups - O. Schmidt&lt;br /&gt;An Elementary Introduction to Groups and Representations - B. Hall&lt;br /&gt;Buildings and Classical Groups - P. Garrett&lt;br /&gt;Cohomological Topics in Group Theory - K. Gruenberg&lt;br /&gt;Galois Theory 2nd ed. -  E. Artin&lt;br /&gt;Group Theory (Lie's, Tracks and Exceptional Groups) - P. Cvitanovic&lt;br /&gt;Group Theory Exceptional Lie Groups As Invariance Groups - P. Cvitanovic&lt;br /&gt;Group Theory [jnl article] - J. Milne&lt;br /&gt;Groupoids. and Smarandache Groupoids - W. Kandasamy&lt;br /&gt;Introduction To Groups, Invariants and Particles&lt;br /&gt;Introduction to the Theory of Groups - G. Polites&lt;br /&gt;Isometric Actions of Lie Groups and Invariants [jnl article] - P. Michor&lt;br /&gt;Lectures on Lie Groups - D. Milicic&lt;br /&gt;Lie Algebras - S. Sternberg&lt;br /&gt;Linear Algebraic Groups - A. Borel&lt;br /&gt;Problems in Group Theory - J. Dixon&lt;br /&gt;Quantum Groups and Knot Algebra - T. Dieck&lt;br /&gt;Representation Theory - A First Course - W. Fulton, J. Harris&lt;br /&gt;Representation Theory of Lie groups - M. Atiyah et al.&lt;br /&gt;Smarandache Semigroups - W. Kandasamy&lt;br /&gt;The Classification of the Finite Simple Groups - D. Greenstein, R. Lyons, R. Solomon&lt;br /&gt;The Theory of Groups - H. Bechtell&lt;br /&gt;the Theory of Groups 2nd ed. Vol.1 - A. Kurosh&lt;br /&gt;Theory Of Groups of Finite Order - W. Burnside&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44903594/Group_Theory.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Math For Engineers :&lt;br /&gt;&lt;br /&gt;Advanced Mathematical Methods for Scientists and Engineers - C. Bender, S. Orszag.djv&lt;br /&gt;CRC Press - Dictionary of Applied Math for Engineers and Scientists - D. Clark&lt;br /&gt;CRC Press - Elem. Math. and Comp. Tools for Engineers using MATLAB - J. Manassah&lt;br /&gt;Engineering Mathematics 4th ed. - J. Bird&lt;br /&gt;Essential Math Skills for Engineering, Science and Appl Math - S. Barry, S. Davis.djv&lt;br /&gt;Intro to Methods of Appl. Math - Adv Math Methods for Scientists and Engineers - S. Mauch&lt;br /&gt;Math - Functional and Structural Tensor Analysis for Engineers - Brannon&lt;br /&gt;Math methods in physics and engineering with Mathematica - F. Cap&lt;br /&gt;Math. and Phys. Data - Equations and Rules of Thumb - S. Gibilisco&lt;br /&gt;Mathematical Methods of Classical Mechanics, 2nd ed., - V. I. Arnold&lt;br /&gt;Mathematics for Electrical Engineering and Computing - M. Attenborough&lt;br /&gt;Mathematics of Quantum Computation - G. Chen, R. Brylinski (eds)&lt;br /&gt;Methods of Mathematical Physics Vol 3 - Scattering Theory - M. Reed&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44904063/Math_For_Engineers.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Number theory :&lt;br /&gt;A Computational Introduction to Number Theory and Algebra - Victor Shoup&lt;br /&gt;A Concise Introduction to the Theory of Numbers- Baker A.&lt;br /&gt;A Course in Arithmetic (graduate level)  - J. Serre&lt;br /&gt;A course in computational algebraic number theory - Cohen H.&lt;br /&gt;A Course in Number Theory and Cryptography 2 ed - Neal Koblitz&lt;br /&gt;A Course In Number Theory And Cryptography 2Ed - Koblitz N&lt;br /&gt;Advanced Number Theory - Cohn&lt;br /&gt;Algebra and number theory - Baker A.&lt;br /&gt;Algebraic Groups and Number Theory - Platonov &amp;amp; Rapinchuk&lt;br /&gt;Algebraic Number Theory - IYANAGA&lt;br /&gt;ALGEBRAIC NUMBER THEORY - MILNE&lt;br /&gt;Algorithmic Methods In Algebra And Number Theory - Pohst M&lt;br /&gt;Algorithmic number theory - Cohen H.&lt;br /&gt;Algorithmic number theory, vol. 1 Efficient algorithms - Bach E., Shallit J.&lt;br /&gt;An Explicit Approach To Elementary Number Theory - stein&lt;br /&gt;An Introduction to Conformal Field Theory [jnl article] - M. Gaberdiel&lt;br /&gt;AN INTRODUCTION TO THE THEORY OF NUMBERS - hardy &amp;amp; wright&lt;br /&gt;An Introduction to the Theory of Numbers - Leo Moser&lt;br /&gt;An introduction to the theory of numbers 5ed - Niven I., Zuckerman H.S., Montgomery H.L.&lt;br /&gt;Analytic number theory - Iwaniec H.,Kowalski E.&lt;br /&gt;Analytic Number Theory - Newman D.J.&lt;br /&gt;Analytic Number Theory- Jia &amp;amp;  Matsumoto&lt;br /&gt;Arithmetic Theory of Elliptic Curves - J. Coates&lt;br /&gt;Computational Algebraic Number Theory - Pohst M E&lt;br /&gt;Computational excursions in analysis and number theory - Borwein P.&lt;br /&gt;Contributions to the Founding of the Theory of Transfinite Numbers - Georg Cantor&lt;br /&gt;Definitions, Solved And Unsolved Problems, Conjectures and Theorems, In Number Theory And Geometry - Smarandache F&lt;br /&gt;Elementary Methods in Number Theory - Nathanson M.B&lt;br /&gt;Elementary Number Theory - Clark&lt;br /&gt;Elementary Number Theory - David M. Burton&lt;br /&gt;Elementary Number Theory And Primality Tests&lt;br /&gt;Elementary Number Theory Notes - santos&lt;br /&gt;Elementary theory of numbers - Sierpinski W.&lt;br /&gt;Elliptic Curves - Notes for Math 679 - J. Milne, U. Michigan&lt;br /&gt;Elliptic Curves 2nd ed. - D. Husemoeller&lt;br /&gt;Geometric Theorems, Diophantine Equations and Arithmetic Functions - J. Sandor&lt;br /&gt;History of the theory of numbers  Vol.2. - Dickson L.E.&lt;br /&gt;Introduction To Analytic Number Theory - Apostol&lt;br /&gt;Introduction to Modern Number Theory Fundamental Problems, Ideas and Theories  2nd Edition - Manin I., Panchishkin A&lt;br /&gt;Introduction to p-adic numbers and valuation theory- Bachman G.&lt;br /&gt;Introduction to the Theory of Numbers  4th ed. - G. Hardy, E. Wright&lt;br /&gt;Lectures on topics in algebraic number theory  - Ghorpade&lt;br /&gt;Mainly Natural Numbers - Studies on Sequences - H. Ibstedt&lt;br /&gt;Math. problems and proofs combinatorics, number theory and geometry - B. Kisacanin&lt;br /&gt;Mathematical Problems And Proofs  Combinatorics, Number Theory, and Geometry - Kluwer Academic&lt;br /&gt;My Numbers, My Friends - Popular Lectures on Number Theory&lt;br /&gt;My Numbers,My Friends  Popular Lectures On Number Theory - Ribenboim&lt;br /&gt;Number Theory - Z.Borevitch, I. Shafarevich&lt;br /&gt;Number theory for beginners - Weil A.&lt;br /&gt;Number theory for computing - Yan S Y.&lt;br /&gt;Numerical Mathematics - A. Quarteroni, A. Sacco, F. Saleri&lt;br /&gt;Numerical Methods for Engineers and Scientists 2nd ed. - J. Hoffman&lt;br /&gt;Numerical Optimization - J. Nocedal, S. Wright&lt;br /&gt;Numerical Recipes in C - The Art Of Scientific Computing 2nd ed.&lt;br /&gt;Numerical Recipes in Fortran 77 2nd ed. Vol 1&lt;br /&gt;Old And New Problems And Results In Combinatorial Number Theory - Erdos, P.&amp;amp;Graham, R.L&lt;br /&gt;Only Problems Not Solutions - F. Smarandache&lt;br /&gt;Prime Numbers The Most Mysterious Figures in Math - D. Wells&lt;br /&gt;Problems In Algebraic Number Theory 2Ed - Murty M , Esmonde J&lt;br /&gt;SOlved and unsolved problems in Number Theory - Daniel Shanks&lt;br /&gt;Surfing on the Ocean of Numbers - H. Ibstedt&lt;br /&gt;Survey Of Diophantine Geometry - Serge Lang&lt;br /&gt;The elements of the theory of algebraic numbers - Hilbert.djv&lt;br /&gt;The Foundations of Arithmetic 2nd ed. revised - G. Frege&lt;br /&gt;The New Book Of Prime Number Records 3rd ed. - P. Ribenboim&lt;br /&gt;The Theory of algebraic numbers sec ed - Pollard H., Diamond H.G.&lt;br /&gt;the theory of functions and sets of natural numbers - Odifreddi, P&lt;br /&gt;Three Pearls of Number Theory - Khinchin&lt;br /&gt;Transcendental number theory - Baker A.&lt;br /&gt;Unsolved Problems In Number Theory 2 Ed - R K Guy.djv&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44904459/Number_theory.part1.rar&lt;br /&gt;http://rapidshare.com/files/44904770/Number_theory.part2.rar&lt;br /&gt;http://rapidshare.com/files/44905184/Number_theory.part3.rar&lt;br /&gt;http://rapidshare.com/files/44905529/Number_theory.part4.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Probability and statistics :&lt;br /&gt;&lt;br /&gt;A Course In Probability Theory - Chung K L&lt;br /&gt;An Introduction to Probability Theory - Geiss&lt;br /&gt;An Introduction to Probability Theory and its Applications Vol I - Feller W.&lt;br /&gt;Applied Bayesian Modelling - P. Congdon&lt;br /&gt;Applied Probability - Lange K.&lt;br /&gt;Applied Probability and Stochastic Processes - Bryc&lt;br /&gt;Applied Statistics And Probability For Engineers - Montgomery &amp;amp;&amp;amp; Runger&lt;br /&gt;Applied Statistics And Probability For Engineers solution - Montgomery &amp;amp;&amp;amp; Runger&lt;br /&gt;CRC - standard probability and Statistics tables and formulae - DANIEL ZWILLINGER&lt;br /&gt;Foundations of Modern Probability - Olav Kallenberg&lt;br /&gt;Foundations of the Theory of Probability - A.N. KOLMOGOROV&lt;br /&gt;Fundamentals of Probability and Statistics for Engineers - T T Soong&lt;br /&gt;Introduction to Mathematical Statistics 6th ed. - P. Hoel&lt;br /&gt;Introduction To Probability -  Dimitri Bertsekas And John N Tsitsiklis&lt;br /&gt;Introduction to Probability - Grinstead &amp;amp; Snell&lt;br /&gt;Introduction to Probability 2nd Ed - C M Grinstead &amp;amp; J L Snell&lt;br /&gt;Introduction To Probability Models Sixth Ed -Sheldon M ross&lt;br /&gt;Introduction to Statistical Pattern Recognition 2nd ed. - K. Fukunaga&lt;br /&gt;Lectures on Probability Theory and Statistics - Jean Picard&lt;br /&gt;Markov Random Fields And Their Applications - kinderman &amp;amp; snell&lt;br /&gt;Mathematics, Pre-Calculus and Introduction to Probability&lt;br /&gt;Measure Integral &amp;amp; Probability - Capinski &amp;amp; Kopp&lt;br /&gt;Multivariable Bayesian Statistics - D. Rowe.djv&lt;br /&gt;Probability and Finance It's only a game&lt;br /&gt;Probability and its applications - Ollav Kallenberg&lt;br /&gt;Probability and measurements - Tarantola A.&lt;br /&gt;Probability And Statistical Inference - NITIS MUKHOPADHYAY&lt;br /&gt;Probability Demystified - bluman&lt;br /&gt;Probability Theory and Examples second edition - Durrett R&lt;br /&gt;Probability Theory The Logic Of Science - E. T. Jaynes&lt;br /&gt;Probability, random processes and ergodic properties -  Gray&lt;br /&gt;Probability, Random Processes, and Ergodic Properties - R. Gray&lt;br /&gt;Probability, Random Variables and Random Signal Principles 2nd ed. - P. Peebles&lt;br /&gt;Probability, Random Variables and Stochastic Processes 3rd ed- Papoulis&lt;br /&gt;Radically Elementary Probability Theory - edward Nelson&lt;br /&gt;Recent Advances in Applied Probability - Springer&lt;br /&gt;Schaum's Outlines - Theory and Problems of Statistics 3rd ed. - M. Spiegel,  L. Stephens&lt;br /&gt;Six Sigma and Beyond Statistics and Probability, Volume III - satamtis.chm&lt;br /&gt;Statistics and Probability for Engineering Applications With Microsoft® Excel - W.J. DeCoursey&lt;br /&gt;Statistics for Dummies - D. Rumsey.chm&lt;br /&gt;Statistics Hacks - B. Frey.chm&lt;br /&gt;The Basic Practice of Statistics 3rd ed. - D. S. Moore&lt;br /&gt;Theory and problems of probability - Lipschutz, Seymour&lt;br /&gt;Theory and Problems of Probability, Random Variables, and Random Processes - Hwei P. Hsu&lt;br /&gt;Tutorials in Probability&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44905747/Probability_and_statistics.part1.rar&lt;br /&gt;http://rapidshare.com/files/44906021/Probability_and_statistics.part2.rar&lt;br /&gt;http://rapidshare.com/files/44906356/Probability_and_statistics.part3.rar&lt;br /&gt;http://rapidshare.com/files/44906501/Probability_and_statistics.part4.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ramanujan's Notebooks :&lt;br /&gt;&lt;br /&gt;Ramanujan's Notebooks vol 1 - B. Berndt.djv&lt;br /&gt;Ramanujan's Notebooks vol 2 - B. Berndt.djv&lt;br /&gt;Ramanujan's Notebooks vol 3 - B. Berndt.djv&lt;br /&gt;Ramanujan's Notebooks vol 4 - B. Berndt.djv&lt;br /&gt;Ramanujan's Notebooks vol 5 - B. Berndt.djv&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44906638/Ramanujan_s_Notebooks.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Topology :&lt;br /&gt;&lt;br /&gt;A concise course in algebraic topology - May J.P.&lt;br /&gt;A Panoramic View of Riemannian Geometry - M. Berger&lt;br /&gt;Algebraic Topology  A Computational Approach - Kaczynski , Mischaikow , Mrozek&lt;br /&gt;Algebraic Topology - A. Hatcher&lt;br /&gt;Algebraic Topology - S. Lefschetz&lt;br /&gt;Algebraic Topology an Intuitive Approach - H. Sato&lt;br /&gt;Algebraic Topology From A Homotopical Viewpoint - SPringer&lt;br /&gt;Cohomology of Arithmetic Groups, L-Functions and Automorphic - T. Venkatamarana&lt;br /&gt;Counterexamples In Topology - Steen , Seebach&lt;br /&gt;Curvature and Homology, Revised Ed. - S. Goldberg&lt;br /&gt;differential topology - Dundas&lt;br /&gt;Differential Topology - Morris&lt;br /&gt;Elementary Concepts In Topology - P. Alexandroff&lt;br /&gt;Elementary topology a first course  - Viro, Ivanov&lt;br /&gt;general topology - muller&lt;br /&gt;Geometry and Topology of 3-Manifolds - W. Thurston&lt;br /&gt;Index Theory, Coarse Geometry, and Topology of Manifolds - J. Roe&lt;br /&gt;Intorduction to Topology and Modern Analysis - G. Simmons&lt;br /&gt;Introduction to  Algebraic Topology and Algebraic Geometry - U. Bruzzo&lt;br /&gt;Introduction to Differential Topology - Brin&lt;br /&gt;Introduction to Smooth Manifolds - J. Lee&lt;br /&gt;K-theory for Operator Algebras 2nd ed. - B. Blackadar&lt;br /&gt;Lecture Notes On Elementary Topology And Geometry - Singer,Thorpe&lt;br /&gt;Lectures on Algebraic Topology 2nd ed. - A. Dold&lt;br /&gt;Notes on basic 3-manifold topology - Hatcher, Allen&lt;br /&gt;Notes On The Topology Of Complex Singularities - Nicolaescu&lt;br /&gt;Open Problems In Topology-Jan Van Hill, George Reed&lt;br /&gt;Operator algebras and topology - Schick&lt;br /&gt;Riemannian Geometry - M. doCarmo&lt;br /&gt;Riemannian Geometry, a Beginners Guide - F. Morgan&lt;br /&gt;Theory and problems of general topology - Lipschutz, Seymour&lt;br /&gt;Topics In Topology And Homotopy Theory - Warner&lt;br /&gt;topology  2Ed - James Munkres&lt;br /&gt;Topology &amp;amp; Sobolev Spaces - Brezis&lt;br /&gt;topology - Yan&lt;br /&gt;Topology and functional analysis - Driver&lt;br /&gt;Topology Course lecture notes - A. McCluskey, B. McMaster&lt;br /&gt;Topology for Computing - ZOMORODIAN&lt;br /&gt;Topology Lecture Notes - Ward, Thomas&lt;br /&gt;Topology Without Tears - SIDNEY A. MORRIS&lt;br /&gt;Vector Bundles and K-Theory - A. hatcher&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44907028/Topology.part1.rar&lt;br /&gt;http://rapidshare.com/files/44908748/Topology.part2.rar&lt;br /&gt;http://rapidshare.com/files/44908814/Topology.part3.rar&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;useful :&lt;br /&gt;&lt;br /&gt;Daves Math Tables&lt;br /&gt;Dictionary of Algebra, Arithmetic and Trigonometry - S. Krantz&lt;br /&gt;Dictionary of Classical and Theoretical Mathematics&lt;br /&gt;Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables  - M. Abramowitz, I. Stegun&lt;br /&gt;McGraw Hill Mastering Technical Mathematics 2Ed&lt;br /&gt;Real Analysis, Quantitative Topology, and Geometric Complexity - S. Semmes&lt;br /&gt;Schaum's Mathematical Handbook of Formulas and Tables - Murray R Spiegel&lt;br /&gt;Standard Mathematical Tables and Formulae 31st Edition - Zwillinger&lt;br /&gt;Tables of Integrals and Other Math. Data 3rd ed. - H. Dwight&lt;br /&gt;The Seven Famous Unsolved Math Puzzles&lt;br /&gt;Well-Posed Linear Systems - O. Staffans&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codewrapper"&gt;&lt;div class="codetitle"&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/div&gt;&lt;div class="codecontent"&gt;http://rapidshare.com/files/44909216/useful.rar&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-4442422834151416804?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/4442422834151416804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=4442422834151416804' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/4442422834151416804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/4442422834151416804'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/10/mathematics-completeall-books.html' title='Mathematics Complete(All books Categorized)'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-1679998080327087869</id><published>2007-08-13T08:30:00.001-07:00</published><updated>2007-08-13T08:30:16.709-07:00</updated><title type='text'>Ready to return~</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-1679998080327087869?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/1679998080327087869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=1679998080327087869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/1679998080327087869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/1679998080327087869'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/08/ready-to-return.html' title='Ready to return~'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-7917860348480068467</id><published>2007-05-13T02:40:00.000-07:00</published><updated>2007-05-13T02:43:24.946-07:00</updated><title type='text'>QT fucking Hell</title><content type='html'>&lt;h1 class="firstHeading"&gt;Qt4 with Visual Studio&lt;/h1&gt;          &lt;h3 id="siteSub"&gt;From qtnode&lt;/h3&gt;                      &lt;!-- start content --&gt;      &lt;p&gt;Contrary to popular belief, you &lt;b&gt;can&lt;/b&gt; use Qt4 with Visual Studio to create Open Source software. These instructions are for Qt 4.2.3 &lt;/p&gt;&lt;p&gt;&lt;b&gt;[NEW]&lt;/b&gt; unable to compile any Qt4 app ? see how to fix the bug that appears after installing service pack1 or .NET Framwork 3.0 &lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Buildproblems_with_Visual_Studio_2005_and_service_pack_1" title=""&gt;click here&lt;/a&gt; ( trolltech post &lt;a href="http://lists.trolltech.com/qt-intere...ad00584-0.html" class="external free" title="http://lists.trolltech.com/qt-intere...ad00584-0.html" rel="nofollow"&gt;http://lists.trolltech.com/qt-intere...ad00584-0.html&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;table id="toc" class="toc"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;div id="toctitle"&gt;&lt;h2&gt;Contents&lt;/h2&gt; &lt;span class="toctoggle"&gt;[&lt;a href="javascript:toggleToc()" class="internal" id="togglelink"&gt;hide&lt;/a&gt;]&lt;/span&gt;&lt;/div&gt; &lt;ul&gt;&lt;li class="toclevel-1"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Building_Qt"&gt;&lt;span class="tocnumber"&gt;1&lt;/span&gt; &lt;span class="toctext"&gt;Building Qt&lt;/span&gt;&lt;/a&gt; &lt;ul&gt;&lt;li class="toclevel-2"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Obtain_and_install_the_Qt_source"&gt;&lt;span class="tocnumber"&gt;1.1&lt;/span&gt; &lt;span class="toctext"&gt;Obtain and install the Qt source&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-2"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Download_and_install_the_patch_allowing_Qt_to_be_compiled_with_Visual_Studio_compilers"&gt;&lt;span class="tocnumber"&gt;1.2&lt;/span&gt; &lt;span class="toctext"&gt;Download and install the patch allowing Qt to be compiled with Visual Studio compilers&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-2"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Open_a_command_prompt_in_the_Qt_source_directory"&gt;&lt;span class="tocnumber"&gt;1.3&lt;/span&gt; &lt;span class="toctext"&gt;Open a command prompt in the Qt source directory&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-2"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Patching_the_Qt_sources"&gt;&lt;span class="tocnumber"&gt;1.4&lt;/span&gt; &lt;span class="toctext"&gt;Patching the Qt sources&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-2"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Configuring_your_Qt_install_.28and_building_qmake.29"&gt;&lt;span class="tocnumber"&gt;1.5&lt;/span&gt; &lt;span class="toctext"&gt;Configuring your Qt install (and building qmake)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-2"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Building_the_Qt_library"&gt;&lt;span class="tocnumber"&gt;1.6&lt;/span&gt; &lt;span class="toctext"&gt;Building the Qt library&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li class="toclevel-1"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Setting_up_your_environment"&gt;&lt;span class="tocnumber"&gt;2&lt;/span&gt; &lt;span class="toctext"&gt;Setting up your environment&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-1"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Testing_your_install"&gt;&lt;span class="tocnumber"&gt;3&lt;/span&gt; &lt;span class="toctext"&gt;Testing your install&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-1"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Creating_Visual_Studio_projects"&gt;&lt;span class="tocnumber"&gt;4&lt;/span&gt; &lt;span class="toctext"&gt;Creating Visual Studio projects&lt;/span&gt;&lt;/a&gt; &lt;ul&gt;&lt;li class="toclevel-2"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Notes_on_Creating_Visual_Studio_projects"&gt;&lt;span class="tocnumber"&gt;4.1&lt;/span&gt; &lt;span class="toctext"&gt;Notes on Creating Visual Studio projects&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li class="toclevel-1"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Maintaining_Visual_Studio_Projects"&gt;&lt;span class="tocnumber"&gt;5&lt;/span&gt; &lt;span class="toctext"&gt;Maintaining Visual Studio Projects&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-1"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Another_way_for_creating_and_maintaining_Visual_Studio_Projects"&gt;&lt;span class="tocnumber"&gt;6&lt;/span&gt; &lt;span class="toctext"&gt;Another way for creating and maintaining Visual Studio Projects&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li class="toclevel-1"&gt;&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio#Buildproblems_with_Visual_Studio_2005_and_service_pack_1"&gt;&lt;span class="tocnumber"&gt;7&lt;/span&gt; &lt;span class="toctext"&gt;Buildproblems with Visual Studio 2005 and service pack 1&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;script type="text/javascript"&gt; if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } &lt;/script&gt; &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=1" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Building_Qt"&gt;&lt;/a&gt;&lt;h1&gt; Building Qt &lt;/h1&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=2" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Obtain_and_install_the_Qt_source"&gt;&lt;/a&gt;&lt;h2&gt; Obtain and install the Qt source &lt;/h2&gt; &lt;ol&gt;&lt;li&gt; To start, download the source package: &lt;a href="http://qtnode.net/wiki/Download_Qt" title="Download Qt"&gt;Download Qt&lt;/a&gt;  (Be sure to download the source package, &lt;b&gt;not&lt;/b&gt; the package that installs MinGW.  The source package is a &lt;i&gt;.zip&lt;/i&gt; file, whereas the binary package for use with MinGW is an executable.)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Unzip your Qt source to a logical location.&lt;br /&gt;  Here are some suggestions:&lt;br /&gt;    &lt;tt&gt;C:\Qt\4.2\&lt;/tt&gt;&lt;br /&gt;    &lt;tt&gt;C:\Qt\4.2-msvc2005\&lt;/tt&gt;    (&lt;-- if for instance you plan on using Visual Studio 2005)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=3" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Download_and_install_the_patch_allowing_Qt_to_be_compiled_with_Visual_Studio_compilers"&gt;&lt;/a&gt;&lt;h2&gt; Download and install the patch allowing Qt to be compiled with Visual Studio compilers &lt;/h2&gt; &lt;ol&gt;&lt;li&gt; Download &lt;a href="http://downloads.sourceforge.net/qtwin/acs-4.2.3-patch1.zip" class="external text" title="http://downloads.sourceforge.net/qtwin/acs-4.2.3-patch1.zip" rel="nofollow"&gt;acs-4.2.3-patch1.zip&lt;/a&gt; from &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=49109" class="external text" title="http://sourceforge.net/project/showfiles.php?group id=49109" rel="nofollow"&gt;sourceforge.net&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; Unzip the contents of &lt;tt&gt;acs-4.2.3-patch1.zip&lt;/tt&gt; into the directory that you have unzipped the Qt sources.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=4" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Open_a_command_prompt_in_the_Qt_source_directory"&gt;&lt;/a&gt;&lt;h2&gt; Open a command prompt in the Qt source directory &lt;/h2&gt; &lt;p&gt;Run &lt;tt&gt;cmd.exe&lt;/tt&gt; however you prefer, but you must make sure that the Visual Studio compiler files are in your path.  &lt;/p&gt; &lt;ul&gt;&lt;li&gt; If you want to build Qt as a 64-bit library under Windows, all you need to do is use the 64-bit Command Prompt supplied with the Visual Studio Tools. &lt;/li&gt;&lt;li&gt; If you are using Microsoft Visual Studio 6.0, try running &lt;tt&gt;vcvars32.bat&lt;/tt&gt; from the command-line. &lt;/li&gt;&lt;li&gt; If you are using Microsoft Visual Studio .NET or 2005, go into the program group called 'Visual Studio Tools' and run the command prompt shortcut. &lt;ul&gt;&lt;li&gt; &lt;i&gt;Note for Visual C++ 2005 Express users&lt;/i&gt; (this may also apply to the non-express version) : make sure you installed the Platform SDK. Step 3 of the Platform SDK installation describes how to add paths to Visual C++. However, you also have to manually add those paths in your environment in order to compile Qt. Here is what you can do before launching the command prompt: &lt;ul&gt;&lt;li&gt; Add the three paths (LIB, INCLUDE and PATH) to your &lt;tt&gt;vsvars32.bat&lt;/tt&gt; file, normally found under &lt;tt&gt;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools&lt;/tt&gt;. For example: &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt; &lt;tt&gt;@set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%INCLUDE%&lt;/tt&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt;  would become &lt;/dd&gt;&lt;/dl&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt;&lt;dl&gt;&lt;dd&gt; &lt;tt&gt;@set INCLUDE=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include;&lt;/tt&gt; &lt;/dd&gt;&lt;dd&gt; &lt;tt&gt;C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;%INCLUDE%&lt;/tt&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; A simple way to ensure your environment is setup properly is to see if &lt;tt&gt;nmake.exe&lt;/tt&gt; is in your path:&lt;pre&gt;C:\Qt\4.2&gt; nmake /?&lt;br /&gt;&lt;br /&gt;Microsoft (R) Program Maintenance Utility Version 8.00.50727.42&lt;br /&gt;Copyright (C) Microsoft Corporation.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Usage:  NMAKE @commandfile&lt;br /&gt;       NMAKE [options] [/f makefile] [/x stderrfile] [macrodefs] [targets]&lt;br /&gt;&lt;br /&gt;Options:&lt;br /&gt;&lt;br /&gt;....&lt;/pre&gt; &lt;p&gt;Once you are sure that you have the Visual Studio compiler in your path and you're at the command prompt in the Qt source directory, you are ready to proceed. &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=5" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Patching_the_Qt_sources"&gt;&lt;/a&gt;&lt;h2&gt; Patching the Qt sources &lt;/h2&gt; If you have installed the patch files from &lt;tt&gt;acs-4.2.2-patch1.zip&lt;/tt&gt; correctly, then you should be able to patch the Qt sources by running:&lt;pre&gt;C:\Qt\4.2&gt; installpatch42.bat&lt;/pre&gt; You should see a lot of action, which is normal, which shows all of the files that are being patched:&lt;pre&gt;C:\Qt\4.2&gt; installpatch42.bat&lt;br /&gt;patching file qconfigure.bat&lt;br /&gt;patching file examples/threads/waitconditions/waitconditions.pro&lt;br /&gt;patching file misc/bcc32pch/Makefile.win32-borland&lt;br /&gt;patching file misc/bcc32pch/bcc32pch.cpp&lt;br /&gt;patching file misc/bcc32pch/bcc32pch.pri&lt;br /&gt;patching file misc/bcc32pch/bcc32pch.pro&lt;br /&gt;patching file mkspecs/win32-bccx/qmake.conf&lt;br /&gt;&lt;br /&gt;   [snip]&lt;br /&gt;&lt;br /&gt;patching file tools/porting/src/rpptreeevaluator.cpp&lt;br /&gt;patching file tools/porting/src/rpptreewalker.cpp&lt;br /&gt;patching file tools/porting/src/src.pro&lt;br /&gt;Press any key to continue . . .&lt;br /&gt;Now run qconfigure.bat&lt;/pre&gt; &lt;p&gt;You are now ready for the next step: configuring your Qt install. &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=6" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Configuring_your_Qt_install_.28and_building_qmake.29"&gt;&lt;/a&gt;&lt;h2&gt; Configuring your Qt install (and building &lt;tt&gt;qmake&lt;/tt&gt;)&lt;/h2&gt; &lt;p&gt;We will not use the standard &lt;tt&gt;configure.exe&lt;/tt&gt; that ships with Qt.  We will use &lt;tt&gt;qconfigure.bat&lt;/tt&gt;, included with the &lt;tt&gt;acs-4.2.2-patch1.zip&lt;/tt&gt; file. &lt;/p&gt; But, if you are not sure about which options you want, run &lt;tt&gt;configure.exe&lt;/tt&gt; with the &lt;tt&gt;--help option&lt;/tt&gt;: &lt;pre&gt;configure.exe  --help&lt;/pre&gt; &lt;p&gt;A list of options will be displayed. Take note of any options that you are interested in. Note that by default, static and debug versions of the library are built - this is usually the appropriate choice for most developers. &lt;/p&gt;&lt;p&gt;Once you have written down (or mentally noted) which options you will use, we will run &lt;tt&gt;qconfigure.bat&lt;/tt&gt;.  It will in turn call &lt;tt&gt;configure.exe&lt;/tt&gt; with your chosen options.   &lt;/p&gt;&lt;p&gt;&lt;tt&gt;qconfigure.bat&lt;/tt&gt; requires as the first parameter, one of the following compiler choices: &lt;/p&gt; &lt;ul&gt;&lt;li&gt; &lt;tt&gt;msvc&lt;/tt&gt;    &lt;- if you are using Visual Studio 6.0 &lt;/li&gt;&lt;li&gt; &lt;tt&gt;msvc.net&lt;/tt&gt;    &lt;- if you are using Visual Studio .NET (2003) &lt;/li&gt;&lt;li&gt; &lt;tt&gt;msvc2005&lt;/tt&gt;    &lt;- if you are using Visual Studio 2005 &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; After the first option, you can pass &lt;tt&gt;qconfigure.bat&lt;/tt&gt; any of the &lt;tt&gt;configure.exe&lt;/tt&gt; you had previously noted.  For instance you might type:&lt;pre&gt;C:\Qt\4.2&gt; qconfigure.bat msvc.net -release -no-stl&lt;/pre&gt; &lt;p&gt;(This command would produce only the release libraries and would exclude STL support in Qt.) &lt;/p&gt;&lt;p&gt;(Note that if you want to build static libraries instead of shared, see &lt;a href="http://qtnode.net/wiki/Building_static" title="Building static"&gt;Building static&lt;/a&gt;) &lt;/p&gt;&lt;p&gt;You will be prompted 3 times while running &lt;tt&gt;qconfigure.bat&lt;/tt&gt;: &lt;/p&gt; &lt;ol&gt;&lt;li&gt; You will be asked to accept the GPL license.  Type 'y' followed by &lt;enter&gt; to continue. &lt;/li&gt;&lt;li&gt; You will then be informed that &lt;tt&gt;qmake&lt;/tt&gt; is about to be built.  Type 'y' followed by &lt;enter&gt; to continue.  This will take a few moments. &lt;/li&gt;&lt;li&gt; You will then be informed that the Makefiles will be generated. Type 'y' followed by &lt;enter&gt; to continue. This will be a short operation. &lt;/li&gt;&lt;/ol&gt; Once &lt;tt&gt;qconfigure.bat&lt;/tt&gt; has finished, you will be presented with the following message: &lt;pre&gt;====================================================&lt;br /&gt;&lt;br /&gt;You are now ready to build Qt (msvc2005)&lt;br /&gt;&lt;br /&gt;If you specified -static, type 'nmake sub-src'&lt;br /&gt;              otherwise, type 'nmake'&lt;br /&gt;&lt;br /&gt;To start over, type 'nmake distclean'&lt;br /&gt;and then re-run qconfigure.bat&lt;br /&gt;&lt;br /&gt;====================================================&lt;/pre&gt; &lt;p&gt;You may run into &lt;a href="http://www.qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;diff=2325&amp;amp;oldid=2323#Buildproblems_with_Visual_Studio_2005_and_service_pack_1" class="external text" title="http://www.qtnode.net/wiki?title=Qt4 with Visual Studio&amp;diff=2325&amp;amp;oldid=2323#Buildproblems with Visual Studio 2005 and service pack 1" rel="nofollow"&gt;this bug&lt;/a&gt; if you're using Visual Studio 2005 SP1. &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=7" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Building_the_Qt_library"&gt;&lt;/a&gt;&lt;h2&gt; Building the Qt library &lt;/h2&gt; Once configuration and building qmake are completed, you are now ready to build the library.  Simply run nmake:&lt;pre&gt;C:\Qt\4.2&gt; nmake&lt;/pre&gt;  &lt;p&gt;Qt takes a long time to compile.  Now is a good time to brew a pot of coffee. &lt;/p&gt;&lt;p&gt;(If you have specified &lt;tt&gt;-static&lt;/tt&gt; as one of your configuration options, see &lt;a href="http://qtnode.net/wiki/Building_static" title="Building static"&gt;Building static&lt;/a&gt;) &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=8" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Setting_up_your_environment"&gt;&lt;/a&gt;&lt;h1&gt; Setting up your environment &lt;/h1&gt; &lt;p&gt;There are multiple approaches to this, but this is a foolproof way to ensure that your newly create Qt libs are usable. &lt;/p&gt;&lt;p&gt;Prepend the Qt &lt;tt&gt;bin&lt;/tt&gt; directory to your PATH.  Depending on where you installed your Qt sources, the full path may be similar to: &lt;/p&gt; &lt;ul&gt;&lt;li&gt; &lt;tt&gt;C:\Qt\4.2\bin&lt;/tt&gt; &lt;/li&gt;&lt;li&gt; &lt;tt&gt;C:\Qt\4.2-msvc2005\bin&lt;/tt&gt; &lt;/li&gt;&lt;li&gt; &lt;tt&gt;C:\Qt\4.2-visual-studio\bin&lt;/tt&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Ensure that the &lt;tt&gt;QMAKESPEC&lt;/tt&gt; environment variable is set to the appropriate value. &lt;/p&gt; &lt;ul&gt;&lt;li&gt; If you use Visual Studio 6.0, then &lt;tt&gt;win32-msvc&lt;/tt&gt; is the correct value. &lt;/li&gt;&lt;li&gt; If you use Visual Studio .NET (2003), then &lt;tt&gt;win32-msvc.net&lt;/tt&gt; is the correct value. &lt;/li&gt;&lt;li&gt; If you use Visual Studio 2005, then &lt;tt&gt;win32-msvc2005&lt;/tt&gt; is the correct value. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;(Note: this is the recommended practice from qtnode. You can use Qt in other ways with different settings, but this way is foolproof.) &lt;/p&gt;&lt;p&gt;To set your environment variables in Windows, please see &lt;a href="http://www.cs.usask.ca/grads/wew036/latex/env.html" class="external free" title="http://www.cs.usask.ca/grads/wew036/latex/env.html" rel="nofollow"&gt;http://www.cs.usask.ca/grads/wew036/latex/env.html&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Note that you may have to re-open a command window before your settings are changed. &lt;/p&gt; To check that your &lt;tt&gt;PATH&lt;/tt&gt; is set correctly:&lt;pre&gt;C:\&gt; qmake -v&lt;br /&gt;QMake version: 2.01a&lt;br /&gt;Using Qt version 4.2 in C:\Qt\4.2\lib&lt;/pre&gt; To see if &lt;tt&gt;QMAKESPEC&lt;/tt&gt; is set correctly:&lt;pre&gt;C:\&gt; echo %QMAKESPEC%&lt;br /&gt;win32-msvc2005&lt;/pre&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=9" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Testing_your_install"&gt;&lt;/a&gt;&lt;h1&gt; Testing your install &lt;/h1&gt; &lt;p&gt;Please test your install from the command-line first.  Follow the &lt;a href="http://qtnode.net/wiki/Hello_World" title="Hello World"&gt;Hello World&lt;/a&gt; instructions. &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=10" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Creating_Visual_Studio_projects"&gt;&lt;/a&gt;&lt;h1&gt; Creating Visual Studio projects &lt;/h1&gt; &lt;p&gt;{Note: The following works with MS Visual Studio 2005 and 2003, and has not been tested on other versions - look for an expanded section of this section later} &lt;/p&gt;&lt;p&gt;&lt;br /&gt;To create a project, use the &lt;tt&gt;-t&lt;/tt&gt; and &lt;tt&gt;-o&lt;/tt&gt; options. &lt;/p&gt;&lt;p&gt;Normally, (as in the &lt;a href="http://qtnode.net/wiki/Hello_World" title="Hello World"&gt;Hello World&lt;/a&gt; example), you would simply type: &lt;/p&gt; &lt;pre&gt;prompt&gt; qmake -project&lt;br /&gt;prompt&gt; qmake&lt;/pre&gt; &lt;p&gt;To create a &lt;tt&gt;.vcproj&lt;/tt&gt; which will be used by Visual Studio, we will type: &lt;/p&gt; &lt;pre&gt;prompt&gt; qmake -project -t vcapp -o projectname.pro&lt;/pre&gt; &lt;p&gt;In this command, &lt;i&gt;projectname.pro&lt;/i&gt; is the desired name of your project file.  Be sure to include the extension &lt;i&gt;.pro&lt;/i&gt; with your project file name. &lt;/p&gt;&lt;p&gt;From here, you can modify the &lt;tt&gt;projectname.pro&lt;/tt&gt; file if needed. For example, in order to compile an OpenGL project, you should open the file and add &lt;tt&gt;QT += opengl&lt;/tt&gt; at the beginning of the file. You can then continue with: &lt;/p&gt; &lt;pre&gt;prompt&gt; qmake&lt;/pre&gt; &lt;p&gt;If the above command is executed as written in a directory that includes source files (either in that directory or in a subdirectory of that directory), a new Visual Studio project file is created: &lt;/p&gt; &lt;dl&gt;&lt;dd&gt;&lt;tt&gt;projectname.vcproj&lt;/tt&gt; &lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;You can double-click on this &lt;tt&gt;vcproj&lt;/tt&gt; file, or simply type its name in the command window and Visual Studio will create an associated &lt;tt&gt;.sln&lt;/tt&gt; file. &lt;/p&gt;&lt;p&gt;The &lt;tt&gt;-t&lt;/tt&gt; option was used to specify the &lt;i&gt;&lt;a href="http://doc.trolltech.com/4.2/qmake-project-files.html#project-templates" class="external text" title="http://doc.trolltech.com/4.2/qmake-project-files.html#project-templates" rel="nofollow"&gt;templates&lt;/a&gt;&lt;/i&gt; used by &lt;tt&gt;qmake&lt;/tt&gt;.  By default, the template is &lt;tt&gt;app&lt;/tt&gt;.  The &lt;tt&gt;app&lt;/tt&gt; template creates &lt;tt&gt;Makefile&lt;/tt&gt;s which can be used on the command-line when running &lt;tt&gt;nmake&lt;/tt&gt;.  But since we are interest in using the Visual Studio IDE, we want a &lt;tt&gt;vcapp&lt;/tt&gt; which will give us a &lt;tt&gt;.vcproj&lt;/tt&gt; instead of a regular &lt;tt&gt;Makefile&lt;/tt&gt;. &lt;/p&gt; &lt;dl&gt;&lt;dd&gt;Note that you can also use the &lt;tt&gt;-tp vc&lt;/tt&gt; option instead of &lt;tt&gt;-t vcapp&lt;/tt&gt;.  This will prepend &lt;tt&gt;vc&lt;/tt&gt; to the default template (which is normally &lt;tt&gt;app&lt;/tt&gt;). &lt;/dd&gt;&lt;/dl&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=11" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Notes_on_Creating_Visual_Studio_projects"&gt;&lt;/a&gt;&lt;h2&gt; Notes on Creating Visual Studio projects &lt;/h2&gt; &lt;p&gt;{Note: This may only apply to static builds. If so move this to Qt4_with_Visual_Studio_and_static_C_runtime, or else remove this note} &lt;/p&gt;&lt;p&gt;You can create the Visual Studio project file with your standard .pro file, using: "qmake -t vcapp".  &lt;/p&gt;&lt;p&gt;With Qt 4.2.2 "qmake -t vcapp" forgets about the standard libraries like gdi32.lib comdlg32.lib... The best way to fix this is: you generate the Makefiles using "qmake". You look for the LIBS line in Makefile.* and add the lacking libs with "win32:LIBS +=" to the .pro file. This also applies to the method described above. &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=12" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Maintaining_Visual_Studio_Projects"&gt;&lt;/a&gt;&lt;h1&gt; Maintaining Visual Studio Projects &lt;/h1&gt; &lt;p&gt;To add files to your project, you can edit your &lt;tt&gt;.pro&lt;/tt&gt; file and re-run &lt;tt&gt;qmake&lt;/tt&gt;.  The only problem is that any customizations to your &lt;tt&gt;.vcproj&lt;/tt&gt; will be lost. However, changes made to the &lt;tt&gt;.sln&lt;/tt&gt; are kept and you can simply reopen the solution file after updating the &lt;tt&gt;.vcproj&lt;/tt&gt;. &lt;/p&gt;&lt;p&gt;&lt;b&gt;Can someone see if there is a better way to deal with both &lt;tt&gt;.pro&lt;/tt&gt;s and &lt;tt&gt;.sln&lt;/tt&gt;s?&lt;/b&gt; &lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=13" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Another_way_for_creating_and_maintaining_Visual_Studio_Projects"&gt;&lt;/a&gt;&lt;h1&gt; Another way for creating and maintaining Visual Studio Projects &lt;/h1&gt; &lt;p&gt;This should be a little better way to deal with Qt and Visual Studio: You only have to maintain a .pro File, and you can use the normal build buttons in Visual Studio, and you get errors and so on shown in VS. This is written for Visual Studio.Net 2003, but should also work with Visual Studio 2005 (may somebody try please? - yes it does) &lt;/p&gt;&lt;p&gt;First you create a new Makefile Project in a empty solution. Then go to the project Property Pages (right click project-&gt;Properties). Make sure that Debug is the current Configuration and choose "NMake" in the left menu. Then open the Window for "Build command Line" by clicking the "..." Button. Here you enter: &lt;/p&gt; &lt;pre&gt;%QTDIR%\bin\qmake&lt;br /&gt;nmake debug&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;In "Rebuild Command Line" you enter: &lt;/p&gt; &lt;pre&gt;%QTDIR%\bin\qmake&lt;br /&gt;nmake debug-clean&lt;br /&gt;nmake debug&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;And in "Clean Command Line": &lt;/p&gt; &lt;pre&gt;%QTDIR%\bin\qmake&lt;br /&gt;nmake debug-clean&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now the last change, in "Output" enter: &lt;/p&gt; &lt;pre&gt;debug\[you app Name].exe&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Now do the same thing for release Configuration, but substitute "debug" with "release" ( also in Output Path!) &lt;/p&gt;&lt;p&gt;Now confirm this dialog with OK and create a new File. To do so right click your project and choose Add-&gt;Add new Files. Here choose "Text File (.txt)" and as name enter "src.pro", or something similar. In this file enter: &lt;/p&gt; &lt;pre&gt;TEMPLATE = app&lt;br /&gt;CONFIG  += qt [do you config here, mine would be: "qt warn_on"]&lt;br /&gt;QT  += [do you qt-config here]&lt;br /&gt;SOURCES  = main.cpp&lt;br /&gt;HEADERS  =&lt;br /&gt;TARGET  = [your App Name]&lt;br /&gt;&lt;br /&gt;win32:debug:CONFIG += console [-&gt;if you want to receive qDebug() messages on Windows...]&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Save this file and add another file to your project: main.cpp, do it as you did it with the pro File, but choose "C++ File (.cpp)" as file type. &lt;/p&gt;&lt;p&gt;If you want to add another source file to your project, just add it with the add menu, and don't forget to add the files to the right section in your pro-File. This pro file can be used like any normal pro-File, without any problems. &lt;/p&gt;&lt;p&gt;To give you a better start-off here is a little example solution: &lt;a href="http://qtnode.net/wiki/Image:Visual_studio_example_project_1.zip" title="Image:Visual studio example project 1.zip"&gt;Image:Visual studio example project 1.zip&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://qtnode.net/wiki?title=Qt4_with_Visual_Studio&amp;action=edit&amp;amp;section=14" title="Qt4 with Visual Studio"&gt;edit&lt;/a&gt;]&lt;/div&gt;&lt;a name="Buildproblems_with_Visual_Studio_2005_and_service_pack_1"&gt;&lt;/a&gt;&lt;h1&gt; Buildproblems with Visual Studio 2005 and service pack 1 &lt;/h1&gt; &lt;p&gt;After installing service pack 1 for Visual Studio 2005 you will get compiler errors like this one: &lt;/p&gt; &lt;pre&gt;c:\qt\4.1.4\include\qtcore\../../src/corelib/tools/qhash.h(805) : error C2244: 'QMultiHash&lt;key,t&gt;::replace' : unable to match function definition to an existing declaration&lt;br /&gt;       c:\qt\4.1.4\include\qtcore\../../src/corelib/tools/qhash.h(790) : see declaration of 'QMultiHash&lt;key,t&gt;::replace'&lt;br /&gt;       definition&lt;br /&gt;       'QHash&lt;key,t&gt;::iterator QMultiHash&lt;key,t&gt;::replace(const Key &amp;,const T &amp;amp;)'&lt;br /&gt;       existing declarations&lt;br /&gt;       'QHash&lt;key,t&gt;::iterator QMultiHash&lt;key,t&gt;::replace(const Key &amp;,const T &amp;amp;)'&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;This is because of a regression in the compiler and can not be solved by Trolltech.&lt;br /&gt;&lt;br /&gt;There are two ways to solve the problem:&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;(NEW)&lt;/b&gt; you can download the fix by going to &lt;a href="http://hotfix.xable.net/download" class="external autonumber" title="http://hotfix.xable.net/download" rel="nofollow"&gt;[1]&lt;/a&gt; and then English&gt;Visual Studio 2005&gt;VS80sp1-KB930859-X86-ENU.exe for more information you can look at the post on the Qt forum &lt;a href="http://www.qtcentre.org/forum/f-qt-programming-2/t-do-not-use-vs2005-sp1-with-qt4-4883.html" class="external autonumber" title="http://www.qtcentre.org/forum/f-qt-programming-2/t-do-not-use-vs2005-sp1-with-qt4-4883.html" rel="nofollow"&gt;[2]&lt;/a&gt; (This fix work perfectly !) &lt;/li&gt;&lt;li&gt;&lt;b&gt;(Not recommended)&lt;/b&gt; you can patch the Qt libray&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The patch for the QMap sourcecode: &lt;/p&gt; &lt;pre&gt;==== //depot/qt/4.2/src/corelib/tools/qmap.h#3 - f:\depot_vs2005\qt-4.2\src\corelib\tools\qmap.h ====&lt;br /&gt;302a303,304&lt;br /&gt;&gt;    &lt;br /&gt;&gt;     typedef typename QMap&lt;key,&gt;::iterator DummyMapIterator;&lt;br /&gt;883,884c885,886&lt;br /&gt;&lt;&gt;::iterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;&gt;::iterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;---&lt;br /&gt;&gt;     inline typename DummyMapIterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&gt;     inline typename DummyMapIterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;And the patch for the QHash sourcecode: &lt;/p&gt; &lt;pre&gt;==== //depot/qt/4.2/src/corelib/tools/qhash.h#2 - f:\depot_vs2005\qt-4.2\src\corelib\tools\qhash.h ====&lt;br /&gt;386a387,388&lt;br /&gt;&gt;     typedef typename QHash&lt;key,&gt;::iterator DummyHashIterator;&lt;br /&gt;&gt;    &lt;br /&gt;841,842c843,844&lt;br /&gt;&lt;&gt;::iterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;&gt;::iterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;---&lt;br /&gt;&gt;     inline typename DummyHashIterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&gt;     inline typename DummyHashIterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;This patch works for Qt 4.2.2 but you'll need these for Qt 4.2.3: &lt;/p&gt; &lt;pre&gt;==== //depot/qt/4.2.3/src/corelib/tools/qmap.h#3 - f:\depot_vs2005\qt-4.2.3\src\corelib\tools\qmap.h ====&lt;br /&gt;244a245,246&lt;br /&gt;&gt;     typedef typename QMap&lt;key,&gt;::iterator DummyMapIterator;&lt;br /&gt;&gt;&lt;br /&gt;893,894c896,897&lt;br /&gt;&lt;&gt;::iterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;&gt;::iterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;---&lt;br /&gt;&gt;     inline typename DummyMapIterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&gt;     inline typename DummyMapIterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;and  &lt;/p&gt; &lt;pre&gt;=== //depot/qt/4.2.3/src/corelib/tools/qhash.h#2 - f:\depot_vs2005\qt-4.2.3\src\corelib\tools\qhash.h ====&lt;br /&gt;329a330,331&lt;br /&gt;&gt;     typedef typename QHash&lt;key,&gt;::iterator DummyHashIterator;&lt;br /&gt;&gt;&lt;br /&gt;851,852c853,854&lt;br /&gt;&lt;&gt;::iterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;&gt;::iterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;---&lt;br /&gt;&gt;     inline typename DummyHashIterator replace(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&gt;     inline typename DummyHashIterator insert(const Key &amp;key, const T &amp;amp;value);&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;If you're trying to apply this manually, the trick is to put the typedef for the dummy iterator right after the friend declaration for the iterator in QMap or QHash. &lt;/p&gt; &lt;!-- Saved in parser cache with key zpuppet_qtnodewiki:pcache:idhash:1289-0!1!0!0!!en!2 and timestamp 20070512093925 --&gt; &lt;div class="printfooter"&gt; Retrieved from "&lt;a href="http://qtnode.net/wiki/Qt4_with_Visual_Studio"&gt;http://qtnode.net/wiki/Qt4_with_Visual_Studio&lt;/a&gt;"&lt;/div&gt;      &lt;div id="catlinks"&gt;&lt;p class="catlinks"&gt;&lt;a href="http://qtnode.net/wiki?title=Special:Categories&amp;amp;article=Qt4_with_Visual_Studio" title="Special:Categories"&gt;Categories&lt;/a&gt;: &lt;a href="http://qtnode.net/wiki/Category:Qt_Setup" title="Category:Qt Setup"&gt;Qt Setup&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-7917860348480068467?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/7917860348480068467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=7917860348480068467' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7917860348480068467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7917860348480068467'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/05/qt-fucking-hell.html' title='QT fucking Hell'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-8802544867385221906</id><published>2007-05-09T02:17:00.000-07:00</published><updated>2007-05-09T02:24:01.099-07:00</updated><title type='text'>Relationships Among MFC Objects</title><content type='html'>&lt;div class="title"&gt;&lt;br /&gt;        &lt;/div&gt;&lt;!--Content type: DocStudio. Transform: devdiv2mtps.xslt.--&gt;   &lt;p&gt; &lt;/p&gt;&lt;p&gt;To help put the document/view creation process in perspective, consider a running program: a document, the frame window used to contain the view, and the view associated with the document. &lt;/p&gt;  &lt;ul&gt;&lt;li&gt; &lt;p&gt;A document keeps a list of the views of that document and a pointer to the document template that created the document.&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;A view keeps a pointer to its document and is a child of its parent frame window.&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;A document frame window keeps a pointer to its current active view. &lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;A document template keeps a list of its open documents.&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;The application keeps a list of its document templates.&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;p&gt;Windows keeps track of all open windows so it can send messages to them.&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;These relationships are established during document/view creation. The following table shows how objects in a running program can access other objects. Any object can obtain a pointer to the application object by calling the global function &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl08',this);" href="http://msdn2.microsoft.com/en-us/library/5k9f064x%28VS.80%29.aspx"&gt;AfxGetApp&lt;/a&gt;.&lt;/p&gt; &lt;div class="labelheading"&gt;&lt;b&gt;Gaining Access to Other Objects in Your Application&lt;/b&gt;&lt;/div&gt;&lt;div class="tableSection"&gt;&lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;               From object             &lt;/th&gt; &lt;th&gt;               How to access other objects             &lt;/th&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt; &lt;p&gt;Document&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;Use &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl09',this);" href="http://msdn2.microsoft.com/en-us/library/ysfkkk2h%28VS.80%29.aspx"&gt;GetFirstViewPosition&lt;/a&gt; and &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl10',this);" href="http://msdn2.microsoft.com/en-us/library/d6718830%28VS.80%29.aspx"&gt;GetNextView&lt;/a&gt; to access the document's view list. &lt;/p&gt; &lt;p&gt;Call &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl11',this);" href="http://msdn2.microsoft.com/en-us/library/3kfssdbw%28VS.80%29.aspx"&gt;GetDocTemplate&lt;/a&gt; to get the document template.&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt; &lt;p&gt;View&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;Call &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl12',this);" href="http://msdn2.microsoft.com/en-us/library/8az518a8%28VS.80%29.aspx"&gt;GetDocument&lt;/a&gt; to get the document. &lt;/p&gt; &lt;p&gt;Call &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl13',this);" href="http://msdn2.microsoft.com/en-us/library/6f45sskz%28VS.80%29.aspx"&gt;GetParentFrame&lt;/a&gt; to get the frame window. &lt;/p&gt; &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt; &lt;p&gt;Document frame window&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;Call &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl14',this);" href="http://msdn2.microsoft.com/en-us/library/zs0t7t34%28VS.80%29.aspx"&gt;GetActiveView&lt;/a&gt; to get the current view. &lt;/p&gt; &lt;p&gt;Call &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl15',this);" href="http://msdn2.microsoft.com/en-us/library/cdc4chb3%28VS.80%29.aspx"&gt;GetActiveDocument&lt;/a&gt; to get the document attached to the current view.&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt; &lt;p&gt;MDI frame window&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p&gt;Call &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl16',this);" href="http://msdn2.microsoft.com/en-us/library/99y32tyd%28VS.80%29.aspx"&gt;MDIGetActive&lt;/a&gt; to get the currently active &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl17',this);" href="http://msdn2.microsoft.com/en-us/library/hw5095wc%28VS.80%29.aspx"&gt;CMDIChildWnd&lt;/a&gt;.&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt; &lt;p&gt;Typically, a frame window has one view, but sometimes, as in splitter windows, the same frame window contains multiple views. The frame window keeps a pointer to the currently active view; the pointer is updated any time another view is activated.&lt;/p&gt; &lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th align="left"&gt;&lt;img class="note" alt="Note" src="http://msdn2.microsoft.com/en-us/library/bs315d2c.note%28en-US,VS.80%29.gif" /&gt;Note &lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt; &lt;p&gt;A pointer to the main frame window is stored in the &lt;a onclick="javascript:Track('ctl00_LibFrame_ctl07|ctl00_LibFrame_ctl18',this);" href="http://msdn2.microsoft.com/en-us/library/f3ddxzww%28VS.80%29.aspx"&gt;m_pMainWnd&lt;/a&gt; member variable of the application object. A call to &lt;b&gt;OnFileNew&lt;/b&gt; in your override of the &lt;b&gt;InitInstance&lt;/b&gt; member function of &lt;b&gt;CWinApp&lt;/b&gt; sets &lt;b&gt;m_pMainWnd&lt;/b&gt; for you. If you do not call &lt;b&gt;OnFileNew&lt;/b&gt;, you must set the variable's value in &lt;b&gt;InitInstance&lt;/b&gt; yourself. (SDI COM component (server) applications may not set the variable if /Embedding is on the command line.) Note that &lt;b&gt;m_pMainWnd&lt;/b&gt; is now a member of class &lt;b&gt;CWinThread&lt;/b&gt; rather than &lt;b&gt;CWinApp&lt;/b&gt;.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-8802544867385221906?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/8802544867385221906/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=8802544867385221906' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/8802544867385221906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/8802544867385221906'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/05/relationships-among-mfc-objects.html' title='Relationships Among MFC Objects'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-6004588719315128940</id><published>2007-05-07T19:37:00.000-07:00</published><updated>2007-05-07T19:42:12.451-07:00</updated><title type='text'>How to: Convert Between Various String Types</title><content type='html'>&lt;h1 class="heading"&gt;Converting from char *&lt;/h1&gt;&lt;div id="sectionSection0" class="seeAlsoNoToggleSection"&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Example&lt;/h1&gt;&lt;div id="sectionSection1" class="seeAlsoNoToggleSection"&gt;  &lt;div class="subSection"&gt; &lt;p&gt;This example demonstrates how to convert from a &lt;b&gt;char *&lt;/b&gt; to the other string types listed above.&lt;/p&gt; &lt;/div&gt; &lt;div class="subSection"&gt; &lt;div class="code" id="ctl00_LibFrame_ctl12_other"&gt;&lt;pre class="code" id="ctl00_LibFrame_ctl12other" space="preserve"&gt;// convert_from_char.cpp&lt;br /&gt;// compile with: /clr /link comsuppw.lib&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;&lt;br /&gt;#include "atlbase.h"&lt;br /&gt;#include "atlstr.h"&lt;br /&gt;#include "comutil.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;using namespace System;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   char *orig = "Hello, World!";&lt;br /&gt;   cout &lt;&lt; orig &lt;&lt; " (char *)" &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a wchar_t*&lt;br /&gt;   size_t origsize = strlen(orig) + 1;&lt;br /&gt;   const size_t newsize = 100;&lt;br /&gt;   size_t convertedChars = 0;&lt;br /&gt;   wchar_t wcstring[newsize];&lt;br /&gt;   mbstowcs_s(&amp;convertedChars, wcstring, origsize, orig, _TRUNCATE);&lt;br /&gt;   wcscat_s(wcstring, L" (wchar_t *)");&lt;br /&gt;   wcout &lt;&lt; wcstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a _bstr_t&lt;br /&gt;   _bstr_t bstrt(orig);&lt;br /&gt;   bstrt += " (_bstr_t)";&lt;br /&gt;   cout &lt;&lt; bstrt &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a CComBSTR&lt;br /&gt;   CComBSTR ccombstr(orig);&lt;br /&gt;   if (ccombstr.Append(L" (CComBSTR)") == S_OK)&lt;br /&gt;   {&lt;br /&gt;       CW2A printstr(ccombstr);&lt;br /&gt;       cout &lt;&lt; printstr &lt;&lt; endl;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Convert to a CString&lt;br /&gt;   CString cstring(orig);&lt;br /&gt;   cstring += " (CString)";&lt;br /&gt;   cout &lt;&lt; cstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a basic_string&lt;br /&gt;   string basicstring(orig);&lt;br /&gt;   basicstring += " (basic_string)";&lt;br /&gt;   cout &lt;&lt; basicstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a System::String&lt;br /&gt;   String ^systemstring = gcnew String(orig);&lt;br /&gt;   systemstring += " (System::String)";&lt;br /&gt;   Console::WriteLine("{0}", systemstring);&lt;br /&gt;   delete systemstring;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3 class="subHeading"&gt;Output&lt;/h3&gt;&lt;div class="subSection"&gt; &lt;pre&gt;Hello, World! (char *)&lt;br /&gt;Hello, World! (wchar_t *)&lt;br /&gt;Hello, World! (_bstr_t)&lt;br /&gt;Hello, World! (CComBSTR)&lt;br /&gt;Hello, World! (CString)&lt;br /&gt;Hello, World! (basic_string)&lt;br /&gt;Hello, World! (System::String)&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Converting from wchar_t *&lt;/h1&gt;&lt;div id="sectionSection2" class="seeAlsoNoToggleSection"&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Example&lt;/h1&gt;&lt;div id="sectionSection3" class="seeAlsoNoToggleSection"&gt;  &lt;div class="subSection"&gt; &lt;p&gt;This example demonstrates how to convert from a &lt;b&gt;wchar_t *&lt;/b&gt; to the other string types listed above.&lt;/p&gt; &lt;/div&gt; &lt;div class="subSection"&gt; &lt;div class="code" id="ctl00_LibFrame_ctl13_other"&gt;&lt;pre class="code" id="ctl00_LibFrame_ctl13other" space="preserve"&gt;// convert_from_wchar_t.cpp&lt;br /&gt;// compile with: /clr /link comsuppw.lib&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;&lt;br /&gt;#include "atlbase.h"&lt;br /&gt;#include "atlstr.h"&lt;br /&gt;#include "comutil.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;using namespace System;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   wchar_t *orig = L"Hello, World!";&lt;br /&gt;   wcout &lt;&lt; orig &lt;&lt; L" (wchar_t *)" &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a char*&lt;br /&gt;   size_t origsize = wcslen(orig) + 1;&lt;br /&gt;   const size_t newsize = 100;&lt;br /&gt;   size_t convertedChars = 0;&lt;br /&gt;   char nstring[newsize];&lt;br /&gt;   wcstombs_s(&amp;convertedChars, nstring, origsize, orig, _TRUNCATE);&lt;br /&gt;   strcat_s(nstring, " (char *)");&lt;br /&gt;   cout &lt;&lt; nstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a _bstr_t&lt;br /&gt;   _bstr_t bstrt(orig);&lt;br /&gt;   bstrt += " (_bstr_t)";&lt;br /&gt;   cout &lt;&lt; bstrt &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a CComBSTR&lt;br /&gt;   CComBSTR ccombstr(orig);&lt;br /&gt;   if (ccombstr.Append(L" (CComBSTR)") == S_OK)&lt;br /&gt;   {&lt;br /&gt;       CW2A printstr(ccombstr);&lt;br /&gt;       cout &lt;&lt; printstr &lt;&lt; endl;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Convert to a CString&lt;br /&gt;   CString cstring(orig);&lt;br /&gt;   cstring += " (CString)";&lt;br /&gt;   cout &lt;&lt; cstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a basic_string&lt;br /&gt;   wstring basicstring(orig);&lt;br /&gt;   basicstring += L" (basic_string)";&lt;br /&gt;   wcout &lt;&lt; basicstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a System::String&lt;br /&gt;   String ^systemstring = gcnew String(orig);&lt;br /&gt;   systemstring += " (System::String)";&lt;br /&gt;   Console::WriteLine("{0}", systemstring);&lt;br /&gt;   delete systemstring;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3 class="subHeading"&gt;Output&lt;/h3&gt;&lt;div class="subSection"&gt; &lt;pre&gt;Hello, World! (wchar_t *)&lt;br /&gt;Hello, World! (char *)&lt;br /&gt;Hello, World! (_bstr_t)&lt;br /&gt;Hello, World! (CComBSTR)&lt;br /&gt;Hello, World! (CString)&lt;br /&gt;Hello, World! (basic_string)&lt;br /&gt;Hello, World! (System::String)&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Converting from _bstr_t&lt;/h1&gt;&lt;div id="sectionSection4" class="seeAlsoNoToggleSection"&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Example&lt;/h1&gt;&lt;div id="sectionSection5" class="seeAlsoNoToggleSection"&gt;  &lt;div class="subSection"&gt; &lt;p&gt;This example demonstrates how to convert from a &lt;b&gt;_bstr_t&lt;/b&gt; to the other string types listed above.&lt;/p&gt; &lt;/div&gt; &lt;div class="subSection"&gt; &lt;div class="code" id="ctl00_LibFrame_ctl14_other"&gt;&lt;pre class="code" id="ctl00_LibFrame_ctl14other" space="preserve"&gt;// convert_from_bstr_t.cpp&lt;br /&gt;// compile with: /clr /link comsuppw.lib&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;&lt;br /&gt;#include "atlbase.h"&lt;br /&gt;#include "atlstr.h"&lt;br /&gt;#include "comutil.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;using namespace System;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   _bstr_t orig("Hello, World!");&lt;br /&gt;   wcout &lt;&lt; orig &lt;&lt; " (_bstr_t)" &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a char*&lt;br /&gt;   const size_t newsize = 100;&lt;br /&gt;   char nstring[newsize];&lt;br /&gt;   strcpy_s(nstring, (char *)orig);&lt;br /&gt;   strcat_s(nstring, " (char *)");&lt;br /&gt;   cout &lt;&lt; nstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a wchar_t*&lt;br /&gt;   wchar_t wcstring[newsize];&lt;br /&gt;   wcscpy_s(wcstring, (wchar_t *)orig);&lt;br /&gt;   wcscat_s(wcstring, L" (wchar_t *)");&lt;br /&gt;   wcout &lt;&lt; wcstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a CComBSTR&lt;br /&gt;   CComBSTR ccombstr((char *)orig);&lt;br /&gt;   if (ccombstr.Append(L" (CComBSTR)") == S_OK)&lt;br /&gt;   {&lt;br /&gt;       CW2A printstr(ccombstr);&lt;br /&gt;       cout &lt;&lt; printstr &lt;&lt; endl;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Convert to a CString&lt;br /&gt;   CString cstring((char *)orig);&lt;br /&gt;   cstring += " (CString)";&lt;br /&gt;   cout &lt;&lt; cstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a basic_string&lt;br /&gt;   string basicstring((char *)orig);&lt;br /&gt;   basicstring += " (basic_string)";&lt;br /&gt;   cout &lt;&lt; basicstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a System::String&lt;br /&gt;   String ^systemstring = gcnew String((char *)orig);&lt;br /&gt;   systemstring += " (System::String)";&lt;br /&gt;   Console::WriteLine("{0}", systemstring);&lt;br /&gt;   delete systemstring;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3 class="subHeading"&gt;Output&lt;/h3&gt;&lt;div class="subSection"&gt; &lt;pre&gt;Hello, World! (_bstr_t)&lt;br /&gt;Hello, World! (char *)&lt;br /&gt;Hello, World! (wchar_t *)&lt;br /&gt;Hello, World! (CComBSTR)&lt;br /&gt;Hello, World! (CString)&lt;br /&gt;Hello, World! (basic_string)&lt;br /&gt;Hello, World! (System::String)&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Converting from CComBSTR&lt;/h1&gt;&lt;div id="sectionSection6" class="seeAlsoNoToggleSection"&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Example&lt;/h1&gt;&lt;div id="sectionSection7" class="seeAlsoNoToggleSection"&gt;  &lt;div class="subSection"&gt; &lt;p&gt;This example demonstrates how to convert from a &lt;b&gt;CComBSTR&lt;/b&gt; to the other string types listed above.&lt;/p&gt; &lt;/div&gt; &lt;div class="subSection"&gt; &lt;div class="code" id="ctl00_LibFrame_ctl15_other"&gt;&lt;pre class="code" id="ctl00_LibFrame_ctl15other" space="preserve"&gt;// convert_from_ccombstr.cpp&lt;br /&gt;// compile with: /clr /link comsuppw.lib&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;&lt;br /&gt;#include "atlbase.h"&lt;br /&gt;#include "atlstr.h"&lt;br /&gt;#include "comutil.h"&lt;br /&gt;#include "vcclr.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;using namespace System;&lt;br /&gt;using namespace System::Runtime::InteropServices;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   CComBSTR orig("Hello, World!");&lt;br /&gt;   CW2A printstr(orig);&lt;br /&gt;   cout &lt;&lt; printstr &lt;&lt; " (CComBSTR)" &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a char*&lt;br /&gt;   const size_t newsize = 100;&lt;br /&gt;   char nstring[newsize];&lt;br /&gt;   CW2A tmpstr1(orig);&lt;br /&gt;   strcpy_s(nstring, tmpstr1);&lt;br /&gt;   strcat_s(nstring, " (char *)");&lt;br /&gt;   cout &lt;&lt; nstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a wchar_t*&lt;br /&gt;   wchar_t wcstring[newsize];&lt;br /&gt;   wcscpy_s(wcstring, orig);&lt;br /&gt;   wcscat_s(wcstring, L" (wchar_t *)");&lt;br /&gt;   wcout &lt;&lt; wcstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a _bstr_t&lt;br /&gt;   _bstr_t bstrt(orig);&lt;br /&gt;   bstrt += " (_bstr_t)";&lt;br /&gt;   cout &lt;&lt; bstrt &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a CString&lt;br /&gt;   CString cstring(orig);&lt;br /&gt;   cstring += " (CString)";&lt;br /&gt;   cout &lt;&lt; cstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a basic_string&lt;br /&gt;   wstring basicstring(orig);&lt;br /&gt;   basicstring += L" (basic_string)";&lt;br /&gt;   wcout &lt;&lt; basicstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a System::String&lt;br /&gt;   String ^systemstring = gcnew String(orig);&lt;br /&gt;   systemstring += " (System::String)";&lt;br /&gt;   Console::WriteLine("{0}", systemstring);&lt;br /&gt;   delete systemstring;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3 class="subHeading"&gt;Output&lt;/h3&gt;&lt;div class="subSection"&gt; &lt;pre&gt;Hello, World! (CComBSTR)&lt;br /&gt;Hello, World! (char *)&lt;br /&gt;Hello, World! (wchar_t *)&lt;br /&gt;Hello, World! (_bstr_t)&lt;br /&gt;Hello, World! (CString)&lt;br /&gt;Hello, World! (basic_string)&lt;br /&gt;Hello, World! (System::String)&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Converting from CString&lt;/h1&gt;&lt;div id="sectionSection8" class="seeAlsoNoToggleSection"&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Example&lt;/h1&gt;&lt;div id="sectionSection9" class="seeAlsoNoToggleSection"&gt;  &lt;div class="subSection"&gt; &lt;p&gt;This example demonstrates how to convert from a &lt;b&gt;CString&lt;/b&gt; to the other string types listed above.&lt;/p&gt; &lt;/div&gt; &lt;div class="subSection"&gt; &lt;div class="code" id="ctl00_LibFrame_ctl16_other"&gt;&lt;pre class="code" id="ctl00_LibFrame_ctl16other" space="preserve"&gt;// convert_from_cstring.cpp&lt;br /&gt;// compile with: /clr /link comsuppw.lib&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;&lt;br /&gt;#include "atlbase.h"&lt;br /&gt;#include "atlstr.h"&lt;br /&gt;#include "comutil.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;using namespace System;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   CString orig("Hello, World!");&lt;br /&gt;   wcout &lt;&lt; orig &lt;&lt; " (CString)" &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a char*&lt;br /&gt;   const size_t newsize = 100;&lt;br /&gt;   char nstring[newsize];&lt;br /&gt;   strcpy_s(nstring, orig);&lt;br /&gt;   strcat_s(nstring, " (char *)");&lt;br /&gt;   cout &lt;&lt; nstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a wchar_t*&lt;br /&gt;   // You must first convert to a char * for this to work.&lt;br /&gt;   size_t origsize = strlen(orig) + 1;&lt;br /&gt;   size_t convertedChars = 0;&lt;br /&gt;   wchar_t wcstring[newsize];&lt;br /&gt;   mbstowcs_s(&amp;convertedChars, wcstring, origsize, orig, _TRUNCATE);&lt;br /&gt;   wcscat_s(wcstring, L" (wchar_t *)");&lt;br /&gt;   wcout &lt;&lt; wcstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a _bstr_t&lt;br /&gt;   _bstr_t bstrt(orig);&lt;br /&gt;   bstrt += " (_bstr_t)";&lt;br /&gt;   cout &lt;&lt; bstrt &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a CComBSTR&lt;br /&gt;   CComBSTR ccombstr(orig);&lt;br /&gt;   if (ccombstr.Append(L" (CComBSTR)") == S_OK)&lt;br /&gt;   {&lt;br /&gt;       CW2A printstr(ccombstr);&lt;br /&gt;       cout &lt;&lt; printstr &lt;&lt; endl;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Convert to a basic_string&lt;br /&gt;   string basicstring(orig);&lt;br /&gt;   basicstring += " (basic_string)";&lt;br /&gt;   cout &lt;&lt; basicstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a System::String&lt;br /&gt;   String ^systemstring = gcnew String(orig);&lt;br /&gt;   systemstring += " (System::String)";&lt;br /&gt;   Console::WriteLine("{0}", systemstring);&lt;br /&gt;   delete systemstring;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3 class="subHeading"&gt;Output&lt;/h3&gt;&lt;div class="subSection"&gt; &lt;pre&gt;Hello, World! (CString)&lt;br /&gt;Hello, World! (char *)&lt;br /&gt;Hello, World! (wchar_t *)&lt;br /&gt;Hello, World! (_bstr_t)&lt;br /&gt;Hello, World! (CComBSTR)&lt;br /&gt;Hello, World! (basic_string)&lt;br /&gt;Hello, World! (System::String)&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Converting from basic_string&lt;/h1&gt;&lt;div id="sectionSection10" class="seeAlsoNoToggleSection"&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Example&lt;/h1&gt;&lt;div id="sectionSection11" class="seeAlsoNoToggleSection"&gt;  &lt;div class="subSection"&gt; &lt;p&gt;This example demonstrates how to convert from a &lt;b&gt;basic_string&lt;/b&gt; to the other string types listed above.&lt;/p&gt; &lt;/div&gt; &lt;div class="subSection"&gt; &lt;div class="code" id="ctl00_LibFrame_ctl17_other"&gt;&lt;pre class="code" id="ctl00_LibFrame_ctl17other" space="preserve"&gt;// convert_from_basic_string.cpp&lt;br /&gt;// compile with: /clr /link comsuppw.lib&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;&lt;br /&gt;#include "atlbase.h"&lt;br /&gt;#include "atlstr.h"&lt;br /&gt;#include "comutil.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;using namespace System;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   string orig("Hello, World!");&lt;br /&gt;   cout &lt;&lt; orig &lt;&lt; " (basic_string)" &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a char*&lt;br /&gt;   const size_t newsize = 100;&lt;br /&gt;   char nstring[newsize];&lt;br /&gt;   strcpy_s(nstring, orig.c_str());&lt;br /&gt;   strcat_s(nstring, " (char *)");&lt;br /&gt;   cout &lt;&lt; nstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a wchar_t*&lt;br /&gt;   // You must first convert to a char * for this to work.&lt;br /&gt;   size_t origsize = strlen(orig.c_str()) + 1;&lt;br /&gt;   size_t convertedChars = 0;&lt;br /&gt;   wchar_t wcstring[newsize];&lt;br /&gt;   mbstowcs_s(&amp;convertedChars, wcstring, origsize, orig.c_str(), _TRUNCATE);&lt;br /&gt;   wcscat_s(wcstring, L" (wchar_t *)");&lt;br /&gt;   wcout &lt;&lt; wcstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a _bstr_t&lt;br /&gt;   _bstr_t bstrt(orig.c_str());&lt;br /&gt;   bstrt += " (_bstr_t)";&lt;br /&gt;   cout &lt;&lt; bstrt &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a CComBSTR&lt;br /&gt;   CComBSTR ccombstr(orig.c_str());&lt;br /&gt;   if (ccombstr.Append(L" (CComBSTR)") == S_OK)&lt;br /&gt;   {&lt;br /&gt;       CW2A printstr(ccombstr);&lt;br /&gt;       cout &lt;&lt; printstr &lt;&lt; endl;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Convert to a CString&lt;br /&gt;   CString cstring(orig.c_str());&lt;br /&gt;   cstring += " (CString)";&lt;br /&gt;   cout &lt;&lt; cstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a System::String&lt;br /&gt;   String ^systemstring = gcnew String(orig.c_str());&lt;br /&gt;   systemstring += " (System::String)";&lt;br /&gt;   Console::WriteLine("{0}", systemstring);&lt;br /&gt;   delete systemstring;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3 class="subHeading"&gt;Output&lt;/h3&gt;&lt;div class="subSection"&gt; &lt;pre&gt;Hello, World! (basic_string)&lt;br /&gt;Hello, World! (char *)&lt;br /&gt;Hello, World! (wchar_t *)&lt;br /&gt;Hello, World! (_bstr_t)&lt;br /&gt;Hello, World! (CComBSTR)&lt;br /&gt;Hello, World! (CString)&lt;br /&gt;Hello, World! (System::String)&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Converting from System::String&lt;/h1&gt;&lt;div id="sectionSection12" class="seeAlsoNoToggleSection"&gt; &lt;/div&gt;&lt;h1 class="heading"&gt;Example&lt;/h1&gt;&lt;div id="sectionSection13" class="seeAlsoNoToggleSection"&gt;  &lt;div class="subSection"&gt; &lt;p&gt;This example demonstrates how to convert from a &lt;b&gt;System.String&lt;/b&gt; to the other string types listed above.&lt;/p&gt; &lt;/div&gt; &lt;div class="subSection"&gt; &lt;div class="code" id="ctl00_LibFrame_ctl18_other"&gt;&lt;pre class="code" id="ctl00_LibFrame_ctl18other" space="preserve"&gt;// convert_from_system_string.cpp&lt;br /&gt;// compile with: /clr /link comsuppw.lib&lt;br /&gt;&lt;br /&gt;#include &lt;iostream&gt;&lt;br /&gt;#include &lt;stdlib.h&gt;&lt;br /&gt;#include &lt;string&gt;&lt;br /&gt;&lt;br /&gt;#include "atlbase.h"&lt;br /&gt;#include "atlstr.h"&lt;br /&gt;#include "comutil.h"&lt;br /&gt;#include "vcclr.h"&lt;br /&gt;&lt;br /&gt;using namespace std;&lt;br /&gt;using namespace System;&lt;br /&gt;using namespace System::Runtime::InteropServices;&lt;br /&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;   String ^orig = gcnew String("Hello, World!");&lt;br /&gt;   Console::WriteLine("{0} (System::String)", orig);&lt;br /&gt;&lt;br /&gt;   pin_ptr&lt;const&gt; wch = PtrToStringChars(orig);&lt;br /&gt;&lt;br /&gt;   // Convert to a char*&lt;br /&gt;   size_t origsize = wcslen(wch) + 1;&lt;br /&gt;   const size_t newsize = 100;&lt;br /&gt;   size_t convertedChars = 0;&lt;br /&gt;   char nstring[newsize];&lt;br /&gt;   wcstombs_s(&amp;convertedChars, nstring, origsize, wch, _TRUNCATE);&lt;br /&gt;   strcat_s(nstring, " (char *)");&lt;br /&gt;   cout &lt;&lt; nstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a wchar_t*&lt;br /&gt;   wchar_t wcstring[newsize];&lt;br /&gt;   wcscpy_s(wcstring, wch);&lt;br /&gt;   wcscat_s(wcstring, L" (wchar_t *)");&lt;br /&gt;   wcout &lt;&lt; wcstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a _bstr_t&lt;br /&gt;   _bstr_t bstrt(wch);&lt;br /&gt;   bstrt += " (_bstr_t)";&lt;br /&gt;   cout &lt;&lt; bstrt &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a CComBSTR&lt;br /&gt;   CComBSTR ccombstr(wch);&lt;br /&gt;   if (ccombstr.Append(L" (CComBSTR)") == S_OK)&lt;br /&gt;   {&lt;br /&gt;       CW2A printstr(ccombstr);&lt;br /&gt;       cout &lt;&lt; printstr &lt;&lt; endl;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   // Convert to a CString&lt;br /&gt;   CString cstring(wch);&lt;br /&gt;   cstring += " (CString)";&lt;br /&gt;   cout &lt;&lt; cstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   // Convert to a basic_string&lt;br /&gt;   wstring basicstring(wch);&lt;br /&gt;   basicstring += L" (basic_string)";&lt;br /&gt;   wcout &lt;&lt; basicstring &lt;&lt; endl;&lt;br /&gt;&lt;br /&gt;   delete orig;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3 class="subHeading"&gt;Output&lt;/h3&gt;&lt;div class="subSection"&gt; &lt;pre&gt;Hello, World! (System::String)&lt;br /&gt;Hello, World! (char *)&lt;br /&gt;Hello, World! (wchar_t *)&lt;br /&gt;Hello, World! (_bstr_t)&lt;br /&gt;Hello, World! (CComBSTR)&lt;br /&gt;Hello, World! (CString)&lt;br /&gt;Hello, World! (basic_string)&lt;/pre&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-6004588719315128940?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/6004588719315128940/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=6004588719315128940' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/6004588719315128940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/6004588719315128940'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/05/how-to-convert-between-various-string.html' title='How to: Convert Between Various String Types'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-5390057495457321890</id><published>2007-05-06T19:15:00.000-07:00</published><updated>2007-05-06T19:16:38.816-07:00</updated><title type='text'>Computer Vision Software</title><content type='html'>&lt;p&gt; The Software is grouped into the following categories &lt;a href="http://peipa.essex.ac.uk/info/software.html#3d"&gt;3D&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#contours"&gt;contours&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#display"&gt;display tools&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#features"&gt;features&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#ocr"&gt;ocr&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#maths"&gt;mathematical toolkits&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#patrec"&gt;pattern recognition&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#stereo"&gt;stereo&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#datagen"&gt;synthetic data generators&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#texture"&gt;texture&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#toolkits"&gt;toolkits&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#tracking"&gt;tracking&lt;/a&gt;, &lt;a href="http://peipa.essex.ac.uk/info/software.html#misc"&gt;misc&lt;/a&gt;.  &lt;/p&gt;&lt;hr /&gt;  &lt;a name="3d"&gt;&lt;/a&gt; &lt;h3&gt;3D&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt; &lt;a href="http://www-graphics.stanford.edu/software/zippack/"&gt; ZipPack Polygon Mesh Zippering&lt;/a&gt; &lt;/b&gt; Combines several range images into a polygonal mesh.  &lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;a name="contours"&gt;&lt;/a&gt; &lt;h3&gt;Contours&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt; &lt;a href="http://www.cs.wright.edu/%7Eagoshtas/skinseg.html"&gt; Segmentation of Skin-Cancer Images&lt;/a&gt; &lt;/b&gt; Implementation of an algorithm for segmenting images of skin cancer and other pigmented lesions (see Image and Vision Computing, January 1999, pp.  65-74).&lt;br /&gt;An automatic method for segmention of images of skin cancer and other pigmented lesions is implemented. This method first reduces a color image into an intensity image and approximately segments the image by intensity thresholding. Then, it refines the segmentation using image edges. Double thresholding is used to focus on an image area where a lesion boundary potentially exists. Image edges are then used to localize the boundary in that area. A closed elastic curve is fitted to the initial boundary and is locally shrunk or expanded to approximate edges in its neighborhood in the area of focus. Segmentation results from twenty randomly selected images show an average error that is about the same as that obtained by four experts manually segmenting the images.   &lt;i&gt; (by &lt;a href="http://www.cs.wright.edu/%7Eagoshtas/lab.html"&gt; L. Xu, M. Jackowski, A. Goshtasby, C. Yu, D. Roseman, S. Bines, A. Dhawan, A. Huntley&lt;/a&gt; / &lt;a href="http://www.cs.wright.edu/%7Eagoshtas/lab.html"&gt; Intelligent Systems Laboratory&lt;/a&gt; / &lt;a href="http://www.wright.edu/"&gt; Wright State University&lt;/a&gt;) &lt;/i&gt;   &lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt; &lt;a name="display"&gt;&lt;/a&gt; &lt;h3&gt; Display Tools &lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;b&gt; &lt;a href="http://freeimage.sourceforge.net/"&gt;The FreeImage Library at Sourceforge&lt;/a&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://mipgsun.mipg.upenn.edu/%7EVnews/"&gt; 3DViewnix&lt;/a&gt;  &lt;/b&gt;  -  Demo of a commercial package.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.fpimage.com/"&gt; FP Image&lt;/a&gt;  &lt;/b&gt;  -  View/Process Floating Point and integer images in Windows 95/98/NT. Formats include DICOM and user defined formats. Includes a image processing scripting language.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.fpimage.com/"&gt; FP Image for Windows&lt;/a&gt;  &lt;/b&gt;   -  Scientific/Medical imaging software. Formats include floating point, integer and DICOM. Built-in image processing scripting language, batch processing, 3D solid modeling.  &lt;i&gt; (&lt;a href="http://www.fpimage.com/"&gt; FP Image&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.6ixsoft.com/"&gt; FreeImage&lt;/a&gt;  &lt;/b&gt;  -  FreeImage is an Open Source project for developers who would like to support popular graphics image formats like BMP, JPEG, TIFF, PNG, RAS, PNM, PCX, TGA in their C++ applications for Windows.  &lt;i&gt; (by Floris van den Berg, Hervé Drolon) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.boutell.com/gd/"&gt; GD - a graphics library for GIF creation&lt;/a&gt;  &lt;/b&gt;   -  provides GIF read/write code in a C library. It also provides minimal image manipulation functions (lines, arcs, text, colors).  Includes versions for Unix and Windows systems. &lt;i&gt; (by &lt;a href="http://www.boutell.com/whom.html"&gt; Thomas Boutell&lt;/a&gt; / &lt;a href="http://www.boutell.com/"&gt; Boutell.Com&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.wisc.edu/%7Eghost/index.html"&gt; Ghostscript and ghostview&lt;/a&gt;  &lt;/b&gt;  -  PostScript previewer and pretty user interface for X11. &lt;br /&gt;  &lt;a href="ftp://prep.ai.mit.edu/pub/gnu/ghostscript-2.6.1msdos.tar.gz"&gt; MSDOS Ghostscript&lt;/a&gt; and supplemental &lt;a href="ftp://prep.ai.mit.edu/pub/gnu/ghostscript-fonts-2.6.1.tar.gz"&gt; font files&lt;/a&gt; are also available.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.xcf.berkeley.edu/%7Egimp/gimp.html"&gt; GNU Image Manipulation Program (GIMP)&lt;/a&gt;  &lt;/b&gt;  -  Photoshop-style image editor.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.wizards.dupont.com/cristy/ImageMagick.html"&gt; ImageMagick&lt;/a&gt;  &lt;/b&gt;   -  Load, display, process, save, and convert images in many formats.  Works on Unix, Linux, Windows, and Mac. Includes a display program, a converter, screen capture, animator, and more.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.riograndesoftware.com/"&gt; Imaging Primer&lt;/a&gt;  &lt;/b&gt;  -  Interactive and comprehensive images analysis and processing software for windows95 (commercial product). &lt;i&gt; (by Pepi Cima / &lt;a href="http://www.riograndesoftware.com/"&gt; Rio Grande Software&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://ftp.uu.net/graphics/jpeg"&gt; JPEG&lt;/a&gt;  &lt;/b&gt;  -  Library source code and simple display tools.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ssec.wisc.edu/%7Ebrianp/Mesa.html"&gt; Mesa&lt;/a&gt;  &lt;/b&gt;  -  OpenGL implementation.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://s2k-ftp.cs.berkeley.edu/pub/multimedia/mpeg"&gt; MPEG-1 player and encoder&lt;/a&gt;  &lt;/b&gt;&lt;br /&gt;  Also: &lt;a href="http://www.crs4.it/%7Eluigi/MPEG/mpegfaq.html"&gt;FAQ&lt;/a&gt; and fancy &lt;a href="http://www.geom.umn.edu/docs/mpeg_play/mpeg_play.html"&gt; VCR-like interface&lt;/a&gt; using Motif.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://rsb.info.nih.gov/nih-image/"&gt; NIH Image&lt;/a&gt;  &lt;/b&gt;  -  for Macintosh    &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://ftp.sgi.com/graphics/tiff"&gt; TIFF&lt;/a&gt;  &lt;/b&gt;  -  Library source code and tools   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://everest.radiology.uiowa.edu/DPI/nlm/vida/vidahome.html"&gt; Volumetric Image Display and Analysis (VIDA)&lt;/a&gt;  &lt;/b&gt;  -  Demo of a commercial package.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://smurfland.cit.buffalo.edu/xanim/home.html"&gt; XAnim&lt;/a&gt;  &lt;/b&gt;  -  X11 display tool.&lt;br /&gt;  Supports many animation and image formats ("everything" except mpeg).  &lt;a href="http://graffiti.u-bordeaux.fr/MAPBX/roussel/fra/xanim.html"&gt;Notes &lt;/a&gt; on integrating xanim with Web clients/MIME are also available.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://ftp.crl.research.digital.com/pub/X11/contrib/applications/xli.README"&gt; XLI&lt;/a&gt;  &lt;/b&gt;  -  X11 display tool.&lt;br /&gt;  Not as featureful as &lt;em&gt;xv&lt;/em&gt; but it understands nearly all the same formats and displays images much more quickly.  &lt;a href="ftp://ftp.crl.research.digital.com/pub/X11/contrib/applications/xli.1.16.tar.gz"&gt;Source archive&lt;/a&gt; is available.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://ftp.cis.upenn.edu/pub/xv"&gt; XV&lt;/a&gt;  &lt;/b&gt;  -  X11 Image Display tool.&lt;br /&gt;  Provides an amazing assortment of image operators, reads and writes images in many different formats.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.thp.uni-duisburg.de/Ygl/ReadMe.html"&gt; Ygl&lt;/a&gt;  &lt;/b&gt;  -  Emulation of SGI GL library for X11.   &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt; &lt;hr /&gt;   &lt;b&gt;&lt;a name="features"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;Features&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.neci.nj.nec.com/homepages/dwj/convex-grouping.html"&gt; Convex grouping algorithm&lt;/a&gt; &lt;/b&gt; Robustly locates salient convex collections of line segments in an image.  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.cf.ac.uk/User/Paul.Rosin/resources/curves/"&gt; Edge list approximation code&lt;/a&gt; &lt;/b&gt; From &lt;em&gt;Nonparametric segmentation of curves into various representations&lt;/em&gt;, PAMI 1995 pp 1140-1153. by Paul Rosin and Geoff West.  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt;&lt;a href="http://iacl.ece.jhu.edu/projects/gvf"&gt; Gradient Vector Flow Active Contour&lt;/a&gt; &lt;/b&gt; The purpose of GVF active contour is to extract parameterized contour description from images. Matlab implementation is available for both UNIX and Windows.  &lt;i&gt; (by &lt;a href="http://iacl.ece.jhu.edu/%7Echenyang"&gt; Chenyang Xu and Jerry L. Prince&lt;/a&gt; / &lt;a href="http://iacl.ece.jhu.edu/"&gt; Image Analysis and Communications Laboratory&lt;/a&gt; / &lt;a href="http://www.jhu.edu/"&gt; Johns Hopkins University&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.wisc.edu/computer-vision/projects/gsnake.html"&gt; GSnake&lt;/a&gt; &lt;/b&gt; Contour modeling, extraction, detection, and classification.  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ai.sri.com/%7Eleei/loglin.html"&gt; Logical/Linear Operators&lt;/a&gt; &lt;/b&gt;  &lt;i&gt; (by &lt;a href="http://www.ai.sri.com/%7Eleei/"&gt; Lee Iverson&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cmla.ens-cachan.fr/Cmla/Megawave"&gt; MegaWave&lt;/a&gt; &lt;/b&gt; Wavelet, Snake and Segmentation source code.  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.dca.fee.unicamp.br/projects/khoros/"&gt; MMach&lt;/a&gt; &lt;/b&gt; A Mathematical Morphology Toolbox for the Khoros System  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.research.microsoft.com/users/jckrumm/SavGol/SavGol.htm"&gt; Savitzky-Golay Filters for 2D Images&lt;/a&gt; &lt;/b&gt; - This web page describes the derivation of the Savitzky-Golay filters for 2D images, gives MatLab routines for computing the filters, and gives C files with the filter coefficients.  &lt;i&gt; (by &lt;a href="http://www.research.microsoft.com/users/jckrumm/index.htm"&gt; John Krumm&lt;/a&gt; / &lt;a href="http://research.microsoft.com/vision/"&gt; Vision Technology Research Group&lt;/a&gt; / &lt;a href="http://research.microsoft.com/"&gt; Microsoft Research&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.fmrib.ox.ac.uk/%7Esteve/susan/index.html"&gt; SUSAN&lt;/a&gt; &lt;/b&gt; Low-level image processing.&lt;br /&gt;SUSAN is an acronym for Smallest Univalue Segment Assimilating Nucleus.  The SUSAN algorithms cover image noise filtering, edge finding and corner finding.   &lt;i&gt; (by Steve Smith / &lt;a href="http://www.comlab.ox.ac.uk/archive/ox.html"&gt; Oxford University&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="ocr"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;OCR&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.nist.gov/itl/div894/894.03/databases/defs/nist_ocr.html"&gt; NIST Handwriting OCR Testbed&lt;/a&gt; &lt;/b&gt; OCR software and datasets for UNIX systems.  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://vis.dm.unibo.it/sizefcts/files/SketchUp/SketchUp.2.0/sketchup.tar"&gt; SketchUp (ftp download)&lt;/a&gt; &lt;/b&gt; A demo package for recognizing hand-drawn sketches through &lt;a href="http://vis.dm.unibo.it/sizefcts/sf.htm"&gt; Size Functions&lt;/a&gt;. &lt;i&gt; (&lt;a href="http://vis.dm.unibo.it/"&gt; Vision Mathematics group&lt;/a&gt; / University of Bologna) &lt;/i&gt;   &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="maths"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt; Mathematical Toolkits &lt;/b&gt;&lt;/h3&gt; &lt;b&gt; &lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.uu.nl/CGAL/"&gt; CGAL - Computational Geometry Algorithms Library&lt;/a&gt;  &lt;/b&gt;  -  C++ library of geometric primitives and standard data structures and algorithms used in computational geometry. &lt;br /&gt;   The CGAL project is a collaborative effort to develop a robust, easy to use, and efficient C++ software library of geometric data structures and algorithms. The CGAL library contains: - Basic geometric primitives such as points, vectors, lines, predicates such as for relative positions of points, and operations such as intersections and distance calculation. - A collection of standard data structures and geometric algorithms, such as convex hull, (Delaunay) triangulation, planar map, polyhedron, smallest enclosing sphere, and multidimensional query structures. - Interfaces to other packages, e.g. for visualisation, and I/O, and other support facilities. For further information and for downloading the library and documentation, please visit the CGAL web page: http://www.cs.uu.nl/CGAL/ Should you have any questions or comments, please send a message to cgal@cs.uu.nl  &lt;i&gt; (&lt;a href="http://www.cs.uu.nl/CGAL/"&gt; CGAL Consortium&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://netlib2.cs.utk.edu/"&gt; Netlib&lt;/a&gt;  &lt;/b&gt;  -  Public domain collection of mathematical software, papers, and databases.&lt;br /&gt;  Mostly in Fortran, but f2c (included in netlib) converts Fortran to C.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.nr.com/public-domain.html"&gt; Numerical Recipies&lt;/a&gt;  &lt;/b&gt;  -  Public Domain code for the famous book (only some of the code is public domain).   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ams.sunysb.edu/%7Epiyush/reviver"&gt; Reviver - A Practical Provable Surface Reconstructor&lt;/a&gt;  &lt;/b&gt;   -  Free software that takes unorganised point clouds as input and produces 3D models automatically in various industry standard formats (runs on Unix and Windows)   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://lib.stat.cmu.edu/"&gt; StatLib&lt;/a&gt;  &lt;/b&gt;  -  Statistical software, datasets, and information.   &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="patrec"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;Pattern Recognition&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt;&lt;a href="http://www.imm.dtu.dk/%7Eaam/"&gt;Active Appearance Models - Extensions and Case &lt;/a&gt;&lt;/b&gt; home site for the the AAM-API which is a free C++ implementation of the Active Appearance Model method. Several results and models are also given. &lt;i&gt; (&lt;a href="http://www.imm.dtu.dk/image/indexfr.html"&gt; Section for Image Analysis &lt;/a&gt; / &lt;a href="http://www.dtu.dk/"&gt; The Technical University of Denmark&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cfar.umd.edu/%7Ekanungo/software/software.html"&gt; Hidden Markov Model routines&lt;/a&gt; &lt;/b&gt; Implementation of Forward, Backward, Viterbi and Baum-Welch algorithms.  The code follows Rabiner and Juang notation.  Written in C.  &lt;i&gt; (by &lt;a href="http://www.cfar.umd.edu/%7Ekanungo/"&gt; Tapas Kanungo&lt;/a&gt; / &lt;a href="http://www.cfar.umd.edu/"&gt; Center for Automation Research&lt;/a&gt; / &lt;a href="http://www.umd.edu/"&gt; University of Maryland, College Park&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://marathon.csee.usf.edu/%7Esarkar/PO_software.html"&gt; Perceptual Organization Software&lt;/a&gt; &lt;/b&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.inf.ufes.br/%7Ethomas/home/tooldiag.html"&gt; ToolDiag&lt;/a&gt; &lt;/b&gt; Pattern recognition of multivariate numerical data.   &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="stereo"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;Stereo&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www-2.cs.cmu.edu/afs/cs.cmu.edu/user/rgw/www/TsaiCode.html"&gt; Camera Calibration&lt;/a&gt; &lt;/b&gt; Routines for calibrating using Roger Tsai's perspective projection camera model. &lt;i&gt; (by &lt;a href="http://www-2.cs.cmu.edu/afs/cs/usr/rgw/www/HomePage.html"&gt; Reg Willson&lt;/a&gt; / CMU) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://sourceforge.net/projects/daoi/"&gt; Disparity Analysis of Images&lt;/a&gt; &lt;/b&gt; This java-based application estimates the disparity between two images.  It works by first detecting remarkable points in both images and then finding the best possible match between the two sets of points.  &lt;i&gt; (by Lionel Le Briquer) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www2.iro.umontreal.ca/%7Eroys/publi/iccv98/code.html"&gt; Maximum-Flow Stereo Algorithm&lt;/a&gt; &lt;/b&gt; Code for the maximum-flow formulation of the N camera stereo correspondence problem.  &lt;i&gt; (by Sebastien Roy / Université de Montréal) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://research.microsoft.com/%7Ezhang/Calib"&gt; Microsoft Easy Camera Calibration Tool&lt;/a&gt; &lt;/b&gt; a flexible camera calibration technique, which only requires the camera to observe a planar pattern shown at a few (at least two) different (unknown) orientations.  &lt;i&gt; (by &lt;a href="http://research.microsoft.com/%7Ezhang"&gt; Zhengyou Zhang&lt;/a&gt; / &lt;a href="http://research.microsoft.com/vision"&gt; Vision Technology Group&lt;/a&gt; / &lt;a href="http://www.microsoft.com/"&gt; Microsoft Corp.&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cv.iit.nrc.ca/research/PVT.html"&gt; Projective Vision Toolkit &lt;/a&gt; &lt;/b&gt; PVT is a series of utilities that allows one to take an image sequence and compute the fundamental matrix and trilinear tensor. &lt;br /&gt;This can be used for such problems as camera self-calibration, structure from motion, camera motion annotation, image stabilization, 3D tracking and recognition, etc. &lt;i&gt;(Computational Video Group of NRC)&lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ai.sri.com/%7Ekonolige/svs/"&gt; SRI Stereo Engine Software&lt;/a&gt; &lt;/b&gt; - fast stereo software for PCs.  It performs disparity calculations and filtering in real time on images up to 320x240 in size.  &lt;i&gt; (&lt;a href="http://www.ai.sri.com/"&gt; SRI Artificial Intelligence Center&lt;/a&gt; / &lt;a href="http://www.sri.com/"&gt; SRI International&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://hplbwww.hpl.hp.com/people/mp/research/stersvd.htm"&gt; Uncalibrated Stereo by Singular Value Decomposition&lt;/a&gt; &lt;/b&gt; This stereo algorithm allows to match features across a pair of stereo images with unparalleled algorithmic simplicity and neatness. Results are comparable to complex relaxation methods. Its simple implementation has made it a good off-the-shelf solution for a number of researchers needing a fast a easy-to-integrate matching module. &lt;i&gt; (by &lt;a href="http://hplbwww.hpl.hp.com/people/mp/index.htm"&gt; Maurizio Pilu&lt;/a&gt; / Hewlett Packard Research Laboratories) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="datagen"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt; Synthetic Data Generators &lt;/b&gt;&lt;/h3&gt; &lt;b&gt; &lt;/b&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.katview.com/index.html.en"&gt; MESHBASE Intelligent 3D modeling program for Windows&lt;/a&gt;  &lt;/b&gt;   -  An intelligent 3D modeling program for Windows platform. It provides true WYSIWYG and WYDSIWYDG easy editing environment. (30 day trial) &lt;i&gt; (by Sean Kung / Modelsoft, Inc.) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.povray.org/"&gt; Persistence of Vision&lt;/a&gt;  &lt;/b&gt;  -  Ray Tracer.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://research.microsoft.com/%7Ephiltorr/"&gt; Philip Torr's stereo vision code&lt;/a&gt;  &lt;/b&gt;  -  routines to generate synthetic data for testing and evaluating fundamental matrix estimation algorithms &lt;i&gt; (by &lt;a href="http://research.microsoft.com/%7Ephiltorr/"&gt; Philip Torr&lt;/a&gt; / &lt;a href="http://www.research.microsoft.com/research/mlp/"&gt; Machine Learning and Perception Group&lt;/a&gt; / &lt;a href="http://www.microsoft.com/"&gt; Microsoft&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://radsite.lbl.gov/radiance/HOME.html"&gt; Radiance&lt;/a&gt;  &lt;/b&gt;  -  Ray tracer&lt;br /&gt;  Produces floating point photometrically accurate images, with emphasis on good light source modeling.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://avalon.chinalake.navy.mil/pub/utils/xpgs/"&gt; Random dot stereogram generator&lt;/a&gt;  &lt;/b&gt;  -  For X11.&lt;br /&gt;  Includes support for animations and user-defined objects.  &lt;a href="http://www.eleves.ens.fr:8080/home/massimin/sis/sis.ang.html"&gt;More stereograms&lt;/a&gt; are also available.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://ftp-graphics.stanford.edu/pub/Graphics/RTNews/html/rtnv6n3.html#art4"&gt; Ray Tracers &lt;/a&gt;  &lt;/b&gt;  -  A nice summary of free ray tracers. &lt;i&gt; (by Eric Haines) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www-graphics.stanford.edu/%7Ecek/rayshade/rayshade.html"&gt; Rayshade&lt;/a&gt; &lt;/b&gt; - Ray tracing renderer.&lt;br /&gt;Generates realistic 2D images from a text description of a 3D world.  Supports texture mapping, surface ("heightfield") rendering, multiple light sources, defocus, animation and more. &lt;a href="ftp://vacation.venari.cs.cmu.edu/usr0/anon/zbuf.tar"&gt; Range image output&lt;/a&gt; extension and &lt;a href="ftp://vacation.venari.cs.cmu.edu/usr0/anon/zbuf-doc.tar"&gt; documentation&lt;/a&gt; are also available.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://bias.csr.unibo.it/research/biolab/bio_tree.html"&gt; Synthetic Fingerprint Generator&lt;/a&gt;  &lt;/b&gt;  -  SFinGe is a novel method for the generation of synthetic fingerprint images ("sfinge" is the Italian for "sphinx").&lt;br /&gt;   Gabor-like space-variant filters are used for iteratively expanding an initially empty image containing just one or a few seeds. A directional image model, whose inputs are the number and location of the fingerprint cores and deltas, is used for tuning the filters. Very-realistic fingerprint images are obtained after the final noising-and-rendering stage.  &lt;i&gt; (&lt;a href="http://bias.csr.unibo.it/research/biolab"&gt; Biometric Systems Lab&lt;/a&gt; / University of Bologna) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;b&gt;&lt;a name="texture"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;Texture&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cssip.uq.edu.au/staff/meastex/meastex.html"&gt; MeasTex&lt;/a&gt; &lt;/b&gt; A framework for quantitative measurement of image texture classification algorithms.   &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="toolkits"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;Toolkits&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt;&lt;a href="http://gandalf-library.sourceforge.net/"&gt; Gandalf &lt;/a&gt; &lt;/b&gt; Gandalf is a computer vision and numerical algorithm library, written in C, which allows you to develop new applications that will be portable and run FAST.  Includes many useful vision routines, including camera calibration, homographies, fundamental matrix computation, and feature detectors (includes source code).&lt;br /&gt;Dynamically reconfigurable vector, matrix and image structures in Gandalf allow efficient use of memory. Gandalf has been used to develop the "MoKey" motion editing software, released at IBC'2001 in Amsterdam. MoKey performs automatic inpainting of moving objects over an image sequence, and can also be used to compute an accurate alpha matte or outline of an object. Gandalf currently contains four packages: 1) Common package of simple structures and routines used by the other packages, such as memory allocation, linked lists and error handling; 2) Linear algebra package with a large number of routines for matrix and vector manipulations; 3) Image package defining a general purpose image structure and low-level image manipulation routines; 4) Vision package containing a number of standard image processing, computer vision and numerical routines. The major design features of Gandalf are: (i) Efficient use of memory through dynamically reconfigurable structures; (ii) Emphasis on support of numerical algorithms, especially optimisation; (iii) A very flexible and efficient internal image representation, (iv) A comprehensive set of matrix/vector operations, incorporating implicit matrix transpose &amp; inverse, and in-place computation where appropriate; Exploitation of the computational and compilation speed advantages of C over C++ in reducing the number of layers of abstraction over the raw data, an approach we believe is appropriate for simple objects such as matrices, vectors and images. The documentation for Gandalf comes in two parts. There is a LaTex tutorial with examples available also in HTML (via Latex2html). Reference documentation for Gandalf has also been generated using ObjectOutline, &lt;i&gt; (&lt;a href="http://www.cs.berkeley.edu/%7Epm/"&gt; by Philip McLauchlan&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.intel.com/research/mrl/research/opencv/"&gt; Intel Open Source Computer Vision Library&lt;/a&gt; &lt;/b&gt; Computer vision routines, applications and tutorials. Open Source, FREE for academic AND commercial use. Assembly language optimized on Intel's processor line. Areas covered are Geometric Methods, Recognition, Image Pyramids Camera Calibration, Tracking, and Fitting.   &lt;i&gt; (by Vadim Pisarevsky, Dmitry Abrosimov , Jean-Yves Bouguet , Gary R. Bradski , Valery Cherepennikov , Michael Chu , Boris Chudinovich , Prof. Trevor , Bob Davies , Prof. James Davis , Victor Eroukhimov , Prof. Irfan Essa , Radek Grzeszczuk , Mark Holler , Prof. Jitendra Malik , Sergey Molinov , Valery Mosyagin , Ara Nefian , Sergey Oblomov , Prof. Pietro Perona , Vadim Pisarevsky, Alexander Pleskov, Chuck Richards, Prof. Stan Scarloff, Stewart Taylor, Prof.  Carlo Tomasi / Visual Interactivity Lab / Intel Corporation) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cpsc.ucalgary.ca/Redirect/vision/soft.htm"&gt; University of Calgary vision software&lt;/a&gt; &lt;/b&gt; Includes chain code, Hough transform, and others.  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://vxl.sourceforge.net/"&gt; VXL - C++ libraries for Computer Vision&lt;/a&gt; &lt;/b&gt; The Vision-something-Libraries are a collection of C++ libraries designed for computer vision research. It was created from TargetJr and the Image Understanding Environment (IUE) with the aim of making a lighter, faster and more consistent system. VXL is written in ANSI/ISO C++ and is designed to be portable over many platforms. It is developed and used by a consortium including groups from the Universities of Leuven, Oxford, Manchester, and RPI, GE CRD.  &lt;i&gt; (&lt;a href="http://vxl.sourceforge.net/"&gt; VXL Consortium&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.boulderimaging.com/AcquireNow.htm"&gt; AcquireNow&lt;/a&gt;  &lt;/b&gt;  -  A real-time image acquisition and processing product. (Commercial product $$).  &lt;br /&gt;   The product includes a COM (Component Object Model) component, which allows developers to create powerful imaging applications quickly and easily using COM supported languages such as C++ and Visual Basic. The AcquireNow package include the AcquireNowClient application. AcquireNowClient is a stand-alone application, which can be used to acquire, display, and save images to disk. The AcquireNowClient application also allows the user to perform real time image averaging, scaling and flat fielding. Source code for the AcquireNowClient application is included, and can be used by customers as a base for their own imaging applications.  &lt;i&gt; (&lt;a href="http://www.boulderimaging.com/index.html"&gt; Boulder Imaging, Inc.&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.theimagingsource.com/prod/link/adoculos.htm"&gt; AdOculos&lt;/a&gt;  &lt;/b&gt;  -  PC-based image processing without the need of extensive programming knowledge&lt;br /&gt;   The following image processing functions are realized as DLLs. The complete C source code of these DLLs is part of the standard pack. Point, local and global, morphological operations Texture, image sequence Histograms procedures Hough and color transformations Automatic counting and interactive measuring Pattern recognition, graylevel profile General purpose and display functions  &lt;i&gt; (&lt;a href="http://www.theimagingsource.com/"&gt; The Imaging Source&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.aai.com/"&gt; Aphelion&lt;/a&gt;  &lt;/b&gt;  -  Commercial image processing and understanding package for Windows.  Features a rapid prototyping environment, image processing and object recognition libraries, and a vision tutorial. &lt;br /&gt;   Aphelion is a commercial software product which can be used to quickly develop vertical imaging applications. It is a comprehensive and powerful development environment and a delivery vehicle for image-based applications, including a Graphical User Interface, Image Processing libraries available as DLLs or ActiveX components, a Visual Basic compatible scripting language, a chart server, etc. Aphelion provides the very latest developments in mathematical morphology and symbolic representation/recognition, as well as effective tools for quantitative analysis, microscopy, pattern recognition, and classification.  &lt;i&gt; (by Bruno Lay / &lt;a href="http://www.aai.com/"&gt; Amerinex Applied Imaging Inc.&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://homepages.go.com/%7Emartweb/AutoTrace.htm"&gt; AutoTrace&lt;/a&gt;  &lt;/b&gt;  -  AutoTrace converts bitmap to vector graphics &lt;i&gt; (by Martin Weber) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://bersoft.com/bimagem/index.htm"&gt; Bersoft Image Measurement&lt;/a&gt;  &lt;/b&gt;  -  Measure length, angle, segments, perimeter and area in digital images.  Commercial package for windows.&lt;br /&gt;   Bersoft Image Measurement runs under Windows 9.x/NT and it is intended to measure length, angle, segments, perimeter and area in digital images. It can be used in multiple scientific disciplines, such as Biology, Ecology, Geography, Agronomy, and Natural Sciences. It also can export matrixes (Exporting RGB values) with the decimal or hexadecimal values of the image pixels. The DEMO version can realize all the functions, but only over images saved in a propietary format: Image Bersoft Bitmap (bim extension). &lt;i&gt; (&lt;a href="http://bersoft.com/index.htm"&gt; Bersoft&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.clemex.com/"&gt; Clemex Vision&lt;/a&gt;  &lt;/b&gt;  -  Commercial software for analysis of images from microscopes.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://ipml.ee.duth.gr/%7Epapamark/"&gt; Color Reduction and Multithresholding &lt;/a&gt;  &lt;/b&gt;  -  Free image processing software for color reduction and quantization, multithresholding, Hough Transform etc. &lt;i&gt; (Image and Multimedia Laboratory / Democritus University of Thrace, Greece) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://en.commonvisionblox.de/"&gt; Common Vision Blox&lt;/a&gt;  &lt;/b&gt;   -  A modular and open software development platform to solve image processing and machine vision applications (Windows, Commercial product) &lt;i&gt; (&lt;a href="http://www.stemmer-imaging.de/"&gt; Stemmer Imaging GmbH&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ing.unibo.it/%7Ecverond/Pages/cvw.d/cvw.html"&gt; Computer Vision Workshop&lt;/a&gt;  &lt;/b&gt;  -  An image analysis tool based on the Vista software environment   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ph.tn.tudelft.nl/People/klamer/cppima.html"&gt; CppIma&lt;/a&gt;  &lt;/b&gt;  -  C++ image processing library.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ee.siue.edu/CVIPtools/"&gt; CVIPtools&lt;/a&gt;  &lt;/b&gt;   -  GUI-based computer vision and image processing tools, ANSI-C source code and libraries for Windows95/NT and UNIX, extended computer imaging TCL shell.&lt;br /&gt;   Also contains an extended Tcl shell with all the computer imaging functions. ANSI-C source code and libraries for image analysis, image compression, image enhancement, image restoration, and many imaging utilities. Used for both research and education, as well as applications development. &lt;i&gt; (by &lt;a href="http://www.ee.siue.edu/%7Esumbaug/"&gt; Scott E Umbaugh, Greg Hance, Arve Kjoelen, Kun Luo, Mark Zuke, Yansheng Wei and others&lt;/a&gt; / &lt;a href="http://www.ee.siue.edu/%7Ecvip/CVIPlab.html"&gt; CVIP Group&lt;/a&gt; / &lt;a href="http://www.siue.edu/"&gt; Southern Illinois University at Edwardsville&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.imm.dtu.dk/%7Ediva/"&gt; DTU Image Viewer and Analyser &lt;/a&gt;  &lt;/b&gt;   -  The DIVA consists of a number of image analysis functions collected in C++ template image classes and a windows interface, which handles a wide variety of different image file formats and pixel types. Everything is available as source code. &lt;i&gt; (Section for Image Analysis / &lt;a href="http://www.dtu.dk/"&gt; Technical University of Denmark&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.euresys.com/SoftwareTools/eVision.htm"&gt; eVision &lt;/a&gt;  &lt;/b&gt;   -  Commercial image processing and analysis toolkit for use in industrial applications on Windows platforms.  There is also a rapid prototyping development environment called EasyAccess.&lt;br /&gt;   eVision provides all familiar tools in image processing such as image linear and morphological filtering, projections, profiles, geometric transforms, color conversions, blob analysis, pattern matching as well as application libraries such as OCR, matrix code reading, mark inspection.  These tools are provided in a form well suited for rapid application development and are extremely fast.  &lt;i&gt; (&lt;a href="http://www.euresys.com/"&gt; Euresys&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.pixlock.de/"&gt; Exbem: Scientific Image Processing &amp; Analysis&lt;/a&gt;  &lt;/b&gt;   -  Exbem is a software for scientific image processing &amp;amp; analysis under MacOS. Exbem handles images, QuickTime movies, and live-video. Multiple operators can be assigned to multiple ROIs. &lt;i&gt; (&lt;a href="http://www.pixlock.de/"&gt; Pixlock e.K. (company)&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://ftp-graphics.stanford.edu/pub/Graphics/GraphicsGems/"&gt; Graphics Gems&lt;/a&gt;  &lt;/b&gt;  -  Generally useful graphics and image processing subroutines from the similarly-named books.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://pandora.cecer.army.mil/grass/GRASS.main.html"&gt; GRASS&lt;/a&gt;  &lt;/b&gt;  -  Geographic Information System   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.mvtec.com/"&gt; HALCON&lt;/a&gt;  &lt;/b&gt;  -  a commercial computer vision tool consisting of an image processing library, C and C++ interfaces, and a rapid prototyping tool called HDevelop.&lt;br /&gt;   HALCON is manufactured by MVTec, which is a spin-off of the Technische Universität München and the Bavarian Research Center for Knowledge Based Systems (FORWISS). The company is specialized in software solutions for image processing using standard hardware and framegrabbers. HALCON covers a wide field of applications like factory automation, quality control, medical image analysis, aerial image analyis, surveillance, research, and education. &lt;i&gt; (&lt;a href="http://www.mvtec.com/"&gt; MVTec Software GmbH&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cns.nyu.edu/home/msl/hipsdescr.cgi"&gt; HIPS&lt;/a&gt;  &lt;/b&gt;  -  General Unix-based Image Processing System with C source code (Commercial package $$)&lt;br /&gt;   HIPS is a software package for image processing that runs under the UNIX operating system. HIPS is modular and flexible, it provides automatic documentation of its actions, and is almost entirely independents of special equipment. It handles sequences of images (movies) in precisely the same manner as single frames. Over 200 such image transformation programs have been developed. HIPS is written in C, provided as source code, and is both a set of separate programs as well as a callable library. &lt;i&gt; (by &lt;a href="http://www.cns.nyu.edu/home/msl"&gt; Michael S. Landy&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.inventions.u-net.com/"&gt; ILIB Imaging Libraries&lt;/a&gt;  &lt;/b&gt;   -  commercial package of image processing libraries for the Windows environment (C/C++ interface). It also includes neural and genetic imaging capabilities.  &lt;i&gt; (&lt;a href="http://www.inventions.u-net.com/"&gt; Inventions&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://xray.ecn.uiowa.edu/prj/ipl/"&gt; Image Processing Library&lt;/a&gt;  &lt;/b&gt;  -  The main purpose of Image Processing Library (IPL) is to simplify image processing under Windows environment.  &lt;i&gt; (&lt;a href="http://xray.ecn.uiowa.edu/"&gt; Medical Imaging Lab&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.mip.sdu.dk/ipl98/"&gt; Image Processing Library 98&lt;/a&gt;  &lt;/b&gt;  -  A platform independent image manipulating C/C++ library&lt;br /&gt;   The purpose of the library is to be useful, for combining tailor-made image processing and interpretation with standard methods for acquisitions, processing, display and storage of image information. Emphasis is put on interactivity in projects made by students, as well as for advanced research and development.  &lt;i&gt; (by Ivar Balslev and René Dencker / The Maersk Mc-Kinney Moller Institute for Production Technology / &lt;a href="http://www.sdu.dk/"&gt; University of Southern Denmark, Odense University&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.mediacy.com/ippage.htm"&gt; Image-Pro Plus&lt;/a&gt;  &lt;/b&gt;  -  Commercial image analysis software used in biological and industrial microscopy applications.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://purl.oclc.org/brendt/software/imagelib"&gt; ImageLib&lt;/a&gt;  &lt;/b&gt;  -  An Image Processing C++ Class Library (template based)&lt;br /&gt;   ImageLib is a C++ class library providing image processing and related facilities. The main set of classes provides a variety of image and vector types, with additional modules supporting scalar and vector quantisation, wavelet transforms, DCT transforms, and simple histogram operations. &lt;i&gt; (by Brendt Wohlberg  / University of Cape Town) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.natinst.com/imaq"&gt; IMAQ Vision&lt;/a&gt;  &lt;/b&gt;  -  Adds machine vision and image processing functionality to LabVIEW and ActiveX containers &lt;i&gt; (National Instruments) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.debian.org/Packages/unstable/graphics/imgstar.html"&gt; ImgStar Image Processing Tools&lt;/a&gt;  &lt;/b&gt;  -  Complements Pbmplus with edge detection, high/low/band-pass filters, thresholding, etc. &lt;i&gt; (by Simon Winder) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://imlib3d.sourceforge.net/"&gt; ImLib3D&lt;/a&gt;  &lt;/b&gt;   -  ImLib3D is an open source C++ library for 3D (volumetric) image processing. It comes with an optional viewer that features 3D (OpenGL) multiplanar.&lt;br /&gt;   Templated: ImLib3D images are STL-like templated containers. This means you can create images of arbitrary types (examples: float, int, complex, 3D vectors for deformation fields, ...) Iterators: ImLib3D provides STL-like iterators for moving around images. This provides a much faster, more efficient and easier to use framework. This also provides a common simple syntax for moving around images in special ways, like in masked images or rectangular sub-zones in an image. Speed: ImLib3D is very fast. Iterators hide all the gory details of making it fast. Command line: All image processing operators can be called from the unix command line. This is, with the viewer, important for easy image processing experimentation. Fast BSpline interpolation (thanks to Unser et all.) Rigid, affine, deformable registration (thanks to O.Musse) Very fast fft (thanks to fftw) Image processing (arithmetic,convolution,morphological operations...) 3D image viewer.  &lt;i&gt; (by &lt;a href="http://picabia.u-strasbg.fr/lsiit/perso/bosc.htm"&gt; Marcel Bosc, Torbjorn Vik&lt;/a&gt; / &lt;a href="http://picabia.u-strasbg.fr/lsiit"&gt; LSIIT/IPB ULP Strasbourg France&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://developer.intel.com/software/products/perflib/ipl/index.htm"&gt; Intel Image Processing Library&lt;/a&gt;  &lt;/b&gt;   -  Optimized assembly MMX code for image processing, pattern recognition, signal processing, and matrix manipulation (no source - but still free) &lt;i&gt; (&lt;a href="http://developer.intel.com/design/perftool/index.htm"&gt; Performance Library Suite&lt;/a&gt; / &lt;a href="http://intel.com/"&gt; Intel Corporation&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.rsinc.com/"&gt; Interactive Data Language (IDL)&lt;/a&gt;  &lt;/b&gt;  -  IDL is a development environment for data visualization, 2D and 3D graphics, and image processing.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ualg.pt/uceh/adeec/vision/iptool/"&gt; IPTool&lt;/a&gt;  &lt;/b&gt;  -  Freeware image processing toolkit for Windows   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.khoral.com/"&gt; Khoros&lt;/a&gt;  &lt;/b&gt;  -  An integrated software environment for data exploration and visualization, visual programming and simulation, and sofware development.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.leadtools.com/"&gt; LEADTOOLS Imaging Development Toolkit &lt;/a&gt;  &lt;/b&gt;   -  commercial toolkit that supports loading, saving, converting, and processing of color, greyscale, and document images - Windows-based&lt;br /&gt;  commercial toolkit that &lt;i&gt; (&lt;a href="http://www.leadtools.com/"&gt; LEAD Technologies, Inc.&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ccs.neu.edu/home/psksvp/lg.htm"&gt; LookingGlass Real-time ImageProcessing System&lt;/a&gt;  &lt;/b&gt;  -  multithreaded PC-based image proccessing environment that supports realtime video processing.&lt;br /&gt;   LookingGlass is an Image Processing Environment for developing imaging applications and for research and development of new image system. LookingGlass supports real-time live video processing from VideoForWindow compatible device, and also supports BMP, JPG, GIF89 and AVI or user can write a dll to support other vdo format or image acquisition device. LookingGlass can produce AVI file, sequence of BMP or JPG files, or just display images to screen, or users can write a dll to do what ever output they want. LookingGlass is derived from RobotVision2(http://www.ccs.neu.edu/home/psksvp/rv2.htm), so LookingGlass uses the pipeline idea and support using the same IP-DLL as RobotVision2.  &lt;i&gt; (by PongSuvan) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cis.upenn.edu/%7Eeero/home.html#software"&gt; Matlab Pyramid Tools&lt;/a&gt;  &lt;/b&gt;  -  MatLab tools for multi-scale (pyramid) image decomposition.&lt;br /&gt;   This includes Laplacian pyramids, QMFs/wavelets, and steerable pyramids as well as fast convolution routines, histogram tools, and synthetic image generation.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.matrox.com/imaging"&gt; Matrox Imaging&lt;/a&gt;  &lt;/b&gt;   -  Matrox Imaging Library (MIL) is a development toolkit for machine vision, medical imaging and image analysis. ActiveMIL, a collection of ActiveX controls for managing image capture, transfer, processing, analysis and display is bundled with MIL. Additional software includes Matrox Inspector, an interactive Microsoft® Windows®-based prototyping tool and an intelligent camera interface utility.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://research.microsoft.com/projects/VisSDK/"&gt; Microsoft Vision SDK&lt;/a&gt;  &lt;/b&gt;  -  Visual C++ library for vision which defines an image object and supports digitizer independent image acquisition.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.dynamic-imaging.no/MTIP.html"&gt; Multi-Threaded Image Processing&lt;/a&gt;  &lt;/b&gt;   -  commercial Image Processing Environment with ISO12087 based "drag and drop" modules and a powerful API for C,C++ programming of own modules. &lt;i&gt; (&lt;a href="http://www.dynamic-imaging.no/"&gt; Dynamic Imaging AS&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.neatvision.com/"&gt; NeatVision: An Image Analysis &amp; Software Development Environment&lt;/a&gt;  &lt;/b&gt;   -  NeatVision is a Java based image analysis and software development environment. It provides high level access to a wide range of machine vision algorithms through a well defined and easy to use graphical interface. NeatVision is distributed as a shareware product.&lt;br /&gt;   NeatVision contains over 200 image and general data processing algorithms. Users can extend the core NeatVision library using the developers interface, a plug-in which features, automatic source code generation, compilation with full error feedback and dynamic algorithm updates. The Developers interface supports algorithm development based on Java AWT Imaging, Java 2D Imaging and Java Advanced Imaging. NeatVision is primarily an image processing application and offers an extensive range of image analysis and visualisation tools (these include zoom, pseudo colour, intensity scan, histogram and 3D profile mesh). In addition, the ability to read and write a wide range of image file formats is supported. &lt;i&gt; (&lt;a href="http://www.eeng.dcu.ie/%7Ewhelanp/vsg/vsghp.html"&gt; Vision Systems Laboratory&lt;/a&gt; / &lt;a href="http://www.dcu.ie/"&gt; Dublin City University&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.neurocheck.com/"&gt; NeuroCheck&lt;/a&gt;  &lt;/b&gt;  -  Commercial Windows-based image processing system for automatic presence verification, bar and DataMatrix code reading, character and pattern recognition, robot guidance and gauging.&lt;br /&gt;  NeuroCheck&lt;sup&gt;®&lt;/sup&gt; is the complete framework for configuring and operating industrial visual quality control systems. Its powerful graphical tools enable the user to easily develop solutions within a familiar Windows - based environment to achieve rapid system integration into production line processes. &lt;i&gt; (&lt;a href="http://www.ds-gmbh.com/"&gt; DS GmbH&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www-sop.inria.fr/prisme/personnel/geiger/nuages.html"&gt; Nuages&lt;/a&gt;  &lt;/b&gt;  -  A 3-D shape from contour package.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.optimas.com/"&gt; Optimas: Analytical Imaging&lt;/a&gt;  &lt;/b&gt;  -  Complete commercial image-analysis program for Windows used in biological and industrial measurement environments.&lt;br /&gt;   Optimas implements hundreds of measurement, image processing, and image management operations, all available from the graphical user interface. Optimas is designed for the imaging professional who needs the ability to prototype and quickly develop custom imaging solutions, and therefore includes an integrated development environment enabling one to record, edit, and debug macros. It is being used the world over to develop cutting-edge solutions to imaging problems. An Automation Server and Client (formerly known as "OLE Automation") Optimas also allows itself to be controlled via VB or any Automation Client, and conversely can control Excel or any Automation Server via an elegant syntax. Help is richly linked and context-sensitive. &lt;i&gt; (&lt;a href="http://www.mediacy.com/"&gt; Media Cybernetics&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://wuarchive.wustl.edu/graphics/graphics/packages/pbmplus"&gt; PBMPlus&lt;/a&gt;  &lt;/b&gt;  -  Image manipulation toolkit.&lt;br /&gt;  This is &lt;em&gt;the&lt;/em&gt; standard toolkit for Unix, it converts between dozens of formats.  A version with many more features called &lt;a href="ftp://ftp.cs.ubc.ca/ftp/archive/netpbm"&gt;NetPBM&lt;/a&gt; is also available, but may not be as easy to install.  &lt;a href="http://www.cs.cmu.edu/People/dkindred/netpbm-patches/index.html"&gt;Some NetPBM patches&lt;/a&gt; are available.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://pdl.perl.org/"&gt; Perl Data Language&lt;/a&gt;  &lt;/b&gt;   -  An extension to perl that implements fast, compact manipulation of large, N-dimensional data arrays for scientific computing and image processing.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.vysor.com/"&gt; PiXCL and geoPiXCL&lt;/a&gt;  &lt;/b&gt;   -  A commercial image processing scripting language and Win9x/NT/2000 EXE builder for TWAIN scanner and digital camera image sources.  geoPiXCL adds geographic imagery extensions.  IP and geo library APIs are available. &lt;i&gt; (by Stewart DIBBS) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ccs.neu.edu/home/psksvp/rv2.htm"&gt; RobotVision2 &lt;/a&gt;  &lt;/b&gt;  -  real-time image processing software that uses any VideoForWindow(VFW) compatible camera as the image source &lt;i&gt; (by &lt;a href="http://www.ccs.neu.edu/home/psksvp/"&gt; Pong Suvan&lt;/a&gt; / &lt;a href="http://www.ccs.neu.edu/"&gt; Northeastern University&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ccs.neu.edu/home/psksvp"&gt; RobotVisionCAD&lt;/a&gt;  &lt;/b&gt;   -  RobotVisionCAD(RvCAD) is an Image Processing Environment for developing imaging applications and for research and development of new image system. &lt;br /&gt;   RobotVisionCAD(RvCAD) is an Image Processing Environment for developing imaging applications and for research and development of new image system. RvCAD supports real-time live video processing from VideoForWindow compatible device, and also supports BMP, JPG, GIF89 and AVI or user can write a dll to support other vdo format or image acquisition device. RvCAD can also produce AVI file, sequence of BMP or JPG files, or just display images to screen, or users can write a dll to output images to whatever device they'd like. RvCAD is similar to an electonic logic gate simulation Program. Users drag and drop RvCadProcessor components from the left tree view then connect them together to build an ImageProcessing pipeline.  &lt;i&gt; (by &lt;a href="http://www.ccs.neu.edu/home/psksvp"&gt; pong suvan&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.mmorph.com/"&gt; SDC Morphology Toolbox for Matlab&lt;/a&gt;  &lt;/b&gt;   -  Matlab add-on: Gray-scale morphological tools for image segmentation, non-linear filtering, pattern recognition and image analysis: watershed, Euclidean distance transform, top-hat, reconstruction. (many real-life demonstrations)   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.spikenet-technology.com/"&gt; SpikeNet Technology&lt;/a&gt;  &lt;/b&gt;   -  (Company) Vendor of SpikeNet, a biologically-inspired computer vision system for object detection, recognition, and related applications. &lt;i&gt; (by &lt;a href="http://www.cerco.ups-tlse.fr/"&gt; Simon Thorpe&lt;/a&gt; / &lt;a href="http://www.cerco.ups-tlse.fr/"&gt; Centre de Recherche Cerveau &amp;amp; Cognition&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.ph.tn.tudelft.nl/DIPlib"&gt; The Delft Scientific Image Processing Library&lt;/a&gt;  &lt;/b&gt;   -  DIPlib is a scientific image processing library written in C. It contains a large number of functions for processing and analysing multi dimensional image data.&lt;br /&gt;   The library provides functions for performing transforms, filter operations, object generation, and statistical analysis of images. &lt;i&gt; (by Michael van Ginkel, Geert van Kempen, Cris Luengo Hendriks, Lucas van Vliet Geert van Kempen Cris Luengo Hendriks Lucas van Vliet / &lt;a href="http://www.ph.tn.tudelft.nl/"&gt; Pattern Recognition Group&lt;/a&gt; / &lt;a href="http://www.tudelft.nl/"&gt; Delft University of Technology&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://members.aol.com/ImagProcTK/"&gt; The Image Processing Tool Kit&lt;/a&gt;  &lt;/b&gt;   -  Comprehensive set of image processing and analysis routines in the form of Photoshop-compatible plug-ins for Mac and PC, with extensive tutorial. (commercial package $$) &lt;i&gt; (by &lt;a href="http://members.aol.com/drjohnruss"&gt; Chris Russ, John Russ&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.niac.man.ac.uk/Tina/"&gt; TINA&lt;/a&gt;  &lt;/b&gt;  -  A set of vision algorithm development libraries written in C&lt;br /&gt;   TINA is the result of over 50 man years of vision research. It is a set of libraries providing many levels of infrastructure for people wishing to develop vision algorithms.  It contains a vast array of  code from image reading and writing to depth estimation from stereo pairs. TINA is used as an on-going research tool by several vision research groups in the UK.  It is written in C and has been compiled on many UNIX platforms including Sun workstations, HP workstations and PCs running Linux flavours.  It requires only the basic UNIX system, a current gcc compiler and the X graphics libraries.    &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.inventeering.com/"&gt; USB camera driver toolkit for LabVIEW&lt;/a&gt;  &lt;/b&gt;  -  USB cameras and video capture devices are now included in the LabVIEW programming world.&lt;br /&gt;   INVENTvisionVFW 1.0 gives you the power to view and capture any VFW (Video For Windows) video devices in any programming language that can interface to activex technology. INVENTvisionVFW can be implemented in VB, VC++, G (LabVIEW) programming environments. This mean that USB cameras and video capture devices are now included in the LabVIEW programming world. This product integrates and works with LabVIEW Picture Control and IMAQ. A real-time overlay is display on the activex control placed on the LabVIEW front Panel. Images can be captured to a 2D Array[U32], Visual Basic Picturebox, LabVIEW Picture Control or IMAQ Image. Images can be loaded from and saved to disk in BMP and JPG formats.  &lt;i&gt; (by George Miles / &lt;a href="http://www.inventeering.com/"&gt; INVENTeering&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.arc.umn.edu/GVL/Software/urt.html"&gt; Utah Raster Toolkit&lt;/a&gt;  &lt;/b&gt;  -  UNIX commands and C libraries for an 8 bits/pixel, 1-255 channel image format.&lt;br /&gt;  Contains a &lt;em&gt;nice&lt;/em&gt; display tool for X11; it's fast, supports animation and zooms in on any image.  &lt;a href="http://www.arc.umn.edu/gvl-software/media-tools.html#urt-updates"&gt;Wes Barris' URT extensions&lt;/a&gt; are quite useful too.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://macorb.uthscsa.edu/dig/itdesc.html"&gt; UTHSCSA ImageTool&lt;/a&gt;  &lt;/b&gt;  -  free image processing and analysis program for windows.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.vips.ecs.soton.ac.uk/"&gt; VASARI Image Processing Software&lt;/a&gt;  &lt;/b&gt;   -  An optimised library in C/C++ running on Unix. Its strengths are handling high-resolution images and colour spaces. Automatically parallel on SMP systems. &lt;i&gt; (&lt;a href="http://www.iam.ecs.soton.ac.uk/"&gt; Intelligence Agents and Multimedia Research Group (IAM)&lt;/a&gt; / University of Southampton, UK) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.videoocx.de/"&gt; Video OCX&lt;/a&gt;  &lt;/b&gt;  -  Windows-based interface for easy integration of video capture into your applications. It supports VFW video devices (USB cameras or framegrabber) AND AVI sequences as image sources.  &lt;i&gt; (&lt;a href="http://www.videoocx.de/"&gt; vision pearls GbR&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.ubc.ca/nest/lci/vista/vista.html"&gt; Vista&lt;/a&gt;  &lt;/b&gt;  -  A flexible library of C-routines, command-line filters, and Motif widgets for image representation and manipulation.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="ftp://redhook.llnl.gov/pub/visu/tutorial/tutorial.html"&gt; VISU&lt;/a&gt;  &lt;/b&gt;  -  Tcl/Tk toolkit for visualization and interactive segmentation of 2D gray-scale images   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.visusimaging.com/"&gt; Visus Imaging&lt;/a&gt;  &lt;/b&gt;   -  Image analysis toolkit and complete systems aimed at researchers and microscopists in Biomedical and Material Sciences. (commercial product $$) &lt;i&gt; (Foresthill Products) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.logicalvision.com/"&gt; WiT&lt;/a&gt;  &lt;/b&gt;  -  Visual programming environment for image processing (demo).   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.fsiautomation.com/"&gt; XCaliper&lt;/a&gt;  &lt;/b&gt;  -  Commercial Windows NT software toolkit for machine vision and thermal imaging applications.  &lt;i&gt; (&lt;a href="http://www.fsiautomation.com/"&gt; FSI Automation&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://amiserver.dis.ulpgc.es/xmwgus"&gt; XMegaWave, an Image Processing Environment&lt;/a&gt;  &lt;/b&gt;   -  a freeware graphical windows environment oriented towards image processing, where the user can create his own function in a very easy way.&lt;br /&gt;   Some european universities have developed a freeware image processing environment, named XMegaWave (XMW). It runs on Unix workstations or Linux machines, running Motif and X11 windows libraries. XMW includes some classical procedures for image processing (edge detection, segmentation, morphological filters). But the important thing is that XMW is also a programming library, where the user can implement his own image processing algorythm in C in a very very very easy way. The time needed to write the code and debug it is very short, so you can obtain results rapidly. Besides, XMW is a pedagogic tool suitable for using in image processing classes. It can be explained in just one class, and the students can easily implement any kind of image filter. &lt;i&gt; (Image Mathematical Analysys Group (AMI) / University Las Palmas ) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="tracking"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;Tracking&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.jhu.edu/CIPS/xvision/XV_software_updates.html"&gt; XVision visual tracking software&lt;/a&gt; &lt;/b&gt; Application independent, configurable interface to high-speed tools for visual feature tracking.  Uses include tracking a person's eyes and mouth, gesture recognition.  Contains interfaces to many popular cameras and frame grabbers.  &lt;i&gt; (by &lt;a href="http://www.cs.jhu.edu/%7Ehager"&gt; Greg Hager&lt;/a&gt; / &lt;a href="http://www.cs.jhu.edu/CIPS"&gt; Computational Interaction with Physical Systems&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;hr /&gt;  &lt;b&gt;&lt;a name="misc"&gt;&lt;/a&gt; &lt;/b&gt;&lt;h3&gt;&lt;b&gt;Miscellaneous&lt;/b&gt;&lt;/h3&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cis.upenn.edu/%7Eeero/steerpyr.README"&gt; Steerable Pyramid&lt;/a&gt; &lt;/b&gt;&lt;br /&gt;Check Eero's home page for a tar file. &lt;i&gt; (by &lt;a href="http://www.cis.upenn.edu/%7Eeero/home.html"&gt; Eero Simoncelli&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.arhungary.hu/"&gt; Carina&lt;/a&gt;  &lt;/b&gt;  -  commercial package for recognizing license plates &lt;i&gt; (Adaptive Recognition Hungary) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.idiom.com/%7Etebo/"&gt; Grabbo: vision-based MIDI controller&lt;/a&gt;  &lt;/b&gt;   -  Grabbo uses orientation histograms for realtime image matching and 3D interpolation. MIDI output. Free demo version for BeOS. &lt;i&gt; (Tebo Software) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.cmu.edu/%7Eiwan/1394"&gt; IEEE-1394 Digital Camera Windows Driver&lt;/a&gt;  &lt;/b&gt;  -  Windows device driver and C/C++ software library for IEEE-1394 digital cameras.&lt;br /&gt;   The web site also contains a demo program, documentation, example images, links, and other information. IEEE-1394 digital cameras are an ideal solution for acquiring high quality images with a regular laptop computer. &lt;i&gt; (by &lt;a href="http://www.cs.cmu.edu/%7Eiwan"&gt; Iwan Ulrich&lt;/a&gt; / &lt;a href="http://www.cs.cmu.edu/%7Eillah/lab.html"&gt; Mobile Robot Programming Lab&lt;/a&gt; / &lt;a href="http://www.cmu.edu/"&gt; Carnegie Mellon University&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.umd.edu/%7Ergc/MeteorCapture/index.html"&gt; MeteorCapture&lt;/a&gt;  &lt;/b&gt;  -  Application to capture video to memory or disk using PC and Matrox Meteor (written using Visual C++). &lt;i&gt; (by &lt;a href="http://www.cs.umd.edu/%7Ergc/"&gt; Ross Cutler&lt;/a&gt; / &lt;a href="http://www.cfar.umd.edu./cvl/"&gt; Computer Vision Lab&lt;/a&gt; / UMCP) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://mfsm.sourceforge.net/"&gt; Modular Flow Scheduling Middleware&lt;/a&gt;  &lt;/b&gt;   -  An open source, windows-based framework for developing programs with good software engineering qualities.  It has been used for developing real-time vision applications.&lt;br /&gt;   Modular Flow Scheduling Middleware is an open source implementation of a generic, modular, extensible software architecture for dataflow processing of datastreams. It provides a framework for the implementation of algorithms and development of applications with desirable software engineering qualities, such as efficiency, scalability, extensibility, reusability, interoperability. (Windows - VC++) &lt;i&gt; (by &lt;a href="http://iris.usc.edu/%7Eafrancoi/"&gt; Alexandre RJ Francois&lt;/a&gt; / &lt;a href="http://imsc.usc.edu/"&gt; IMSC / IRIS&lt;/a&gt; / &lt;a href="http://www.usc.edu/"&gt; University of Southern California&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.rozsoftware.com/"&gt; PicDB&lt;/a&gt;  &lt;/b&gt;  -  an image database system with query by image content capabilities.   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.visionpearls.de/WWWeng/products/framepro.html"&gt; Real-time Head Tracking&lt;/a&gt;  &lt;/b&gt;  -  automatic real-time head-tracking in video images. &lt;i&gt; (&lt;a href="http://www.visionpearls.de/"&gt; vision pearls GbR&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.integra.co.jp/eng/products/renoir/"&gt; Renoir - 3D reconstruction from photos&lt;/a&gt;  &lt;/b&gt;   -  3D reconstruction from photos. 3D photomontage. ($$ payware $$ - free demo version available).  Mainly useful for computer graphics, but uses some computer vision techniques&lt;br /&gt;   Model of an object is created manually from parametric blocks. Corresponding edges are marked on images and model. Camera and model parameters are reconstructed through minimization of distance between projected edges of model and corresponding edges, marked on photos. &lt;i&gt; (by Ildar Valiev / &lt;a href="http://www.integra.co.jp/"&gt; Integra, Inc.&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.cs.umd.edu/%7Ergc/RRCapture/"&gt; RRCapture&lt;/a&gt;  &lt;/b&gt;   -  a video capture program used to capture uncompressed image sequences using a PC configured with a 1 to 3 Bitflow RoadRunner digital frame grabbers.  &lt;i&gt; (by &lt;a href="http://www.cs.umd.edu/%7Ergc/"&gt; Ross Cutler&lt;/a&gt; / &lt;a href="http://www.cfar.umd.edu/cvl/"&gt; Computer Vision Lab&lt;/a&gt; / &lt;a href="http://www.umd.edu/"&gt; University of Maryland&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.neurotechnologija.com/verifinger.html"&gt; Verifinger - Fingerprint processing and recognition&lt;/a&gt;  &lt;/b&gt;  -  SDK for fingerprint processing and recognition &lt;i&gt; (&lt;a href="http://www.neurotechnologija.com/"&gt; Neurotechnologija Ltd.&lt;/a&gt;) &lt;/i&gt;  &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.mousevision.com/"&gt; VisualMouse&lt;/a&gt;  &lt;/b&gt;   -  Our software translates user's head motion into the motion of the cursor on the screen, by processing the image from a web cam   &lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;b&gt; &lt;a href="http://www.zaxel.com/"&gt; Zaxel 3D Imaging Systems&lt;/a&gt;  &lt;/b&gt;   -  Zaxel's 3D Imaging Systems create an infinite number of virtual cameras around the object or moving subject from a limited number of real camera inputs.   &lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-5390057495457321890?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/5390057495457321890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=5390057495457321890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5390057495457321890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5390057495457321890'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/05/computer-vision-software.html' title='Computer Vision Software'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-6402879295194478292</id><published>2007-04-21T09:59:00.000-07:00</published><updated>2007-04-21T10:49:46.788-07:00</updated><title type='text'>Digital Geometry</title><content type='html'>&lt;a href="http://files.filefront.com/7302116" title="Digital_Geometry.rar"&gt;Digital_Geometry.rar&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-6402879295194478292?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/6402879295194478292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=6402879295194478292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/6402879295194478292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/6402879295194478292'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/04/digital-geometry.html' title='Digital Geometry'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-7921737988636524057</id><published>2007-04-21T09:56:00.000-07:00</published><updated>2007-04-21T09:59:23.422-07:00</updated><title type='text'>Intro to Topology</title><content type='html'>&lt;a href="http://www.math.toronto.edu/%7Edrorbn/People/Eldar/thesis/default.htm"&gt;&lt;big&gt;&lt;strong&gt;&lt;big&gt;Planar Machines' web site. An invitation to Topology.&lt;/big&gt;&lt;/strong&gt;&lt;/big&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-7921737988636524057?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/7921737988636524057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=7921737988636524057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7921737988636524057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7921737988636524057'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/04/intro-to-topology.html' title='Intro to Topology'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-5502658301757409287</id><published>2007-04-20T06:31:00.000-07:00</published><updated>2007-04-20T06:43:14.397-07:00</updated><title type='text'>Limits.h</title><content type='html'>#define CHAR_BIT      8         /* number of bits in a char */&lt;br /&gt;#define SCHAR_MIN   (-128)      /* minimum signed char value */&lt;br /&gt;#define SCHAR_MAX     127       /* maximum signed char value */&lt;br /&gt;#define UCHAR_MAX     0xff      /* maximum unsigned char value */&lt;br /&gt;&lt;br /&gt;#ifndef _CHAR_UNSIGNED&lt;br /&gt;#define CHAR_MIN    SCHAR_MIN   /* mimimum char value */&lt;br /&gt;#define CHAR_MAX    SCHAR_MAX   /* maximum char value */&lt;br /&gt;#else&lt;br /&gt;#define CHAR_MIN      0&lt;br /&gt;#define CHAR_MAX    UCHAR_MAX&lt;br /&gt;#endif  /* _CHAR_UNSIGNED */&lt;br /&gt;&lt;br /&gt;#define MB_LEN_MAX    5             /* max. # bytes in multibyte char */&lt;br /&gt;#define SHRT_MIN    (-32768)        /* minimum (signed) short value */&lt;br /&gt;#define SHRT_MAX      32767         /* maximum (signed) short value */&lt;br /&gt;#define USHRT_MAX     0xffff        /* maximum unsigned short value */&lt;br /&gt;#define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */&lt;br /&gt;#define INT_MAX       2147483647    /* maximum (signed) int value */&lt;br /&gt;#define UINT_MAX      0xffffffff    /* maximum unsigned int value */&lt;br /&gt;#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */&lt;br /&gt;#define LONG_MAX      2147483647L   /* maximum (signed) long value */&lt;br /&gt;#define ULONG_MAX     0xffffffffUL  /* maximum unsigned long value */&lt;br /&gt;#define LLONG_MAX     9223372036854775807i64       /* maximum signed long long int value */&lt;br /&gt;#define LLONG_MIN   (-9223372036854775807i64 - 1)  /* minimum signed long long int value */&lt;br /&gt;#define ULLONG_MAX    0xffffffffffffffffui64       /* maximum unsigned long long int value */&lt;br /&gt;&lt;br /&gt;#if     _INTEGRAL_MAX_BITS &gt;= 8&lt;br /&gt;#define _I8_MIN     (-127i8 - 1)    /* minimum signed 8 bit value */&lt;br /&gt;#define _I8_MAX       127i8         /* maximum signed 8 bit value */&lt;br /&gt;#define _UI8_MAX      0xffui8       /* maximum unsigned 8 bit value */&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#if     _INTEGRAL_MAX_BITS &gt;= 16&lt;br /&gt;#define _I16_MIN    (-32767i16 - 1) /* minimum signed 16 bit value */&lt;br /&gt;#define _I16_MAX      32767i16      /* maximum signed 16 bit value */&lt;br /&gt;#define _UI16_MAX     0xffffui16    /* maximum unsigned 16 bit value */&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#if     _INTEGRAL_MAX_BITS &gt;= 32&lt;br /&gt;#define _I32_MIN    (-2147483647i32 - 1) /* minimum signed 32 bit value */&lt;br /&gt;#define _I32_MAX      2147483647i32 /* maximum signed 32 bit value */&lt;br /&gt;#define _UI32_MAX     0xffffffffui32 /* maximum unsigned 32 bit value */&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#if     _INTEGRAL_MAX_BITS &gt;= 64&lt;br /&gt;/* minimum signed 64 bit value */&lt;br /&gt;#define _I64_MIN    (-9223372036854775807i64 - 1)&lt;br /&gt;/* maximum signed 64 bit value */&lt;br /&gt;#define _I64_MAX      9223372036854775807i64&lt;br /&gt;/* maximum unsigned 64 bit value */&lt;br /&gt;#define _UI64_MAX     0xffffffffffffffffui64&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#if     _INTEGRAL_MAX_BITS &gt;= 128&lt;br /&gt;/* minimum signed 128 bit value */&lt;br /&gt;#define _I128_MIN   (-170141183460469231731687303715884105727i128 - 1)&lt;br /&gt;/* maximum signed 128 bit value */&lt;br /&gt;#define _I128_MAX     170141183460469231731687303715884105727i128&lt;br /&gt;/* maximum unsigned 128 bit value */&lt;br /&gt;#define _UI128_MAX    0xffffffffffffffffffffffffffffffffui128&lt;br /&gt;#endif&lt;br /&gt;&lt;br /&gt;#ifndef SIZE_MAX&lt;br /&gt;#ifdef _WIN64&lt;br /&gt;#define SIZE_MAX _UI64_MAX&lt;br /&gt;#else&lt;br /&gt;#define SIZE_MAX UINT_MAX&lt;br /&gt;#endif&lt;br /&gt;#endif&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-5502658301757409287?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/5502658301757409287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=5502658301757409287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5502658301757409287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5502658301757409287'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/04/limitsh.html' title='Limits.h'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-7840380015060590665</id><published>2007-04-20T00:51:00.000-07:00</published><updated>2007-04-20T00:55:25.736-07:00</updated><title type='text'>A Useful site to understanding B-Spline Curve</title><content type='html'>Spline Curves and Surfaces&lt;br /&gt;Introduction&lt;br /&gt;This tutorial is designed to help students learn about spline curves and surfaces. It is not designed to be a full lesson; it is more suited to those who have already learnt the basics and would like to reinforce their knowledge.&lt;br /&gt;The tutorial consists of a combination of writing, java applets, VRML worlds and links to other pages. These links are there because the descriptions given elsewhere are likely to be a great help to those learning this material from scratch, as I only give a brief account of the mathematics involved here. The java applets are essentially interactive diagrams. They are there for you to learn by experience, so do experiment!&lt;br /&gt;A note about viewing these pages&lt;br /&gt;In order to see diagrams as large as possible, please maximise your browser window. All of the diagrams on these pages are sized in relation to your window size; if this is too small, the diagrams will be too. It should be possible to resize the window during browsing these pages, but I believe some versions of Netscape do not resize the applets correctly, so choose your window size before you move on.&lt;br /&gt;For some basic notes on how to use the Java applets see the introduction to spline curves. For notes on how to use the VRML worlds see the surface introduction.&lt;br /&gt;Table of Contents&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Introduction.html"&gt;1. Introduction to spline curves&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Quadratic.html"&gt;2. Explicit curves&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Parametrics.html"&gt;3. Parametric curves&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Beziers.html"&gt;4. Bezier curves&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/BSplines.html"&gt;5. B-Spline curves&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/Surfaces.html"&gt;6. Introduction to surfaces&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/BezierSurface.html"&gt;7. Bezier surfaces&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/BSplineSurface.html"&gt;8. B-Spline surfaces&lt;/a&gt;&lt;br /&gt;This tutorial was written as an individual project, a required part of the MSc Computing Science degree at Imperial College, by Andy Salter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-7840380015060590665?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/7840380015060590665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=7840380015060590665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7840380015060590665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7840380015060590665'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/04/useful-site-to-understanding-b-spline.html' title='A Useful site to understanding B-Spline Curve'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-4809823874379498497</id><published>2007-04-19T04:05:00.000-07:00</published><updated>2007-04-19T04:11:53.885-07:00</updated><title type='text'>Error with MSVCR80.DLL !!!!!!!!!!!!</title><content type='html'>Encoutered this error, I had to spend 4 hours to fix it. Until now, I have never understand how the "magic codes" could resolved this error. ^_^, but at least we'll never get stuck in it. Oh my god, Thanks!&lt;br /&gt;&lt;br /&gt;You must read following articles:&lt;br /&gt;&lt;br /&gt;&lt;a href link=http://blogs.msdn.com/jreddy/rss.xml /&gt;&lt;br /&gt;&lt;br /&gt;Concretely, I cut &amp; paste the vital code here:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Error Message&lt;br /&gt;This application has failed to start because MSVCR80.dll was not found. Re-installing the application may fix this problem.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Typically this error occurs because you are mixing retail and debug components. A very common scenario is a debug build of a application which is pulling in a retail version of a static library. The scenario could be the exact reverse and the error message in this case would reference msvcr80d.dll&lt;br /&gt;&lt;br /&gt;Solution&lt;br /&gt;This can be worked around by adding reference to retail CRT in the application manifest manually. Or by adding the following to a header.&lt;br /&gt;&lt;br /&gt;#pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC80.CRT' version='8.0.50608.0' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'\"")&lt;br /&gt;&lt;br /&gt;Note: Proceed with caution when providing this solution.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bless you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-4809823874379498497?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/4809823874379498497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=4809823874379498497' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/4809823874379498497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/4809823874379498497'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/04/error-with-msvcr80dll.html' title='Error with MSVCR80.DLL !!!!!!!!!!!!'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-6234516697756960059</id><published>2007-04-15T01:13:00.000-07:00</published><updated>2007-04-20T01:02:28.066-07:00</updated><title type='text'>Hausdorff distance between convex polygons</title><content type='html'>&lt;center&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="65%"&gt;&lt;center&gt;&lt;img src="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/title5.gif" align="top" border="0" /&gt; &lt;p&gt;&lt;br /&gt;&lt;a href="mailto:normand@livia.etsmtl.ca"&gt;Normand Grégoire&lt;/a&gt; and &lt;a href="mailto:mikael@resus.univ-mrs.fr"&gt;Mikael Bouillot&lt;/a&gt; &lt;/p&gt;&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;1. &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#intro"&gt;Introduction&lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#whatis"&gt;What is Hausdorff distance ?&lt;/a&gt;&lt;br /&gt;3. &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#computing"&gt;Computing Hausdorff distance&lt;/a&gt;&lt;br /&gt;3.1 &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#assumptions"&gt;Assumptions&lt;/a&gt;&lt;br /&gt;3.2 &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#lemmas"&gt;Lemmas&lt;/a&gt;&lt;br /&gt;3.3 &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#algorithm"&gt;Algorithm&lt;/a&gt;&lt;br /&gt;3.4 &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#complexity"&gt;Complexity&lt;/a&gt;&lt;br /&gt;3.5 &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#applet"&gt;Interactive applet&lt;/a&gt;&lt;br /&gt;4. &lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/main.html#applic"&gt;Application examples&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/glossary.html"&gt;Glossary&lt;/a&gt;&lt;br /&gt;&lt;a href="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/references.html"&gt;References&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/center&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;hr align="left"&gt;&lt;br /&gt;&lt;p&gt;&lt;table border="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="6%"&gt;&lt;img src="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/mad_hacker.gif" align="left" border="0" /&gt; &lt;/td&gt;&lt;td width="50%"&gt;Web project presented to Mr. &lt;a href="http://jeff.cs.mcgill.ca/~godfried/"&gt;Godfried Toussaint&lt;/a&gt;&lt;br /&gt;for the course &lt;a href="http://www-cgrl.cs.mcgill.ca/~godfried/teaching/cg-info.html"&gt;CS 507 &lt;i&gt;Computational Geometry&lt;/i&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.mcgill.ca/"&gt;McGill University&lt;/a&gt;, fall 1998 &lt;/td&gt;&lt;td width="20%"&gt;&lt;!--     &lt;a href="http://www.anybrowser.org/campaign/"&gt;     --&gt;&lt;img src="http://cgm.cs.mcgill.ca/~godfried/teaching/cg-projects/98/normand/netscape30.gif" width="105" align="right" border="0" /&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-6234516697756960059?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/6234516697756960059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=6234516697756960059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/6234516697756960059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/6234516697756960059'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/04/hausdorff-distance-between-convex.html' title='Hausdorff distance between convex polygons'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-5257773687406647475</id><published>2007-04-15T00:44:00.000-07:00</published><updated>2007-04-15T00:46:01.346-07:00</updated><title type='text'>Fractals and the Fractal Dimension</title><content type='html'>&lt;h2&gt;Fractals and the Fractal Dimension&lt;/h2&gt;  &lt;center&gt;&lt;p&gt;&lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Mandel.GIF" height="82" width="82" /&gt; &lt;/p&gt;&lt;/center&gt;  &lt;h3&gt;Mandelbrot and Nature&lt;/h3&gt;  &lt;blockquote&gt; &lt;p&gt;"Clouds are not spheres, mountains are not cones, coastlines are not circles, and bark is not smooth, nor does lightning travel in a straight line."(Mandelbrot, 1983).&lt;/p&gt; &lt;/blockquote&gt;  &lt;h3&gt;The Concept of Dimension&lt;/h3&gt;  &lt;p&gt;So far we have used "dimension" in two senses: &lt;/p&gt;  &lt;ul&gt;&lt;li&gt;The three dimensions of Euclidean space (D=1,2,3) &lt;/li&gt;&lt;li&gt;The number of variables in a dynamic system &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Fractals, which are irregular geometric objects, require a third meaning: &lt;/p&gt;  &lt;h4&gt;The Hausdorff Dimension&lt;/h4&gt;  &lt;p&gt;If we take an object residing in Euclidean dimension D and reduce its linear size by 1/r in each spatial direction, its measure (length, area, or volume) would increase to N=r&lt;sup&gt;D&lt;/sup&gt; times the original. This is pictured in the next figure. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Hausdorff.GIF" height="541" width="503" /&gt; &lt;/p&gt;  &lt;p&gt;We consider N=r&lt;sup&gt;D&lt;/sup&gt;, take the log of both sides, and get log(N) = D log(r). If we solve for D. D = log(N)/log(r) The point: examined this way, D need not be an integer, as it is in Euclidean geometry. It could be a fraction, as it is in fractal geometry. This generalized treatment of dimension is named after the German mathematician, Felix Hausdorff. It has proved useful for describing natural objects and for evaluating trajectories of dynamic systems. &lt;/p&gt;  &lt;h3&gt;The length of a coastline&lt;/h3&gt;  &lt;p&gt;Mandelbrot began his treatise on fractal geometry by considering the question: "How long is the coast of Britain?" The coastline is irregular, so a measure with a straight ruler, as in the next figure, provides an estimate. The estimated length, L, equals the length of the ruler, s, multiplied by the N, the number of such rulers needed to cover the measured object. In the next figure we measure a part of the coastline twice, the ruler on the &lt;b&gt;right&lt;/b&gt; is &lt;b&gt;half&lt;/b&gt; that used on the &lt;b&gt;left&lt;/b&gt;. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.1.GIF" height="174" width="314" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Measuring the length of a coastline using rulers of varying lengths.&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;But the estimate on the right is longer. If the the scale on the left is one, we have six units, but halving the unit gives us 15 rulers (L=7.5), not 12 (L=6). If we halved the scale again, we would get a similar result, a longer estimate of L. In general, as the ruler gets diminishingly small, the length gets infinitely large. The &lt;b&gt;concept of length, begins to make little sense.&lt;/b&gt; &lt;/p&gt;  &lt;h3&gt;The "Richardson Effect"&lt;/h3&gt;  &lt;p&gt;Lewis Fry Richardson first noted the regularity between the length of national boundaries and scale size. As shown next, the relation between length estimate and length of scale is linear on a log-log plot. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.2.GIF" height="278" width="441" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;The Richardson Effect. &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Mandelbrot assigned the term (1-D) to the slope, so the functions are:&lt;br /&gt;&lt;b&gt;log[L(s)] = (1-D)log(s) + b&lt;/b&gt; where D is the Fractal Dimension.&lt;br /&gt;For Great Britain, 1 - D = -.24, approximately. D = 1-(-.24) = 1.24, a fractional value.The coastline of South Africa is very smooth, virtually an arc of a circle. The slope estimated above is very near zero. D = 1-0 = 1. This makes sense because the coastline is very nearly a regular Euclidean object, a line, which has dimensionality of one. In general, the "rougher' the line, the steeper the slope, the larger the fractal dimension. &lt;/p&gt;  &lt;h3&gt;Examples of geometric objects with non-integer dimensions&lt;/h3&gt;  &lt;h4&gt;Koch Curve&lt;/h4&gt;  &lt;p&gt;We begin with a straight line of length 1, called the &lt;b&gt;initiator&lt;/b&gt;. We then remove the middle third of the line, and replace it with two lines that each have the same length (1/3) as the remaining lines on each side. This new form is called the &lt;b&gt;generator&lt;/b&gt;, because it specifies a rule that is used to generate a new form. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.3.GIF" height="152" width="375" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;The Initiator and Generator for constructing the Koch Curve.&lt;/i&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.4.GIF" height="99" width="281" /&gt; &lt;/p&gt;  &lt;p&gt;The rule says to take each line and replace it with four lines, each one-third the length of the original. &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Level 2 in the construction of the Koch Curve.&lt;/i&gt; &lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.5.GIF" height="92" width="279" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Level 3 in the construction of the Koch Curve.&lt;/i&gt; &lt;/p&gt;  &lt;p&gt;We do this iteratively ... without end. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.6.GIF" height="93" width="279" /&gt; &lt;i&gt;The Koch Curve. &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;What is the &lt;b&gt;length&lt;/b&gt; of the Koch curve? &lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.7.GIF" height="265" width="304" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;The length of the curve increases with each iteration.&lt;/i&gt; It has infinite length. But if we treat the Koch curve as we did the coastline, ... &lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.8.GIF" height="221" width="369" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;The relation between log(L(s)) and log(s) for the Koch curve&lt;/i&gt; ... &lt;/p&gt;  &lt;p&gt;we find its fractal dimension to be 1.26. The same result obtained from D = log(N)/log(r) D = log(4)/log(3) = 1.26. &lt;/p&gt;  &lt;h4&gt;Cantor Dust&lt;/h4&gt;  &lt;p&gt;Iteratively removing the middle third of an initiating straight line, as in the Koch curve, ... &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.9.GIF" height="67" width="288" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Initiator and Generator for constructing Cantor Dust.&lt;/i&gt; ... &lt;/p&gt;  &lt;p&gt;this time without replacing the gap... &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.10.GIF" height="95" width="312" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Levels 2, 3, and 4 in the construction of Cantor Dust.&lt;/i&gt; &lt;/p&gt;  &lt;p&gt;Calculating the dimension ... D = log(N)/log(r) D = log(2)/log(3) = .63 We have an object with dimensionality less than one, between a point (dimensionality of zero and a line (dimensionality 1). &lt;/p&gt;  &lt;h4&gt;Sierpinski Triangle&lt;/h4&gt;  &lt;p&gt;We start with an equilateral triangle, connect the mid-points of the three sides and remove the resulting inner triangle. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.11.GIF" height="179" width="253" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Constructing the Sierpinski Triangle. &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Iterating the first step. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.12.GIF" height="189" width="268" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Constructing the Sierpinski Triangle.&lt;/i&gt; &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.13.GIF" height="179" width="255" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;The Sierpinski Triangle.&lt;/i&gt; &lt;/p&gt;  &lt;p&gt;Calculating the dimension... D = log(N)/log(r) = log(3)/log(2) = 1.585. This time we get a value between 1 and 2. &lt;/p&gt;  &lt;h3&gt;The dimensionality of a strange attractor&lt;/h3&gt;  &lt;ol&gt;&lt;li&gt;The trajectory of a strange attractor cannot intersect with itself. (Why?) &lt;/li&gt;&lt;li&gt;Nearby trajectories diverge exponentially. (Why?) &lt;/li&gt;&lt;li&gt;But the attractor is bounded to the phase space. &lt;/li&gt;&lt;li&gt;The trajectory does not fill the phase space. &lt;/li&gt;&lt;/ol&gt;  &lt;p&gt;A strange attractor is a fractal, and its fractal dimension is less than the dimensions of its phase space. &lt;/p&gt;  &lt;h3&gt;Self-similarity&lt;/h3&gt;  &lt;p&gt;An important (defining) property of a fractal is &lt;b&gt;self-similarity&lt;/b&gt;, which refers to an infinite nesting of structure on all scales. Strict self- similarity refers to a characteristic of a form exhibited when a substructure resembles a superstructure in the same form.&lt;/p&gt;  &lt;h3&gt;Mandelbrot Set&lt;/h3&gt;  &lt;p&gt;Found by iterating&lt;br /&gt;z&lt;sub&gt;n+1&lt;/sub&gt; = z&lt;sub&gt;n&lt;/sub&gt;&lt;sup&gt;2&lt;/sup&gt; + c.&lt;br /&gt;where z is a complex number. z&lt;sub&gt;0&lt;/sub&gt;=0.&lt;br /&gt;For different values of c, the trajectories either: stay near the origin, or "escape".&lt;br /&gt;The Mandelbrot set is the set of points that are not in the Escape Set. &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.33.GIF" height="151" width="210" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;The Mandelbrot set. The points in the set are painted black. &lt;/i&gt;&lt;/p&gt;  &lt;p&gt;The Escape Set differs in rate of escape, graphically depicted with different colors or altitudes ... &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Fig4.34.GIF" height="179" width="299" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;i&gt;Constructed using the computer program "The Beauty of Fractal Lab", by Thomas Eberhardt.&lt;/i&gt; &lt;img src="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Mandel.GIF" height="82" width="82" /&gt; &lt;/p&gt;  &lt;h3&gt;So, what is a fractal?&lt;/h3&gt;  &lt;p&gt;An irregular geometric object with an infinite nesting of structure at all scales. &lt;/p&gt;  &lt;h3&gt;Why do we care about fractals?&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;Natural objects are fractals. &lt;/li&gt;&lt;li&gt;Chaotic trajectories (strange attractors) are fractals. &lt;/li&gt;&lt;li&gt;Assessing the fractal properties of an observed time series is informative.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;&lt;a href="http://www.vanderbilt.edu/AnS/psychology/cogsci/chaos/workshop/Tools.html"&gt;Next Section: Nonlinear Statistical Tools&lt;/a&gt; &lt;/p&gt;   &lt;div style="border: 0px solid rgb(0, 0, 0); margin: 0px; padding: 0px; overflow: visible; position: absolute; left: 546px; top: 216px; width: 444px; height: 352px; display: none; z-index: 1000; font-size: 12px;" id="VDICT_WIN_ID"&gt;&lt;iframe style="border: medium none ; margin: 0px; padding: 0px; overflow: visible; width: 100%; height: 100%;" id="VDICT_IFRAME_ID"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-5257773687406647475?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/5257773687406647475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=5257773687406647475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5257773687406647475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5257773687406647475'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2007/04/fractals-and-fractal-dimension.html' title='Fractals and the Fractal Dimension'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-4962622251030686535</id><published>2006-12-24T05:09:00.000-08:00</published><updated>2006-12-24T05:10:38.841-08:00</updated><title type='text'>Thư viện xử lý ảnh và thị giác máy tính</title><content type='html'>CVIP&lt;br /&gt;ImageJ&lt;br /&gt;OpenCV&lt;br /&gt;IM&lt;br /&gt;IPL 98&lt;br /&gt;&lt;br /&gt;Tải về  ở  mục "Tổ chim của tôi"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-4962622251030686535?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/4962622251030686535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=4962622251030686535' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/4962622251030686535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/4962622251030686535'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2006/12/th-vin-x-l-nh-v-th-gic-my-tnh.html' title='Thư viện xử lý ảnh và thị giác máy tính'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-5570911481533259750</id><published>2006-11-27T04:43:00.000-08:00</published><updated>2006-11-27T04:47:40.332-08:00</updated><title type='text'>HTK Training</title><content type='html'>&lt;div class="Section1"&gt;  &lt;table class="MsoNormalTable" style="width: 407.5pt; margin-left: 41.75pt; border-collapse: collapse;" border="0" cellpadding="0" cellspacing="0" width="543"&gt;  &lt;tbody&gt;&lt;tr style="height: 41.75pt;"&gt;   &lt;td style="padding: 0in 5.4pt; width: 305.65pt; height: 41.75pt;" valign="top" width="408"&gt;   &lt;p class="CompanyName"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;   &lt;/td&gt;   &lt;td style="padding: 0in 5.4pt; width: 101.85pt; height: 41.75pt;" valign="top" width="136"&gt;   &lt;p class="ReturnAddress" style=""&gt;VõĐình Phong&lt;span style=""&gt;                    &lt;/span&gt;&lt;/p&gt;   &lt;p class="ReturnAddress" style=""&gt;Khoa học máy tính&lt;span style=""&gt;             &lt;/span&gt;&lt;/p&gt;   &lt;p class="ReturnAddress" style=""&gt;MSSV: 0312060&lt;span style=""&gt;                  &lt;/span&gt;&lt;/p&gt;   &lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;div style="border-style: solid none none; border-color: windowtext -moz-use-text-color -moz-use-text-color; border-width: 6pt medium medium; padding: 31pt 0in 0in;"&gt;  &lt;p class="TitleCover"&gt;&lt;span style="font-family: Futura-Black; font-weight: normal;"&gt;Huấn luyện HTK 3.2.1&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div style="border-style: solid none none; border-color: windowtext -moz-use-text-color -moz-use-text-color; border-width: 1pt medium medium; padding: 24pt 0in 0in; margin-left: 41.75pt; margin-right: 41.75pt;"&gt;  &lt;p class="SubtitleCover" style="margin: 0in 0in 0.0001pt;"&gt;Nhận dạng tự động tiếng nói (ASR)&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;span style="font-size: 10pt; font-family: Arial; letter-spacing: -0.25pt;"&gt;&lt;br /&gt; &lt;/span&gt;  &lt;div style="border-style: solid none solid solid; border-color: white -moz-use-text-color white white; border-width: 6pt medium 1pt 1pt; padding: 3pt 0in 3pt 3pt; background: black none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 6pt; margin-right: 0in; color: rgb(255, 255, 255);"&gt;  &lt;h1 style="background: black none repeat scroll 0%; margin-left: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Lý do&lt;/h1&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;Anh em học môn ASR đã khổ sở hơn một tháng nay vào việc huấn luyện HTK. Vấn đề không khó nhưng cần sự tỉ mỉ, kiên trì và hướng dẫn từ thầy Hạ. Sau khi hoàn thành việc huấn luyện ở trường, mình nghĩ nên làm một cái tool, trước hết là phục vụ cho mình, và cho những ai chưa huấn luyện xong HTK. Với quĩ thời gian một ngày rưỡi ngắn ngủi tranh thủ “xuất bản” để tất cả chúng ta có kịp thời gian nộp bài vào thứ 7 tới, mình đã vọc lại mớ dòng lệnh và tìm hiểu thêm ý nghĩa của nó. Những gì trình bày dưới đây là từ hướng dẫn của thầy Hạ&lt;span style=""&gt;  &lt;/span&gt;và những kinh nghiệm làm sai của mình lẫn&lt;span style=""&gt;  &lt;/span&gt;bạn bè. Ngoài ra mình có giải thích thêm một số ý nghĩa thông qua việc đọc HTK Book. Nhiều vấn đề còn chưa hiểu thấu đáo cũng như vốn từ dịch thuật củ chuối chắc chắn để lại nhiều thắc mắc các bạn khi đọc bài này. Nhưng rất mong các bạn đóng góp cho sự hoàn thiện của tutorial để anh em ta có thể đỡ “trâu bò” hơn cũng như các bạn năm sau đỡ khổ. Mong anh em ủng hộ. Xin cảm ơn.&lt;/p&gt;  &lt;div style="border-style: solid none solid solid; border-color: white -moz-use-text-color white white; border-width: 6pt medium 1pt 1pt; padding: 3pt 0in 3pt 3pt; background: black none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 6pt; margin-right: 0in; color: rgb(255, 255, 255);"&gt;  &lt;h1 style="background: black none repeat scroll 0%; margin-left: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Thông tin chung&lt;/h1&gt;  &lt;/div&gt;  &lt;h2&gt;1.Cấu trúc thư mục&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Tạo thư mục ngoài cùng với tên tùy ý (trong bài này giả định tất cả để trong thư mục gốc C:\, tuy nhiên điều này không được khuyến khích).&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Các thư mục con gồm có&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;hmm0 – hmm15: các thư mục chứa file MMF.&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;cfg (config): chứa các file config cho một số lệnh.&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;ins (instruction): chứa các file .hed và .led.&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;mlf (master label file): chứa các file .mlf.&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;ph (phones): chứa các file phones: mono, tri.&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;pl (Perl script): chứa các file script viết bằng Perl.&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;txt (other files): chứa các file linh tinh như từ điển, danh sách file, wdnet, gram, train…&lt;/p&gt;  &lt;p class="MsoBodyText" style="margin-left: 1.25in; text-indent: -0.25in;"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-family: Symbol;"&gt;&lt;span style=""&gt;·&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;         &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;wave: chứa các file Wave và mfcc.&lt;/p&gt;  &lt;h2&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/h2&gt;  &lt;h2&gt;2.Một vài lưu ý&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Nhớ thiết lập biến môi trường cho HTKTools và Perl.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Các hướng dẫn trong bài này đều giả sử các tập tin âm thanh đã được thu trước đó. &lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Các tiến trình là bán tự động, yêu cầu người dùng gõ các lệnh thi hành các file Perl.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Thư mục yourproject chứa một số tập tin khời đầu tối thiểu để người dùng có thể bắt đầu thực hiện theo chỉ dẫn.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Thư mục sample chứa các tập tin đã hoàn chỉnh các bước trong bài này.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Bạn có thể dùng allin1.bat (all in one) để chạy tự động các lệnh.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Ngườì dùng nếu tìm thấy lỗi làm ơn thông báo đến mọi người khác, và nếu có thể, xin gởi mail về địa chỉ &lt;a href="mailto:phongkhtn@yahoo.com"&gt;phongkhtn@yahoo.com&lt;/a&gt;. Xin cảm ơn nhiều.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div style="border-style: solid none solid solid; border-color: white -moz-use-text-color white white; border-width: 6pt medium 1pt 1pt; padding: 3pt 0in 3pt 3pt; background: black none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 6pt; margin-right: 0in; color: rgb(255, 255, 255);"&gt;  &lt;h1 style="background: black none repeat scroll 0%; margin-left: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Chuẩn bị dữ liệu&lt;/h1&gt;  &lt;/div&gt;  &lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;span class="Heading2Char"&gt;&lt;span style="font-size: 11pt;"&gt;1.Tạo cấu trúc văn phạm&lt;/span&gt;&lt;/span&gt;&lt;span class="Heading2Char"&gt;&lt;span style="font-size: 11pt; font-family: &amp;quot;Arial Black&amp;quot;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Cấu trúc văn phạm là một đồ thị có hướng tổng quát. Nó chứa các cấu trúc câu có thể có trong ngữ cảnh của ứng dụng mà ta muốn dùng ASR. Ví dụ nếu ta muốn áp dụng ASR trong môi trường chứng khoán, cấu trúc văn phạm phải có những từ (word) và câu (sentence, cấu thành từ word) được thiết kế sao cho nó có thể trình bày tất cả các mẫu câu mà một người trong ngữ cảnh đó có thể nói về.&lt;br /&gt;&lt;br /&gt;Tập tin cấu trúc văn phạm&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;//gram.txt&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;$digit = moojt | hai | ba | boosn | nawm | sasu | bary | tasm | chisn | khoong;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;(&lt;$digit&gt;)&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoNormal" style="margin-left: 0in; text-align: center;" align="center"&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span class="BodyTextChar"&gt;&lt;span style=""&gt;C:\&gt;HParse txt/gram.txt txt/wdnet.txt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;wordnet tạo ra sẽ có định dạng giống file lattice:&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;//&lt;span style="font-family: Arial;" lang="VI"&gt;wdnet.txt&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;VERSION=1.0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;N=13&lt;span style=""&gt;   &lt;/span&gt;L=31&lt;span style=""&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=0&lt;span style=""&gt;    &lt;/span&gt;W=khoong&lt;span style=""&gt;              &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=1&lt;span style=""&gt;    &lt;/span&gt;W=!NULL&lt;span style=""&gt;               &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=2&lt;span style=""&gt;    &lt;/span&gt;W=chisn&lt;span style=""&gt;               &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=3&lt;span style=""&gt;    &lt;/span&gt;W=tasm&lt;span style=""&gt;                &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=4&lt;span style=""&gt;    &lt;/span&gt;W=bary&lt;span style=""&gt;                &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=5&lt;span style=""&gt;    &lt;/span&gt;W=sasu&lt;span style=""&gt;                &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=6&lt;span style=""&gt;    &lt;/span&gt;W=nawm&lt;span style=""&gt;                &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=7&lt;span style=""&gt;    &lt;/span&gt;W=boosn&lt;span style=""&gt;               &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=8&lt;span style=""&gt;    &lt;/span&gt;W=ba&lt;span style=""&gt;                  &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=9&lt;span style=""&gt;    &lt;/span&gt;W=hai&lt;span style=""&gt;       &lt;/span&gt;&lt;span style=""&gt;          &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=10&lt;span style=""&gt;   &lt;/span&gt;W=moojt&lt;span style=""&gt;               &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=11&lt;span style=""&gt;   &lt;/span&gt;W=!NULL&lt;span style=""&gt;               &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;I=12&lt;span style=""&gt;   &lt;/span&gt;W=!NULL&lt;span style=""&gt;               &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=0&lt;span style=""&gt;     &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=0&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=1&lt;span style=""&gt;     &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=0&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=2&lt;span style=""&gt;     &lt;/span&gt;S=0&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=3&lt;span style=""&gt;     &lt;/span&gt;S=2&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=4&lt;span style=""&gt;     &lt;/span&gt;S=3&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=5&lt;span style=""&gt;     &lt;/span&gt;S=4&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=6&lt;span style=""&gt;     &lt;/span&gt;S=5&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=7&lt;span style=""&gt;     &lt;/span&gt;S=6&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=8&lt;span style=""&gt;     &lt;/span&gt;S=7&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=9&lt;span style=""&gt;     &lt;/span&gt;S=8&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=10&lt;span style=""&gt;    &lt;/span&gt;S=9&lt;span style=""&gt;    &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=11&lt;span style=""&gt;    &lt;/span&gt;S=10&lt;span style=""&gt;   &lt;/span&gt;E=1&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=12&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=2&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=13&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=2&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=14&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=3&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=15&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=3&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=16&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=4&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=17&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=4&lt;span style=""&gt;  &lt;/span&gt;&lt;span style=""&gt;  &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=18&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=5&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=19&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=5&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=20&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=6&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=21&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=6&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=22&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=7&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=23&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=7&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=24&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=8&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=25&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=8&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=26&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=9&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=27&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=9&lt;span style=""&gt;    &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=28&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=10&lt;span style=""&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=29&lt;span style=""&gt;    &lt;/span&gt;S=12&lt;span style=""&gt;   &lt;/span&gt;E=10&lt;span style=""&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;J=30&lt;span style=""&gt;    &lt;/span&gt;S=1&lt;span style=""&gt;    &lt;/span&gt;E=11&lt;span style=""&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoNormal" style="margin-left: 0in;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; letter-spacing: 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;Để rõ hơn, xem cấu trúc file lattice SLF trong chương 20 phần phụ lục HTK Book.&lt;br /&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;h2&gt;2.Tạo từ điển&lt;/h2&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;Muốn xây dựng từ điển thì bước đầu tiên là tập hợp tất cả các từ được dùng trong ngữ cảnh. Các từ này được xếp thứ tự alphabet trong tập tin và phải được phiên âm tương ứng. Qui cách phiên âm rất quan trọng, có thể hạ thấp chất lượng nhận dạng nếu không cẩn thận.&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#dict.dct&lt;br /&gt;&lt;span class="BlockQuotationChar"&gt;&lt;span style=""&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;ba &lt;span style=""&gt;          &lt;/span&gt;b &lt;span style=""&gt;    &lt;/span&gt;a &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;bary &lt;span style=""&gt;  &lt;/span&gt;b &lt;span style=""&gt;    &lt;/span&gt;ar &lt;span style=""&gt;   &lt;/span&gt;y &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;boosn &lt;span style=""&gt; &lt;/span&gt;b &lt;span style=""&gt;    &lt;/span&gt;oos &lt;span style=""&gt;  &lt;/span&gt;n &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;chisn &lt;span style=""&gt; &lt;/span&gt;ch &lt;span style=""&gt;   &lt;/span&gt;is &lt;span style=""&gt;   &lt;/span&gt;n &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;hai &lt;span style=""&gt;         &lt;/span&gt;h &lt;span style=""&gt;    &lt;/span&gt;a &lt;span style=""&gt;    &lt;/span&gt;i &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;khoong &lt;span style=""&gt;      &lt;/span&gt;kh &lt;span style=""&gt;   &lt;/span&gt;oo &lt;span style=""&gt;   &lt;/span&gt;ng &lt;span style=""&gt;   &lt;/span&gt;sp&lt;br /&gt;moojt &lt;span style=""&gt; &lt;/span&gt;m &lt;span style=""&gt;    &lt;/span&gt;ooj &lt;span style=""&gt;  &lt;/span&gt;t &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;nawm &lt;span style=""&gt;  &lt;/span&gt;n &lt;span style=""&gt;    &lt;/span&gt;aw &lt;span style=""&gt;   &lt;/span&gt;m &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;sasu &lt;span style=""&gt;  &lt;/span&gt;s &lt;span style=""&gt;    &lt;/span&gt;as &lt;span style=""&gt;   &lt;/span&gt;u &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;tasm &lt;span style=""&gt;  &lt;/span&gt;t &lt;span style=""&gt;    &lt;/span&gt;as &lt;span style=""&gt;   &lt;/span&gt;m &lt;span style=""&gt;    &lt;/span&gt;sp&lt;br /&gt;silence &lt;span style=""&gt;     &lt;/span&gt;sil&lt;span class="BlockQuotationChar"&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;i style=""&gt;Lưu ý có phone sp (short pause) trong từ điển.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Đối với bộ từ vựng nhỏ thì tốt nhất là gõ tay hoặc copy từ bộ từ điển có sẵn.&lt;br /&gt;Sau khi có từ điển thì chúng ta có thể tạo ra bộ phiên âm, gọi là monophones0&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;HDMan -m -w txt/wlist -n ph/monophones -l dlog txt/dict txt/dict.dct&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;span class="Heading4Char"&gt;&lt;span style="font-size: 11pt;"&gt;Giải thích&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;wlist&lt;/b&gt;: đầ&lt;span style=""&gt;u vào, đ&lt;/span&gt;ơ&lt;span style=""&gt;n gi&lt;/span&gt;ả&lt;span style=""&gt;n là danh sách các t&lt;/span&gt;ừ&lt;span style=""&gt; đ&lt;/span&gt;ượ&lt;span style=""&gt;c s&lt;/span&gt;ử&lt;span style=""&gt; d&lt;/span&gt;ụ&lt;span style=""&gt;ng trong wordnet, m&lt;/span&gt;ỗ&lt;span style=""&gt;i t&lt;/span&gt;ừ&lt;span style=""&gt; m&lt;/span&gt;ộ&lt;span style=""&gt;t dòng. wlist v&lt;/span&gt;ẫ&lt;span style=""&gt;n ch&lt;/span&gt;ư&lt;span style=""&gt;a có cho đ&lt;/span&gt;ế&lt;span style=""&gt;n khi ta đ&lt;/span&gt;ế&lt;span style=""&gt;n b&lt;/span&gt;ướ&lt;span style=""&gt;c này. Đ&lt;/span&gt;ể&lt;span style=""&gt; t&lt;/span&gt;ạ&lt;span style=""&gt;o wlist, ta c&lt;/span&gt;ầ&lt;span style=""&gt;n có prompts. Prompts là gì ? Đây là m&lt;/span&gt;ộ&lt;span style=""&gt;t t&lt;/span&gt;ậ&lt;span style=""&gt;p tin ch&lt;/span&gt;ứ&lt;span style=""&gt;a các đo&lt;/span&gt;ạ&lt;span style=""&gt;n text yêu c&lt;/span&gt;ầ&lt;span style=""&gt;u utterance đ&lt;/span&gt;ọ&lt;span style=""&gt;c vào. Utterance ph&lt;/span&gt;ả&lt;span style=""&gt;i đ&lt;/span&gt;ọ&lt;span style=""&gt;c t&lt;/span&gt;ừ&lt;span style=""&gt;ng câu trong prompts và l&lt;/span&gt;ư&lt;span style=""&gt;u vào file .wav có tên t&lt;/span&gt;ươ&lt;span style=""&gt;ng &lt;/span&gt;ứ&lt;span style=""&gt;ng.&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;&lt;b style=""&gt;T&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;ạ&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;o &lt;/span&gt;Prompts&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt;C:\&gt;HSGen.exe -l -n 10 txt/wdnet.txt txt/dict.dct &gt;&gt; txt/prompts&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;&lt;span style="font-family: Arial;"&gt;Ở&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt; đây ta t&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ạ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;o t&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ậ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;p tin prompt có t&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ấ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;t c&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ả&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt; 10 câu.&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;#prompts&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;001 bary chisn chisn hai boosn moojt khoong&lt;br /&gt;002 khoong boosn tasm bary bary nawm khoong&lt;br /&gt;003 ba nawm moojt chisn sasu bary khoong&lt;br /&gt;004 bary boosn bary tasm nawm sasu nawm&lt;br /&gt;005 bary nawm ba chisn boosn chisn nawm&lt;br /&gt;006 bary boosn boosn khoong moojt tasm nawm&lt;br /&gt;007 moojt hai bary moojt bary tasm khoong&lt;br /&gt;008 khoong boosn hai bary sasu bary nawm&lt;br /&gt;009 moojt ba ba hai chisn nawm nawm&lt;br /&gt;010 tasm nawm sasu tasm bary bary nawm&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;Sau khi đã t&lt;span style="font-family: Arial;"&gt;ạ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;o prompts thì ta s&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ẽ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt; t&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ạ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;o đ&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ượ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;c wlist b&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ằ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;ng Perl script nh&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ư&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt; sau:&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; perl pl/prompts2wlist.pl txt/prompts txt/wlist&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;Nh&lt;span style="font-family: Arial;"&gt;ư&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt; v&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ậ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;y ta đã có wlist, có c&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ấ&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt;u trúc nh&lt;/span&gt;&lt;span style="font-family: Arial;"&gt;ư&lt;/span&gt;&lt;span style="font-family: &amp;quot;Arial Narrow&amp;quot;;"&gt; sau:&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;#wlist&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;ba&lt;br /&gt;bary&lt;br /&gt;boosn&lt;br /&gt;chisn&lt;br /&gt;hai&lt;br /&gt;khoong&lt;br /&gt;khoong&lt;br /&gt;moojt&lt;br /&gt;nawm&lt;br /&gt;sasu&lt;br /&gt;tasm&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;monophones1&lt;/b&gt;: đầu ra, danh sách các phones được dùng để phiên âm trong từ điển.&lt;br /&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#monophones1&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;sil&lt;br /&gt;b&lt;br /&gt;a&lt;br /&gt;sp&lt;br /&gt;ar&lt;br /&gt;y&lt;br /&gt;oos&lt;br /&gt;n&lt;br /&gt;ch&lt;br /&gt;is&lt;br /&gt;h&lt;br /&gt;i&lt;br /&gt;kh&lt;br /&gt;oo&lt;br /&gt;ng&lt;br /&gt;m&lt;br /&gt;ooj&lt;br /&gt;t&lt;br /&gt;aw&lt;br /&gt;s&lt;br /&gt;as&lt;br /&gt;u&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;beep&lt;/b&gt;: Đầu vào, từ điển phiên âm.&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;names&lt;/b&gt;: Đầu vào, từ điển tên riêng (tùy chọn).&lt;br /&gt;&lt;b style=""&gt;dict&lt;/b&gt;: Đầu ra, từ điển mới được tạo, tổng hợp từ beep. names và wlist.&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Lưu ý&lt;/i&gt;&lt;/b&gt;: &lt;i style=""&gt;Nếu beep có silence thì HDMan sẽ bỏ silence đi, làm cho dict mới bị thiếu silence. Vì sao ? Bởi vì HDMan sẽ tìm trong tất cả các từ trong beep mà nó có trong wlist. Mà wlist lại được tạo từ prompts. Prompts không chứa silence. Do đó, wlist, và hầu quả là, dict mới tạo cũng không chứa silence. Tốt nhất là ta cứ tạo dict cho có hình thức, nhưng không dùng. Ta chỉ dùng monophones0 mà nó tạo ra. Ở các bước sau ta chỉ dùng beep thôi. Nhưng nếu beep thực sự quá lớn trong khi wlist lại nhỏ, ta hiệu chỉnh lại dict để dùng. Việc hiệu chỉnh rất đơn giản, chỉ cần thêm silence – sil là được. Việc này được tự động hóa bằng Perl script.&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Thêm nữa, việc đặt tên monophones0 hay monophones1 trong dòng tham số lệnh là không quan trọng. Dù thế nào thì sau khi tạo, monophones# sẽ luôn có âm sp và thiếu sil. Thêm sil và giữ nguyên sp thì có được monophones1.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Thêm sil và xóa sp thì có được monophones0.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt;perl pl/mkMonophones.pl ph/monophones ph/monophones0 ph/monophones1&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Giải thích&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;createMonophones.pl&lt;/b&gt;: Đầu vào, perl script.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;monophones&lt;/b&gt;: Đầu vào, tập tin monophones sau được tạo ở HDMan.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;monophones0&lt;/b&gt;: Đầu ra, tập tin monophones0 sau khi hiệu chỉnh.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;monophones1&lt;/b&gt;: Đầu ra, tập tin monophones0 sau khi hiệu chỉnh.&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;br /&gt;&lt;span class="Heading2Char"&gt;&lt;span style="font-size: 11pt;"&gt;3.Thu dữ liệu&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Bước này bao gồm các công việc sau:&lt;/p&gt;  &lt;p class="MsoListNumber"&gt;&lt;!--[if !supportLists]--&gt;&lt;span class="ListBulletChar"&gt;&lt;span style="font-size: 9pt; font-family: &amp;quot;Arial Black&amp;quot;;"&gt;&lt;span style=""&gt;1)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span class="ListBulletChar"&gt;&lt;span style=""&gt;Thu âm giọng đọc lưu trữ thành các tập tin .wav.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoListNumber"&gt;&lt;!--[if !supportLists]--&gt;&lt;span class="ListBulletChar"&gt;&lt;span style="font-size: 9pt; font-family: &amp;quot;Arial Black&amp;quot;;"&gt;&lt;span style=""&gt;2)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;&lt;span class="ListBulletChar"&gt;&lt;span style=""&gt;Viết tập tin transcript tương ứng với mỗi file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;hoặc:&lt;/p&gt;  &lt;p class="MsoListNumber" style=""&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 9pt; font-family: &amp;quot;Arial Black&amp;quot;;"&gt;&lt;span style=""&gt;1)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Tạo tập tin transcript (đã được tạo tự động bằng HSGen trong bước trước, chính là tập tin prompts).&lt;/p&gt;  &lt;p class="MsoListNumber" style="text-align: left;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 9pt; font-family: &amp;quot;Arial Black&amp;quot;;"&gt;&lt;span style=""&gt;2)&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Thu âm giọng đọc lưu trữ thành các tập tin .wav bằng cách đọc theo transcription trong tập tin prompts.&lt;br /&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;Như vậy ta có tất cả 2 cách thu dữ liệu:&lt;/p&gt;  &lt;p class="MsoListBullet"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 8pt; font-family: Wingdings;"&gt;&lt;span style=""&gt;n&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Tự động tạo prompts và ghi âm theo.&lt;/p&gt;  &lt;p class="MsoListBullet" style="text-align: left;" align="left"&gt;&lt;!--[if !supportLists]--&gt;&lt;span style="font-size: 8pt; font-family: Wingdings;"&gt;&lt;span style=""&gt;n&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"&gt;        &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;!--[endif]--&gt;Ghi âm và tạo prompts sau.&lt;br /&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;span class="Heading2Char"&gt;&lt;span style="font-size: 11pt;"&gt;4.Tạo tập tin transcription&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;HTK không sử dụng file prompts cho xử lý sau này. Ta cần tạo ra một số file khác, cụ thể là dạng file MLF (Master Label File, tham khảo thêm trong HTK Book).&lt;br /&gt;&lt;br /&gt;Có hai loại tập tin MLF cần tạo ra:&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;b style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;MLF ở mức từ (word), tức là tập tin words.mlf định dạng tập tin prompts theo chuẩn MLF:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: Arial;"&gt;//words.mlf&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#!MLF!#&lt;br /&gt;"*/001.lab"&lt;br /&gt;bary&lt;br /&gt;chisn&lt;br /&gt;chisn&lt;br /&gt;hai&lt;br /&gt;boosn&lt;br /&gt;moojt&lt;br /&gt;khoong&lt;br /&gt;.&lt;br /&gt;"*/002.lab"&lt;br /&gt;khoong&lt;br /&gt;boosn&lt;br /&gt;tasm&lt;br /&gt;bary&lt;br /&gt;bary&lt;br /&gt;nawm&lt;br /&gt;khoong&lt;br /&gt;................&lt;span class="BlockQuotationChar"&gt;&lt;span style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;br /&gt;Làm sao tạo ?&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; Perl pl/prompts2mlf.pl mlf/words.mlf txt/prompts&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;MLF ở mức âm (phones), tức là định dạng tập tin phones0.mlf và phones1.mlf theo MLF:&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;//phones1.mlf&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;"*/002.lab"&lt;br /&gt;sil&lt;br /&gt;kh&lt;br /&gt;oo&lt;br /&gt;ng&lt;br /&gt;b&lt;br /&gt;oos&lt;br /&gt;n&lt;br /&gt;t&lt;br /&gt;as&lt;br /&gt;m&lt;br /&gt;b&lt;br /&gt;ar&lt;br /&gt;y&lt;br /&gt;b&lt;br /&gt;ar&lt;br /&gt;y&lt;br /&gt;n&lt;br /&gt;aw&lt;br /&gt;m&lt;br /&gt;kh&lt;br /&gt;oo&lt;br /&gt;ng&lt;br /&gt;sil&lt;br /&gt;.&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;i style=""&gt;Thực ra, phones#.mlf là dạng khai triển của words.mlf ở mức âm.&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Làm sao tạo?&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HLEd -l * -d txt/dict.dct -i mlf/phones0.mlf ins/mkphones0.led mlf/words.mlf&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;-d dict&lt;/b&gt;: đầu vào, từ điển ta đã có từ trước.&lt;br /&gt;&lt;b style=""&gt;words.mlf&lt;/b&gt;: đầu vào, vừa được tạo ở trên.&lt;br /&gt;&lt;b style=""&gt;-i phones0.mlf&lt;/b&gt;: đầu ra.&lt;br /&gt;&lt;b style=""&gt;mkphones0.led&lt;/b&gt;: chứa các lệnh script để chuyển words.mlf thành phones0.mlf&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;#mkphones0.led&lt;br /&gt;EX&lt;br /&gt;IS sil sil&lt;br /&gt;DE sp&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;br /&gt;&lt;b style=""&gt;EX&lt;/b&gt;: Thay thế mỗi từ trong words.mlf bằng phiên âm tương ứng trong từ điển dict.&lt;br /&gt;&lt;b style=""&gt;IS&lt;/b&gt;: Chèn mô hình lặng (silence - sil) vào đầu và cuối của một từ.&lt;br /&gt;&lt;b style=""&gt;DE&lt;/b&gt;: Xóa tất cả các short pause (sp) được thêm vào sau lệnh EX.&lt;br /&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;Tạo phones1.mlf&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Vì sao lại cần phones0.mlf và phones1.mlf ? Ai mà biết HTK muốn gì ! Nhưng đại khái là phones0.mlf không chứa âm sp, còn phones1.mlf thì có. Thêm sp vào chắc với mục đích tăng tính hiệu quả cho quá trình nhận dạng sau này.&lt;br /&gt;&lt;br /&gt;Cách tạo phones1.mlf ?&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HLEd -l * -d txt/dict.dct -i mlf/phones1.mlf ins/mkphones1.led mlf/words.mlf&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;-d dict&lt;/b&gt;: đầu vào, từ điển ta đã có từ trước.&lt;br /&gt;&lt;b style=""&gt;words.mlf&lt;/b&gt;: đầu vào, vừa được tạo ở trên.&lt;br /&gt;&lt;b style=""&gt;-i phones1.mlf&lt;/b&gt;: đầu ra.&lt;br /&gt;&lt;b style=""&gt;mkphones1.led&lt;/b&gt;: chứa các lệnh script để chuyển words.mlf thành phones1.mlf&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;//mkphones1.led&lt;br /&gt;EX&lt;br /&gt;IS sil sil&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Nhận xét&lt;/i&gt;&lt;/b&gt;: &lt;i style=""&gt;phones1.mlf được tạo đơn giản bằng cách bỏ lệnh xóa sp trong mkphones1.led&lt;/i&gt;.&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;br /&gt;&lt;span class="Heading2Char"&gt;&lt;span style="font-size: 11pt;"&gt;5.Mã hóa dữ liệu&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Tại bước này, các file âm thanh mà ta đã thu ở bước 3 sẽ được rút đặc trưng. HTK hỗ trợ 2 dạng đặc trưng MFCC và LPC. MFCC nên được sử dụng vì nó tốt hơn (không tin thì thử LPC xem). Các thông tin cấu hình khác được lưu trong tập tin cấu hình config_HCopy.txt:&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;#config_HCopy.txt&lt;br /&gt;#coding parameters - HCopy&lt;br /&gt;SOURCEKIND = WAVEFORM&lt;br /&gt;SOURCEFORMAT = WAV&lt;br /&gt;TARGETKIND = MFCC_0_D_A&lt;br /&gt;TARGETRATE = 100000.0&lt;br /&gt;SAVECOMPRESSED = T&lt;br /&gt;SAVEWITHCRC = T&lt;br /&gt;WINDOWSIZE = 250000.0&lt;br /&gt;USEHAMMING = T&lt;br /&gt;PREEMCOEF = 0.97&lt;br /&gt;NUMCHANS = 26&lt;br /&gt;CEPLIFTER = 22&lt;br /&gt;NUMCEPS = 12&lt;br /&gt;ENORMALISE = F&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt;HCopy -T 1 -C cfg/HCopy.cfg -S txt/listwavmfc&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b style=""&gt;-S listwavmfc&lt;/b&gt;: Đầu vào, chứa danh sách file wave - file mfc tương ứng.&lt;br /&gt; &lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt; &lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Làm sao t&lt;/b&gt;&lt;b style=""&gt;&lt;span style=""&gt;ạ&lt;/span&gt;&lt;/b&gt;&lt;b style=""&gt;&lt;span style=""&gt;o ?&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:&gt;perl pl/listwavmfc.pl wave txt/listwavmfc&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="font-family: Arial;"&gt;Giải thích&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;listwavmfc.pl&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Tập tin script.&lt;br /&gt;&lt;b style=""&gt;Wave&lt;/b&gt;: Đầu vào, thư mục chứa các tập tin .wav, ở đây giả sử là nằm ở thư mục C:\.&lt;br /&gt;&lt;b style=""&gt;listwavmfc&lt;/b&gt;: Đầu ra, tập tin text chứa danh sách file wave.&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;div style="border-style: solid none solid solid; border-color: white -moz-use-text-color white white; border-width: 6pt medium 1pt 1pt; padding: 3pt 0in 3pt 3pt; background: black none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 6pt; margin-right: 0in; color: rgb(255, 255, 255); font-weight: bold;"&gt;  &lt;p class="SectionHeading" style="background: black none repeat scroll 0%; margin-left: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-size:180%;"&gt;Tạo monophone HMMs&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText" style="text-align: left;" align="left"&gt;Ở giai đoạn này, chúng ta sẽ tạo và huấn luyện cho monophones HMM xấp xỉ bằng một hàm Gauss. Đầu tiên, tất cả các xấp xỉ của các âm đều có hàm Gauss như nhau (kỳ vọng và phương sai). Sau khi được huấn luyện, âm sp và silence lần lượt được thêm vào. Cuối cùng, chúng được huấn luyện lại.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;1.Tạo Flat Start Monophones&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Tại bước này, chúng ta sẽ định nghĩa ra một “đề cương” cho HMM (chữ đề cương “dịch ” từ chữ prototype). Việc gán thông tin nào cho prototype là không quan trọng, chủ yếu là xây dựng một cái khung. Một mô hình tốt mà HTK Book đề xuất là mô hình 3 trạng thái trái – giữa – phải tuần tự.&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: center;" align="center"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_i1025" type="#_x0000_t75" style="'width:143.25pt;" bordertopcolor="this" borderleftcolor="this" borderbottomcolor="this" borderrightcolor="this"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1.718\LOCALS~1\Temp\msohtml1\01\clip_image001.png" title=""&gt;  &lt;w:bordertop type="single" width="4"&gt;  &lt;w:borderleft type="single" width="4"&gt;  &lt;w:borderbottom type="single" width="4"&gt;  &lt;w:borderright type="single" width="4"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#proto&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;~o &lt;vecsize&gt; 39 &lt;mfcc_0_d_a&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;~h "proto"&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;beginhmm&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;numstates&gt; 5&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;state&gt; 2&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;mean&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;variance&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;state&gt; 3&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;mean&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;variance&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;state&gt; 4&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;mean&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;variance&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;transp&gt; 5&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;0.0&lt;span style=""&gt;          &lt;/span&gt;1.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;0.0&lt;span style=""&gt;          &lt;/span&gt;0.6&lt;span style=""&gt;         &lt;/span&gt;0.4&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;0.0&lt;span style=""&gt;          &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.6&lt;span style=""&gt;         &lt;/span&gt;0.4&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;0.0&lt;span style=""&gt;          &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.7&lt;span style=""&gt;         &lt;/span&gt;0.3&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;0.0&lt;span style=""&gt;          &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;span style=""&gt;         &lt;/span&gt;0.0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;endhmm&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích thêm&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Số chiều Vector đặc trưng&lt;span style=""&gt;  &lt;/span&gt;MFCC_0_D_A là 39 = 13 tĩnh (MFCC_0) + 13 hệ số delta + 13 hệ số acceleration.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Tuy là có 5 trạng thái nhưng 2 trạng thái đầu và cuối không xét.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Các vector kỳ vọng (mean) và phương sai (variance) đều bằng nhau.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Ma trận xác suất chuyển được khởi tạo theo kinh nghiệm.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;1.1.Làm sao tạo proto?&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;HCompV –C cfg/HCompV.cfg –f 0.01 –m –S txt/train.scp –M hmm0 hmm0/proto&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-C HCompV.cfg&lt;/b&gt;: Đầu vào, tập tin cấu hình để HCompV tham khảo, có nội dung như sau:&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#HCompV.cfg&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;TARGETKIND = MFCC_0_D_A&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;TARGETRATE = 100000.0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;SAVECOMPRESSED = T&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;SAVEWITHCRC = T&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;WINDOWSIZE = 250000.0&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;USEHAMMING = T&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;PREEMCOEF = 0.97&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;NUMCHANS = 26&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;CEPLIFTER = 22&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;NUMCEPS = 12&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;ENORMALISE = F&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-f 0.01&lt;/b&gt;: Tham số đầu vào, yêu cầu xuất file vFloor chứa vector floor có giá trị bằng 0.01 vector variance.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-S train.scp&lt;/b&gt;: Đầu vào, chứa danh sách các tập tin đặc trưng mfc. Cách đơn giản để tạo file train.scp là dùng lệnh dir của hệ thống (có thể dùng Perl).&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;Làm sao?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\Wave&gt;dir /B *.mfc &gt; ../train.scp&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: Arial;"&gt;Hoặc&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;dir /B Wave\*.mfc &gt; train.scp&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: Arial;"&gt;Tuy nhiên ta phải điều chỉnh tập tin train.scp bằng tay để thêm đường dẫn tuyệt đối cho từng tập tin .mfc được liệt kê trong đó. Ta có thể tránh điều này bằng cách sử dụng Perl script:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;perl pl/mkTrainFile.pl wave txt/train.scp&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;i style=""&gt;&lt;span style="font-family: Arial;"&gt;Giải thích&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;CreateTrainFile.pl&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Đầu vào, file script Perl.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;Wave&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Đầu vào, thư mục chứa các tập tin .mfc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;train.scp&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Đầu ra, tên tập tin chứa danh sách file .mfc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-M hmm0&lt;/b&gt;: Đầu vào, thư mục mà HCompV sẽ dùng để chứa proto (phải được tạo trước).&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Hmm0/proto.txt&lt;/b&gt;: Đầu vào, tập tin chứa cấu trúc proto như phần trên đã trình bày (nhớ là lưu trong thư mục hmm0).&lt;/p&gt;  &lt;h2&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/h2&gt;  &lt;h2&gt;1.2.&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Sau khi chạy HCompV, hai tập tin proto và vFloors được tạo ra trong thư mục hmm0. Thông thường, tiết mục tiếp theo là “cắt may” thủ công tập tin hmmdefs từ proto và monophones0. Tuy nhiên, chúng ta có script để tự động hóa chuyện này.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Tạo macros tự động&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;perl pl/mkMacrosFile.pl hmm0/vFloors hmm0/macros&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;createMacrosFile.pl&lt;/b&gt;: Đầu vào, perl script.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;hmm0/vFloors&lt;/b&gt;: Đầu vào, file vFloors được tạo từ lệnh HCompV ở trên.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;hmm0/macros&lt;/b&gt;: Đầu ra, file macros cần tạo.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Tạo hmmdefs tự động&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt;perl pl/mkHmmdefsFile.pl hmm0/proto ph/monophones0 hmm0/hmmdefs&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;createHmmdefsFile.pl&lt;/b&gt;: Đầu vào, perl script;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;hmm0/proto&lt;/b&gt;: Đầu vào, tập tin proto có được từ bước trước.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;monophones0&lt;/b&gt;: Đầu vào, tập tin monophones0 có từ bước .&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;hmm0/hmmdefs&lt;/b&gt;: Đầu ra, tên tập tin hmm.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Sau khi đã có được hmmdefs và macros, chúng ta sử dụng HERest để tái ước lượng các tham số trong hmmdefs. Vì sao phải ước lượng lại ? Cần nhớ là khi ta tạo tập tin hmmdefs ở trên, mô hình xấp xỉ Gauss là như nhau cho mọi phones (mean và variance đều giống nhau và giống mô hình trong file proto). Với HERest, nó sẽ sử dụng thông tin trong các tập tin đặc trưng .mfc để ước lượng lại thông số hàm xấp xỉ.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;&lt;span style=""&gt;C:\&gt; HERest -C cfg/HERest.cfg -I mlf/phones0.mlf -t 250.0 150.0 1000.0&lt;span style=""&gt;  &lt;/span&gt;-S txt/train.scp -H hmm0/macros -H hmm0/hmmdefs -M hmm1 ph/monophones0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-C HERest.cfg&lt;/b&gt;: Đầu vào, tập tin cấu hình&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#HERest.cfg&lt;span style=""&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;# Coding parameters&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;TARGETKIND = MFCC_D_A_0&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;TARGETRATE = 100000.0&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;SAVECOMPRESSED = T&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;SAVEWITHCRC = T&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;WINDOWSIZE = 250000.0&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;USEHAMMING = T&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;PREEMCOEF = 0.97&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;NUMCHANS = 26&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;CEPLIFTER = 22&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;NUMCEPS = 12&lt;/p&gt;  &lt;p class="StyleBlockQuotationCourierNewNotExpandedbyCondensedby" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;ENORMALISE = F&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoNormal" style="margin-left: 0in;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; letter-spacing: 0pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-I mlf/phones0.mlf&lt;/b&gt;: Đầu vào, tập tin MLF được tạo từ trước.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-t 250.0 150.0 1000.0&lt;/b&gt;: Đầu vào, tham số prunning.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-S txt/train.scp&lt;/b&gt;: Đầu vào, danh sách các file .mfc.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-H hmm0/macros&lt;/b&gt;: Đầu vào, vừa tạo.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-H hmm0/hmmdefs&lt;/b&gt;: Đầu vào, vừa tạo.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-M hmm1&lt;/b&gt;: Đầu ra, chứa tập tin hmmdefs và macros mới.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;ph/monophones0&lt;/b&gt;: Đầu vào, danh sách các phones (ngoại trừ sp).&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Sau khi đã có hmm1, ta huấn luyện tiếp hmm2 và hmm3 bằng HERest&lt;/b&gt;. Lưu ý là khi huấn luyện hmm2 thì hmmdefs và macros là của hmm1, tương tự như vậy với hmm3, là các file của hmm2.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;2.Fixing the Silence Models&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText" style="text-align: center;" align="center"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1026" type="#_x0000_t75" style="'width:192.75pt;height:182.25pt'" bordertopcolor="this" borderleftcolor="this" borderbottomcolor="this" borderrightcolor="this"&gt;  &lt;v:imagedata src="file:///C:\DOCUME~1\ADMINI~1.718\LOCALS~1\Temp\msohtml1\01\clip_image003.emz" title=""&gt;  &lt;w:bordertop type="single" width="4"&gt;  &lt;w:borderleft type="single" width="4"&gt;  &lt;w:borderbottom type="single" width="4"&gt;  &lt;w:borderright type="single" width="4"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Bước này thêm vào mô hình silence hai bước chuyển từ trạng thái 2 đến trạng thái 4 và ngược lại (như hình). Mô hình short pause (sp) cũng được thêm vào trạng thái trung tâm của mô hình sil. Vì sao làm vậy và tác dụng ra sao thì chưa được rõ. &lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Có hai bước nhỏ phải thực hiện:&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Thêm mô hình sp vào hmmdefs4&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;perl pl/makesp.pl hmm3/hmmdefs hmm4/hmmdefs hmm3/macros hmm4/macros&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;Chạy HHEd để thực hiện việc “trói buộc” mô hình sil và sp với nhau, đồng thời thêm các xác suất chuyển cho mô hình sil.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HHEd -H hmm4/macros -H hmm4/hmmdefs -M hmm5 ins/sil.hed ph/monophones1&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Giải thích&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-H hmm4/macros&lt;/b&gt;: Đầu vào, tập tin macros trong hmm4.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-H hmm4/hmmdefs&lt;/b&gt;: Đầu vào, tập tin hmmdefs trong hmm4.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-M hmm5&lt;/b&gt;: Đầu ra hmm5.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;ph/monophones1&lt;/b&gt;: Đầu vào, tập tin sanh sách âm, có chứa sil và sp.&lt;span style="font-family: CMTT10;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;ins/sil.hed&lt;/b&gt;: Đầu vào, tập tin chứa lệnh điều chỉnh.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#sil.hed&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: CMTT10;"&gt;AT 2 4 0.2 {sil.transP}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: CMTT10;"&gt;AT 4 2 0.2 {sil.transP}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: CMTT10;"&gt;AT 1 3 0.3 {sp.transP}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: CMTT10;"&gt;TI silst {sil.state[3],sp.state[2]}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích lệnh&lt;/i&gt;&lt;/b&gt;&lt;i style=""&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;AT&lt;/b&gt;: thêm các xác suất dịch chuyển cho các dịch chuyển 2 – 4, 4 – 2 trong ma trận transition của mô hình sil (mở file hmm5/hmmdefs để kiểm chứng).&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#hmm5/hmmdefs&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;~h "sil"&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;beginhmm&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;numstates&gt; 5&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;state&gt; 2&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;mean&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;…&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;variance&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;…&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;gconst&gt; 5.238852e+001&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;state&gt; 3&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;~s "silst"&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;state&gt; 4&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;mean&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;…&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;variance&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;…&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;gconst&gt; 1.008743e+002&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;transp&gt; 5&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 1.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 7.391776e-001 6.082239e-002 &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;2.000000e-001&lt;/span&gt; 0.000000e+000&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 0.000000e+000 3.656323e-001 6.343677e-001 0.000000e+000&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;2.000000e-001&lt;/span&gt; 0.000000e+000 4.123393e-001 3.876607e-001&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000 0.000000e+000&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;endhmm&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;AT 1 3 0.3 {sp.transP}&lt;/b&gt;: thêm xác suất dịch chuyển 1 -3 cho mô hình sp.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#hmm5/hmmdefs&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;~h "sp"&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;beginhmm&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;numstates&gt; 3&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;state&gt; 2&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;~s "silst"&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;transp&gt; 3&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 7.000000e-001 &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;3.000000e-001&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 5.000000e-001 5.000000e-001&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;0.000000e+000 0.000000e+000 0.000000e+000&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;endhmm&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;Dễ thấy trạng thái 2 của sp cũng bị buộc với mô hình silst vừa mới tạo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;TI&lt;/b&gt;: thực hiện trói buộc sp và sil bằng silst, được lưu ở đầu file hmmdefs. Quan sát mô hình sil, có thể thấy trạng thái 3 liên kết với mô hình silst mới này.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#hmm5/hmmdefs&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;~s "silst"&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;mean&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;-1.233204e+001 9.116629e-001 3.020478e-001 2.393242e+000 3.001888e+000 3.456290e+000 3.706096e+000 2.861026e+000 6.466328e-001 9.644089e-001 7.715054e-001 6.577221e-001 7.104364e+001 -5.122911e-002 -2.084613e-002 2.598116e-001 -2.869415e-001 1.950579e-001 -3.822781e-002 -8.443902e-002 -1.072719e-001 -4.904599e-002 8.692242e-002 8.164209e-003 1.979581e-002 2.325216e-001 1.303717e-001 -4.080342e-002 4.128299e-002 -2.011553e-001 -7.077198e-002 -2.321420e-001 -9.913503e-002 -9.830537e-002 -1.752981e-001 -1.535826e-001 -1.363883e-001 -1.232475e-001 2.405691e-001&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;variance&gt; 39&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt; &lt;/span&gt;1.300436e+001 1.042869e+001 1.641352e+001 1.574066e+001 1.265830e+001 1.167596e+001 1.477261e+001 1.271613e+001 1.887716e+001 1.765516e+001 1.965426e+001 1.868261e+001 6.421104e+000 9.842667e-001 1.060887e+000 1.250746e+000 1.715912e+000 1.131693e+000 1.550215e+000 1.346661e+000 1.496958e+000 1.858089e+000 2.148503e+000 1.762000e+000 1.668207e+000 8.345646e-001 1.546411e-001 1.906256e-001 2.265411e-001 2.813516e-001 2.009885e-001 2.763181e-001 2.499908e-001 2.784255e-001 2.954797e-001 3.488080e-001 3.192161e-001 2.714097e-001 1.329405e-001&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;gconst&gt; 9.173016e+001&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;Ta nhận ra rằng silst đơn thuần là một hàm Gauss với mean và variance như trên.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Thực hiện HERest thêm 2 lần nữa để tạo ra hmm6 và hmm7.&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;3.Canh chỉnh lại dữ liệu huấn luyện&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Trong từ điển phát âm có một số từ có nhiều kiểu phát âm khác nhau. Ở bước trước, HLEd chọn tùy ý một trong các kiểu phát âm. Ở bước này, chúng ta sẽ canh chỉnh lại tập tin transcription words.mlf. Nó sẽ chọn cách phiên âm nào khớp nhất so với dữ liệu ngữ âm. Đồng thời, nó sẽ thêm mô hình silence vào đầu và cuối mỗi utterance. Nên nhớ ta phải có entry silence sil trong từ điển (Điều này đã được giải quyết từ bước trước, nếu không nhớ xem lại bước tạo từ điển).&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HVite -l * -o SWT -b silence -a -H hmm7/macros -H hmm7/hmmdefs -i mlf/aligned.mlf -m -t 250.0 -y lab &lt;span style=""&gt; &lt;/span&gt;-I mlf/words.mlf -S txt/train.scp txt/dict.dct ph/monophones1&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-b silence&lt;/b&gt;: Đầu vào, chèn thêm sil vào đầu và cuối utterance.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;HERest được thực hiện thêm 2 lần nữa để tạo hmm8 và hmm9.&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;&lt;span style=""&gt; &lt;/span&gt;Lưu ý là ta không dùng phones1.mlf nữa mà chuyển sang aligned.mlf.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HERest -B -C cfg/HERest.cfg -I mlf/aligned.mlf -t 250.0 150.0 1000.0 -s stats &lt;span style=""&gt; &lt;/span&gt;-S txt/train.scp -H hmm7/macros -H hmm7/hmmdefs -M hmm8 ph/monophones1&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HERest -B -C cfg/HERest.cfg -I mlf/aligned.mlf -t 250.0 150.0 1000.0 -s stats &lt;span style=""&gt; &lt;/span&gt;-S txt/train.scp -H hmm8/macros -H hmm8/hmmdefs -M hmm9 ph/monophones1&lt;/p&gt;  &lt;/div&gt;  &lt;div style="border-style: solid none solid solid; border-color: white -moz-use-text-color white white; border-width: 6pt medium 1pt 1pt; padding: 3pt 0in 3pt 3pt; background: black none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 6pt; margin-right: 0in; color: rgb(255, 255, 255);"&gt;  &lt;h1 style="background: black none repeat scroll 0%; margin-left: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Tạo triphones&lt;/h1&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;Giai đoạn cuối cùng trong việc xây dựng mô hình HMM là tạo các triphones phụ thuộc vào ngữ cảnh. Có hai bước nhỏ. Thứ nhất, monophones transcription (transcription đơn âm) được chuyển thành triphones transcription (transcription 3-âm). Các mô hình triphones được ước lượng lại từ mô hình monophones. Thứ hai, các trạng thái triphones được “tied” với nhau để quá trình ước lượng tốt hơn. Tied là gì ? Nhớ lại bước trước, khi mà ta thêm mô hình sp cho hmmdefs, tied (tạm dịch là trói buộc) nghĩa là 2 ay nhiều mô hình HMM sẽ dùng chung một bộ các tham số (mean hay variance chẳng hạn).&lt;/p&gt;  &lt;h2&gt;1.Tạo triphones từ monophones&lt;/h2&gt;  &lt;h2&gt;1.1&lt;/h2&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HLEd -n ph/triphones1 -l * -i mlf/wintri.mlf ins/mktri.led mlf/aligned.mlf&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Giải thích&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-n ph/triphones1&lt;/b&gt;: Đầu ra, danh sách các triphones.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-i mlf/wintri.mlf&lt;/b&gt;: Đầu ra, triphones transcription.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;mlf/aligned.mlf&lt;/b&gt;: Đầu vào, monophones transcription đã được ước lượng lại.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;ins/mktri.led&lt;/b&gt;: Đầu vào, chứa lệnh tạo triphones từ monophones.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;#mktri.led&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;WB sp&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;WB sil&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;TC&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Giải thích lệnh&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;WB&lt;/b&gt;: coi như sp và sil là những từ ở biên (word boundary symbol), và do đó, không chuyển chúng thành triphones.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;TC&lt;/b&gt;: chuyển tất cả các monophones thành triphones trừ các WB. Một điều đáng lưu ý là cũng có các biphones được tạo ra trong quá trình này, bởi vì chúng có một bên nằm sát biên. Xem xét ví dụ sau để hiểu rõ hơn:&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;sil&lt;/span&gt; th ih s &lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;sp&lt;/span&gt; m ae n &lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;sp&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;sil&lt;/span&gt; &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;th+ih&lt;/span&gt; &lt;span style="background: silver none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;th-ih+s&lt;/span&gt; &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;ih-s&lt;/span&gt; &lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;sp&lt;/span&gt;&lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt; m+ae&lt;/span&gt; &lt;span style="background: silver none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;m-ae+n&lt;/span&gt; &lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;ae-n&lt;/span&gt; &lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;sp&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="background: yellow none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;biphones&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="background: silver none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;triphones&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;word boundary symbol&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;Mô hình trên đây gọi là Word internal. Còn có hai mô hình nữa, chúng ta sẽ đề cập trong một dịp khác.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;1.2.&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Tiếp theo, chúng ta sẽ “nhái” mô hình monophones trong hmm9 thành triphones trong hmm10&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HHEd -B -H hmm9/macros -H hmm9/hmmdefs -M hmm10 ins/mktri.hed ph/monophones1&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Giải thích&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-H hmm9/macros -H hmm9/hmmdefs&lt;/b&gt;: Đầu vào, hmm của monophones.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-M hmm10&lt;/b&gt;: Đầu ra, hmm10 được huấn luyện thành triphones.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Ins/mktri.hed&lt;/b&gt;: Đầu vào, tập tin chứa lệnh thực hiện “trói buộc” các ma trận chuyển&lt;span style=""&gt;  &lt;/span&gt;của mỗi triphone trong tập tin triphones1.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-B&lt;/b&gt;: Đầu vào, lưu trữ hmmdefs ở dạng nhị phân thay vì text (giảm không gian chiếm dụng).&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;Làm sao tạo mktri.hed?&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;&lt;span style=""&gt;C:\&gt;perl pl/mkTriHed.pl ph/monophones1 ph/triphones1 ins/mktri.hed&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: Arial;"&gt;Lý giải cách làm việc của makeTriHed.pl (chưa có).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;Chúng ta sẽ nhận được một số WARNING về T_sil và T_sp. Không sao cả, chuyền này rất bình thường.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;h2&gt;1.3.&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Sau khi đã “nhái” xong, việc tiếp theo là tái ước lượng mô hình triphones này. Chúng ta cũng vẫn sử dụng HERest.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HERest -B -C cfg/HERest.cfg -I mlf/wintri.mlf -t 250.0 150.0 1000.0 -s stats &lt;span style=""&gt; &lt;/span&gt;-S txt/train.scp -H hmm10/macros -H hmm10/hmmdefs -M hmm11 ph/triphones1&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Thực hiện thêm một lần nữa để có hmm12.&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HERest -B -C cfg/HERest.cfg -I mlf/wintri.mlf -t 250.0 150.0 1000.0 -s stats &lt;span style=""&gt; &lt;/span&gt;-S txt/train.scp -H hmm11/macros -H hmm11/hmmdefs -M hmm12 ph/triphones1&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;2.Tạo trạng thái ràng buộc cho triphones (tied state triphones)&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Công việc cuối cùng trong việc xây dựng mô hình là ràng buộc các các trạng thái trong các tập triphones, từ đó chia sẻ dữ liệu trong từng tập và kết quả nhận dạng sẽ tốt hơn. Mặc dù bước trước đã ràng buộc, quá trình này đỏi hỏi phải tinh tế hơn một chút vì nó sẽ ảnh hưởng rất lớn đến hiệu suất nhận dạng. Ở bước này chúng ta sẽ sử dụng HHEd để gom nhóm (clusterring) các trạng thái và sau đó trói buộc các trạng thái trong cùng một nhóm với nhau. HHEd đưa ra hai tùy chọn : i) Dùng độ đo tính tương đồng giữa các trạng thái để gom nhóm (cách này gọi là hướng dữ liệu); ii) Dùng cây quyết định, dựa trên việc đưa ra các câu hỏi về trạng thái trái (left) và phải (right) của ngữ cảnh (context) của từng triphones. Cây quyết định sẽ thử tìm những ngữ cảnh (context) nào tạo ra sự khác biệt lớn nhất đối với ngữ âm và sử dụng nó để gom nhóm.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HHEd -B -H hmm12/macros -H hmm12/hmmdefs -M hmm13 ins/tree.hed ph/triphones1 &gt; log&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;Khoan thực hiện lệnh này, nó sẽ được thực hiện sau khi đọc toàn bộ.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Giải thích&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;tree.hed&lt;/b&gt;: là tập hợp các chỉ thị tìm kiếm các ngữ cảnh phù hợp cho việc gom nhóm. &lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;Hiểu &amp; dùng tập tin tree.hed&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: Arial;"&gt;Trong tree.hed có một số lệnh như: RO, TR, QS, TB, AU, CO, ST. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;RO 100.0&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Thiết lập ngưỡng ngoài là 100 (không hiểu: The outlier threshold determines the minimum occupancy of any cluster and prevents a single outlier state forming a singleton cluster just because it is acoustically very different to all the other states.) và nạp file thống kế stats đã tạo ở bước trước.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;TR 0&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Thiết lập trace về 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;QS *&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Nạp câu hỏi. QS (question) là do người dùng tự định nghĩa. Và định nghĩa thế nào cho hiệu quả là cả một vấn đề lớn. Perl script của ta chỉ thực hiện những việc thiết yếu đối với QS: QS cho ngữ cảnh Left và Right. Một hình dung dễ hiểu về QS là gì có thể thông qua ví dụ sau:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt;QS "L_Class-Stop" {p-*,b-*,t-*,d-*,k-*,g-*}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: Arial;"&gt;Mỗi QS (câu hỏi) được định nghĩa bằng một tập các ngữ cảnh theo sau nó, đặt trong hai dấu ngoặc nhọn. Câu hỏi “L_Class_Stop” sẽ TRUE nếu ngữ cảnh bên trái là p,b,t,d,k hoặc g.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style="font-family: Arial;"&gt;Các câu hỏi cụ thể hơn về consonant, vowel, nasal, diphthong,… có thể không cần nhưng nếu có sẽ tốt hơn.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;TR: .&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;TB&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: Hoạt động như sau: tất cả các triphones được cho chung vào một pool (đơn giản nghĩa là một chỗ chứa). Tất cả các QS lần lượt được nạp và được dùng để phân đôi pool này làm hai pool con. QS nào làm cực đại logarit likelihood của dữ liệu huấn luyện sẽ được chọn làm nhánh đầu tiên trong cây quyết định. Quá trình này được lặp lại cho đến khi với bất cứ QS nào, mức tăng log likelihood nhỏ hơn ngưỡng mà chúng ta qui định. Giá trị ngưỡng là con số đi theo sau TB &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;span style=""&gt;(VD: TB &lt;span style="background: lime none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;40&lt;/span&gt; "st_y_4_" {("y","*-y+*","y+*","*-y").state[4]}).&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;AU “fulllist”&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: tập tin chứa danh sách đầy đủ các phones: mono,bi và tri.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;b style=""&gt;&lt;span style="font-family: Arial;"&gt;CO “tiedlist”&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family: Arial;"&gt;: có một số mô hình sẽ giống nhau cả ba trạng thái và ma trận chuyển. Lệnh này tìm kiếm các mô hình giống nhau và nén lại bằng cách trói buộc chúng với nhau (khái niệm tie đã trình bày trước đây), tạo ra một danh sách mới các mô hình, lưu trữ trong tiedlist.&lt;/span&gt;&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;Như vậy, chúng ta phải tạo fulllist.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;perl pl/mkFullList.pl ph/monophones0&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;Tạo tập tin tree.hed&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;perl pl/mkTree.pl 40 ph/monophones0 ins/tree.hed&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Giải thích&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;40&lt;/b&gt;: ngưỡng qui định đối với TB, có thể thay đổi tùy ý.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;ins/tree.hed&lt;/b&gt;: Đầu ra, tập tin tree.hed cần tạo.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Đến đây thì ta có thể yên tâm thực hiện lệnh HHEd.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Ta tiếp tục chạy HERest thêm 2 lần nữa cho hmm14 và hmm15.&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt;HERest -B -C cfg/HERest.cfg -I mlf/wintri.mlf -t 250.0 150.0 1000.0 -s stats &lt;span style=""&gt; &lt;/span&gt;-S txt/train.scp -H hmm13/macros -H hmm13/hmmdefs -M hmm14 ph/triphones1&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt;HERest -B -C cfg/HERest.cfg -I mlf/wintri.mlf -t 250.0 150.0 1000.0 -s stats &lt;span style=""&gt; &lt;/span&gt;-S txt/train.scp -H hmm14/macros -H hmm14/hmmdefs -M hmm15 ph/triphones1&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div style="border-style: solid none solid solid; border-color: white -moz-use-text-color white white; border-width: 6pt medium 1pt 1pt; padding: 3pt 0in 3pt 3pt; background: black none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 6pt; margin-right: 0in; color: rgb(255, 255, 255);"&gt;  &lt;h1 style="background: black none repeat scroll 0%; margin-left: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Đánh giá nhận dạng&lt;/h1&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;Bộ nhận dạng bây giờ đã hoàn hoàn thành và có thể được sử dụng. Bao nhiêu công sức bỏ ra và bây giờ là giai đoạn đánh giá [^.^].&lt;/p&gt;  &lt;h2&gt;1.Nhận dạng dữ liệu test&lt;/h2&gt;  &lt;p class="MsoBodyText"&gt;Giả sử chúng ta muốn nhận dạng thử bộ dữ liệu gồm 10 utterances.&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; text-align: left; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;" align="left"&gt;C:\&gt; HVite –C cfg/Hvite.cfg -H hmm15/macros -H hmm15/hmmdefs -S test/test.scp -i test/recout.mlf -w txt/wdnet.txt txt/dict.dct tiedlist&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Giải thích&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;–C cfg/Hvite.cfg&lt;/b&gt;: Đầu vào, tập tin cấu hình.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-H hmm15/macros -H hmm15/hmmdefs&lt;/b&gt;: Đầu vào&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-S test/test.scp&lt;/b&gt;: Đầu vào, tập tin chứa danh sách các file .mfc cần nhận dạng.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-i test/recout.mlf&lt;/b&gt;: Đầu ra, transcription nhận dạng được.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;-w txt/wdnet.txt&lt;/b&gt;: Đầu vào, wordnet được tạo từ những bước đầu.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;txt/dict.dct&lt;/b&gt;: Đầu vào, từ điển phiên âm.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;tiedlist&lt;/b&gt;: Đầu vào, danh sách phones tạo được từ lệnh CO “tiedlist” trong tree.hed.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;b style=""&gt;Lưu ý&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;Với việc cấu tạo triphones theo kiểu word internal như đã nói phần trước, trong tập tin cấu hình Hvite.cfg cần có thêm 2 tham số FORCECXTEXP = T và ALLOWXWRDEXP=F. Muốn hiểu tại sao, xem chương 12 HTK Book.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;i style=""&gt;Có thêm một vài tham số của Hvite như p, s, tùy người dùng điều chỉnh.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;h2&gt;2.Xuất kết quả&lt;/h2&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\&gt;HResults –f –t -I mlf/words.mlf tiedlist test/recout.mlf &gt; test/result&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Kết quả nhận dạng 20 utterances đầu trong train.scp&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div style="border-style: solid; border-color: white; border-width: 1.5pt 1pt 1pt; padding: 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 0.95in; margin-right: 12pt;"&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;------------------------ Overall Results --------------------SENT: %Correct=40.00 [H=8, S=12, N=20]&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;WORD: %Corr=100.00, Acc=89.29 [H=140, D=0, S=0, I=15, N=140]&lt;/p&gt;  &lt;p class="BlockQuotation" style="margin: 0in 0in 12pt; background: rgb(242, 242, 242) none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;=============================================================&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoNormal"&gt;Kết quả không khả quan mấy, nhưng chạy được là tốt rồi.[^_^].&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div style="border-style: solid none solid solid; border-color: white -moz-use-text-color white white; border-width: 6pt medium 1pt 1pt; padding: 3pt 0in 3pt 3pt; background: black none repeat scroll 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 6pt; margin-right: 0in; color: rgb(255, 255, 255);"&gt;  &lt;h1 style="background: black none repeat scroll 0%; margin-left: 0in; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;Công việc tiếp theo&lt;/h1&gt;  &lt;/div&gt;  &lt;p class="MsoBodyText"&gt;Bước tiếp theo là tăng số hàm Gauss dùng để xấp xỉ mô hình HMM từ 1 lên 3, 5, 7,. Đọc Mixture Incrementing trong slide môn học.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Xa hơn là Adapting HMMs.&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;p class="MsoBodyText"&gt;Hy vọng hai chủ đề này sẽ sớm được cập nhật.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-5570911481533259750?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/5570911481533259750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=5570911481533259750' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5570911481533259750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/5570911481533259750'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2006/11/htk-training.html' title='HTK Training'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-823764342056310218</id><published>2006-11-22T22:45:00.000-08:00</published><updated>2006-11-22T22:55:19.246-08:00</updated><title type='text'>Inverse Polish notation</title><content type='html'>5 * ( ( ( 9 + 8 ) * ( 4 * 6 ) + 7)&lt;br /&gt;push(5)&lt;br /&gt;push(9)&lt;br /&gt;push(8)&lt;br /&gt;push(pop + pop)&lt;br /&gt;push(4)&lt;br /&gt;push(6)&lt;br /&gt;push(pop*pop)&lt;br /&gt;push(pop*pop)&lt;br /&gt;push(7)&lt;br /&gt;push(pop+pop)&lt;br /&gt;push(pop*pop)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----------------&lt;br /&gt;&lt;br /&gt;stackinit();&lt;br /&gt;repeat&lt;br /&gt;    repeat read(c) until c&lt;&gt;' ' ;&lt;br /&gt;   &lt;br /&gt;    if(c == ')') then write(chr(pop));&lt;br /&gt;    if(c == '+') then push(ord(pop));&lt;br /&gt;    if(c == '*') then push(ord(pop));&lt;br /&gt;    if(c == '/') then push(orf(pop));&lt;br /&gt;   &lt;br /&gt;    while(c&gt;='0' and c&lt;= '9') do&lt;br /&gt;    begin&lt;br /&gt;        write(c);&lt;br /&gt;        read(c);&lt;br /&gt;    end;&lt;br /&gt;  &lt;br /&gt;     if(c&lt;&gt;'(') then write(' ');&lt;br /&gt;untl eofn;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;repeat&lt;br /&gt;    c = 0;&lt;br /&gt;    repeat read(c) until c&lt;&gt; ' ';&lt;br /&gt;    if c == '*' then x = pop*pop;&lt;br /&gt;    if c == '+' then x = pop + pop;&lt;br /&gt;    while c&gt;= '0' and c &lt;= '9' do&lt;br /&gt;    begin&lt;br /&gt;        x = 10*x + ord(c) - ord('0');&lt;br /&gt;        read(c);&lt;br /&gt;    end;&lt;br /&gt;    push(x);&lt;br /&gt;until eoln;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-823764342056310218?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/823764342056310218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=823764342056310218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/823764342056310218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/823764342056310218'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2006/11/inverse-polish-notation.html' title='Inverse Polish notation'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-3716552424903284175</id><published>2006-11-17T05:16:00.000-08:00</published><updated>2006-11-17T05:17:45.744-08:00</updated><title type='text'>The Wavelet Tutorial IV</title><content type='html'>&lt;p style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; font-variant: small-caps;"&gt;The Wavelet Tutorial&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 24pt; font-variant: small-caps;"&gt;Part IV&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="font-size: 24pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b style=""&gt;&lt;span style="font-size: 20pt;"&gt;&lt;br /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 20pt;"&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shapetype id="_x0000_t75" coordsize="21600,21600" spt="75" preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"&gt;  &lt;v:stroke joinstyle="miter"&gt;  &lt;v:formulas&gt;   &lt;v:f eqn="if lineDrawn pixelLineWidth 0"&gt;   &lt;v:f eqn="sum @0 1 0"&gt;   &lt;v:f eqn="sum 0 0 @1"&gt;   &lt;v:f eqn="prod @2 1 2"&gt;   &lt;v:f eqn="prod @3 21600 pixelWidth"&gt;   &lt;v:f eqn="prod @3 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @0 0 1"&gt;   &lt;v:f eqn="prod @6 1 2"&gt;   &lt;v:f eqn="prod @7 21600 pixelWidth"&gt;   &lt;v:f eqn="sum @8 21600 0"&gt;   &lt;v:f eqn="prod @7 21600 pixelHeight"&gt;   &lt;v:f eqn="sum @10 21600 0"&gt;  &lt;/v:formulas&gt;  &lt;v:path extrusionok="f" gradientshapeok="t" connecttype="rect"&gt;  &lt;o:lock ext="edit" aspectratio="t"&gt; &lt;/v:shapetype&gt;&lt;v:shape id="_x0000_s1028" type="#_x0000_t75" style="'width:393pt;" fillcolor="#0c9"&gt;  &lt;v:imagedata src="WTpart4_files/image002.png" title="" croptop="4083f" cropbottom="4977f" cropright="19333f"&gt;  &lt;w:wrap type="none"&gt;  &lt;w:anchorlock/&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="http://users.rowan.edu/%7Epolikar/WAVELETS/WTpart4_files/image003.jpg" shapes="_x0000_s1028" height="544" width="524" /&gt;&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;span style="font-size: 20pt;"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Why is the Discrete Wavelet Transform Needed? &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Although the discretized continuous wavelet transform enables the computation of the continuous wavelet transform by computers, it is not a true discrete transform. As a matter of fact, the wavelet series is simply a sampled version of the CWT, and the information it provides is highly redundant as far as the reconstruction of the signal is concerned. This redundancy, on the other hand, requires a significant amount of computation time and resources. The discrete wavelet transform (DWT), on the other hand, provides sufficient information both for analysis and synthesis of the original signal, with a significant reduction in the computation time.&lt;/p&gt;  &lt;p&gt;The DWT is considerably easier to implement when compared to the CWT. The basic concepts of the DWT will be introduced in this section along with its properties and the algorithms used to compute it. As in the previous chapters, examples are provided to aid in the interpretation of the DWT.&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;THE DISCRETE WAVELET TRANSFORM (DWT) &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The foundations of the DWT go back to 1976 when &lt;span class="SpellE"&gt;Croiser&lt;/span&gt;, Esteban, and &lt;span class="SpellE"&gt;Galand&lt;/span&gt; devised a technique to decompose discrete time signals. &lt;span class="SpellE"&gt;Crochiere&lt;/span&gt;, Weber, and Flanagan did a similar work on coding of speech signals in the same year. They named their analysis scheme as &lt;span class="SpellE"&gt;&lt;b&gt;subband&lt;/b&gt;&lt;/span&gt;&lt;b&gt; coding&lt;/b&gt;. In 1983, Burt defined a technique very similar to &lt;span class="SpellE"&gt;subband&lt;/span&gt; coding and named it &lt;b&gt;pyramidal coding&lt;/b&gt; which is also known as multiresolution analysis. Later in 1989, &lt;span class="SpellE"&gt;Vetterli&lt;/span&gt; and Le Gall made some improvements to the &lt;span class="SpellE"&gt;subband&lt;/span&gt; coding scheme, removing the existing redundancy in the pyramidal coding scheme. &lt;span class="SpellE"&gt;Subband&lt;/span&gt; coding is explained below. A detailed coverage of the discrete wavelet transform and theory of multiresolution analysis can be found in a number of articles and books that are available on this topic, and it is beyond the scope of this tutorial. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;The &lt;span class="SpellE"&gt;Subband&lt;/span&gt; Coding and &lt;span class="GramE"&gt;The&lt;/span&gt; Multiresolution Analysis &lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;The main idea is the same as it is in the CWT. A time-scale representation of a digital signal is obtained using digital filtering techniques. Recall that the CWT is a correlation between a wavelet at different scales and the signal with the scale (or the frequency) being used as a measure of similarity. The continuous wavelet transform was computed by changing the scale of the analysis window, shifting the window in time, multiplying by the signal, and integrating over all times. In the discrete case, filters of different cutoff frequencies are used to analyze the signal at different scales. The signal is passed through a series of high pass filters to analyze the high frequencies, and it is passed through a series of low pass filters to analyze the low frequencies.&lt;/p&gt;  &lt;p&gt;The resolution of the signal, which is a measure of the amount of detail information in the signal, is changed by the filtering operations, and the scale is changed by upsampling and downsampling (&lt;span class="SpellE"&gt;subsampling&lt;/span&gt;) operations. &lt;span class="SpellE"&gt;Subsampling&lt;/span&gt; a signal corresponds to reducing the sampling rate, or removing some of the samples of the signal. For example, &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; by two refers to dropping every other sample of the signal. &lt;span class="SpellE"&gt;Subsampling&lt;/span&gt; by a factor &lt;i&gt;n&lt;/i&gt; reduces the number of samples in the signal &lt;i&gt;n&lt;/i&gt; times.&lt;/p&gt;  &lt;p&gt;Upsampling a signal corresponds to increasing the sampling rate of a signal by adding new samples to the signal. For example, upsampling by two refers to adding a new sample, usually a zero or an &lt;span class="GramE"&gt;interpolated&lt;/span&gt; value, between every two samples of the signal. Upsampling a signal by a factor of &lt;i&gt;n&lt;/i&gt; increases the number of samples in the signal by a factor of &lt;i&gt;n&lt;/i&gt;.&lt;/p&gt;  &lt;p&gt;Although it is not the only possible choice, DWT coefficients are usually sampled from the CWT on a dyadic grid, i.e., s&lt;sub&gt;0&lt;/sub&gt; = 2 and &lt;span style="font-family: Symbol;"&gt;t&lt;/span&gt; &lt;sub&gt;0&lt;/sub&gt; = 1, yielding s=2&lt;sup&gt;j&lt;/sup&gt; and &lt;span style="font-family: Symbol;"&gt;t&lt;/span&gt; =k*2&lt;sup&gt;j&lt;/sup&gt;, as described in Part 3. Since the signal is a discrete time function, the terms function and sequence will be used interchangeably in the following discussion. This sequence will be denoted by x[n], where n is an integer.&lt;/p&gt;  &lt;p&gt;The procedure starts with passing this signal (sequence) through a half band digital lowpass filter with impulse response h[n]. Filtering a signal corresponds to the mathematical operation of convolution of the signal with the impulse response of the filter. The convolution operation in discrete time is defined as follows:&lt;/p&gt;  &lt;p&gt;&lt;img id="_x0000_i1026" src="http://users.rowan.edu/%7Epolikar/WAVELETS/Image10.gif" border="0" height="56" width="245" /&gt;&lt;/p&gt;  &lt;p&gt;A half band lowpass filter removes all frequencies that are above half of the highest frequency in the signal. For example, if a signal has a maximum of 1000 Hz component, then half band lowpass filtering removes all the frequencies above 500 Hz. &lt;/p&gt;  &lt;p&gt;The unit of frequency is of particular importance at this time. In discrete signals, frequency is expressed in terms of radians. Accordingly, the sampling frequency of the signal is equal to 2&lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; radians in terms of radial frequency. Therefore, the highest frequency component that exists in a signal will be &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; radians, if the signal is sampled at &lt;span class="SpellE"&gt;Nyquist’s&lt;/span&gt; rate (which is twice the maximum frequency that exists in the signal); that is, the &lt;span class="SpellE"&gt;Nyquist’s&lt;/span&gt; rate corresponds to &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; &lt;span class="SpellE"&gt;rad&lt;/span&gt;/s in the discrete frequency domain. Therefore using Hz is not appropriate for discrete signals. However, Hz is used whenever it is needed to clarify a discussion, since it is very common to think of frequency in terms of Hz. It should always be remembered that the unit of frequency for discrete time signals is radians.&lt;/p&gt;  &lt;p&gt;After passing the signal through a half band lowpass filter, half of the samples can be eliminated according to the &lt;span class="SpellE"&gt;Nyquist’s&lt;/span&gt; rule, since the signal now has a highest frequency of &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt;/2 radians instead of &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; radians. Simply discarding every other sample will &lt;span class="SpellE"&gt;&lt;b&gt;subsample&lt;/b&gt;&lt;/span&gt; the signal by two, and the signal will then have half the number of points. The scale of the signal is now doubled. Note that the lowpass filtering removes the high frequency information, but leaves the scale unchanged. Only the &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; process changes the scale. Resolution, on the other hand, is related to the amount of information in the signal, and therefore, it is affected by the filtering operations. Half band lowpass filtering removes half of the frequencies, which can be interpreted as losing half of the information. Therefore, the resolution is halved after the filtering operation. Note, however, the &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; operation after filtering does not affect the resolution, since removing half of the spectral components from the signal makes half the number of samples redundant anyway. Half the samples can be discarded without any loss of information. In summary, the lowpass filtering halves the resolution, but leaves the scale unchanged. The signal is then &lt;span class="SpellE"&gt;subsampled&lt;/span&gt; by 2 since half of the &lt;span class="GramE"&gt;number of samples are&lt;/span&gt; redundant. This doubles the scale. &lt;/p&gt;  &lt;p&gt;This procedure can mathematically be expressed as&lt;/p&gt;  &lt;p&gt;&lt;img id="_x0000_i1027" src="http://users.rowan.edu/%7Epolikar/WAVELETS/Image11.gif" border="0" height="56" width="209" /&gt;&lt;/p&gt;  &lt;p&gt;Having said that, we now look how the DWT is actually computed: The DWT analyzes the signal at different frequency bands with different resolutions by decomposing the signal into a coarse approximation and detail information. DWT employs two sets of functions, called scaling functions and wavelet functions, which are associated with low pass and highpass filters, respectively. The decomposition of the signal into different frequency bands is simply obtained by successive highpass and lowpass filtering of the time domain signal. The original signal x[n] is first passed through a &lt;span class="SpellE"&gt;halfband&lt;/span&gt; highpass filter g[n] and a lowpass filter h[n]. After the filtering, half of the samples can be eliminated according to the &lt;span class="SpellE"&gt;Nyquist’s&lt;/span&gt; rule, since the signal now has a highest frequency of &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; /2 radians instead of &lt;span class="GramE"&gt;&lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; .&lt;/span&gt; The signal can therefore be &lt;span class="SpellE"&gt;subsampled&lt;/span&gt; by 2, simply by discarding every other sample. This constitutes one level of decomposition and can mathematically be expressed as follows: &lt;/p&gt;  &lt;p&gt;&lt;img id="_x0000_i1028" src="http://users.rowan.edu/%7Epolikar/WAVELETS/Image12.gif" border="0" height="93" width="228" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span class="GramE"&gt;where&lt;/span&gt; &lt;span class="SpellE"&gt;y&lt;sub&gt;high&lt;/sub&gt;&lt;/span&gt;[k] and &lt;span class="SpellE"&gt;y&lt;sub&gt;low&lt;/sub&gt;&lt;/span&gt;[k] are the outputs of the highpass and lowpass filters, respectively, after &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; by 2. &lt;/p&gt;  &lt;p&gt;This decomposition halves the time resolution since only half the number of samples now characterizes the entire signal. However, this operation doubles the frequency resolution, since the frequency band of the signal now spans only half the previous frequency band, effectively reducing the uncertainty in the frequency by half. The above procedure, which is also known as the &lt;span class="SpellE"&gt;subband&lt;/span&gt; coding, can be repeated for further decomposition. At every level, the filtering and &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; will result in half the number of samples (and hence half the time resolution) and half the frequency &lt;span class="GramE"&gt;band spanned (and hence double&lt;/span&gt; the frequency resolution). Figure 4.1 illustrates this procedure, where x[n] is the original signal to be decomposed, and h[n] and g[n] are lowpass and highpass filters, respectively. The bandwidth of the signal at every level is marked on the figure as "f". &lt;/p&gt;  &lt;p&gt;&lt;img id="_x0000_i1029" src="http://users.rowan.edu/%7Epolikar/WAVELETS/Image13.gif" border="0" height="736" width="655" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span class="GramE"&gt;Figure 4.1.&lt;/span&gt; The &lt;span class="SpellE"&gt;Subband&lt;/span&gt; Coding Algorithm&lt;b&gt;&lt;i&gt; &lt;/i&gt;&lt;/b&gt;As an example, suppose that the original signal x[n] has 512 sample points, spanning a frequency band of zero to &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; &lt;span class="SpellE"&gt;rad&lt;/span&gt;/s. At the first decomposition level, the signal is passed through the highpass and lowpass filters, followed by &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; by 2. The output of the highpass filter has 256 points (hence half the time resolution), but it only spans the frequencies &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt;/2 to &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt; &lt;span class="SpellE"&gt;rad&lt;/span&gt;/s (hence double the frequency resolution). These 256 samples constitute the first level of DWT coefficients. The output of the lowpass filter also has 256 samples, but it spans the other half of the frequency band, frequencies from 0 to &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt;/2 &lt;span class="SpellE"&gt;rad&lt;/span&gt;/s. This signal is then passed through the same lowpass and highpass filters for further decomposition. The output of the second lowpass filter followed by &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; has 128 samples spanning a frequency band of 0 to &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt;/4 &lt;span class="SpellE"&gt;rad&lt;/span&gt;/s, and the output of the second highpass filter followed by &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; has 128 samples spanning a frequency band of &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt;/4 to &lt;span style="font-family: Symbol;"&gt;p&lt;/span&gt;/2 &lt;span class="SpellE"&gt;rad&lt;/span&gt;/s. The second highpass filtered signal constitutes the second level of DWT coefficients. This signal has half the time resolution, but twice the frequency resolution of the first level signal. In other words, time resolution has decreased by a factor of 4, and frequency resolution has increased by a factor of 4 compared to the original signal. The lowpass filter output is then filtered once again for further decomposition. This process continues until two samples are left. For this specific example there would be 8 levels of decomposition, each having half the number of samples of the previous level. The DWT of the original signal is then obtained by concatenating all coefficients starting from the last level of decomposition (remaining two samples, in this case). The DWT will then have the same number of coefficients as the original signal. &lt;/p&gt;  &lt;p&gt;The frequencies that are most prominent in the original signal will appear as high amplitudes in that region of the DWT signal that includes those particular frequencies. The difference of this transform from the Fourier transform is that the time localization of these frequencies will not be lost. However, the time localization will have a resolution that depends on which level they appear. If the main information of the signal lies in the high frequencies, as happens most often, the time localization of these frequencies will be more precise, since they are characterized by more number of samples. If the main information lies only at very low frequencies, the time localization will not be very precise, since few samples are used to express signal at these frequencies. This procedure in effect offers a good time resolution at high frequencies, and good frequency resolution at low frequencies. Most practical signals encountered are of this type. &lt;/p&gt;  &lt;p&gt;The frequency bands that are not very prominent in the original signal will have very low amplitudes, and that part of the DWT signal can be discarded without any major loss of information, allowing data reduction. Figure 4.2 illustrates an example of how DWT signals look like and how data reduction is provided. Figure 4.2a shows a typical 512-sample signal that is normalized to unit amplitude. The horizontal axis is the number of samples, whereas the vertical axis is the normalized amplitude. Figure 4.2b shows the 8 level DWT of the signal in Figure 4.2a. The last 256 samples in this signal correspond to the highest frequency band in the &lt;span class="GramE"&gt;signal,&lt;/span&gt; the previous 128 samples correspond to the second highest frequency band and so on. It should be noted that only the first 64 samples, which correspond to lower frequencies of the analysis, carry relevant information and the rest of this signal has virtually no information. Therefore, all but the first 64 samples can be discarded without any loss of information. This is how DWT provides a very effective data reduction scheme.&lt;/p&gt;  &lt;p&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;!--[if gte vml 1]&gt;&lt;v:shape id="_x0000_i1030" type="#_x0000_t75" alt="" style="'width:536.25pt;height:347.25pt'"&gt;  &lt;v:imagedata src="http://users.rowan.edu/~polikar/WAVELETS/Image14.gif" croptop="16623f" cropbottom="15763f"&gt; &lt;/v:shape&gt;&lt;![endif]--&gt;&lt;!--[if !vml]--&gt;&lt;img src="http://users.rowan.edu/%7Epolikar/WAVELETS/WTpart4_files/image004.jpg" shapes="_x0000_i1030" border="0" height="463" width="715" /&gt;&lt;!--[endif]--&gt;&lt;/p&gt;  &lt;p&gt;Figure 4.2 Example of a DWT&lt;/p&gt;  &lt;p&gt;We will revisit this example, since it provides important insight to how DWT should be interpreted. Before that, however, we need to conclude our mathematical analysis of the DWT. &lt;/p&gt;  &lt;p&gt;One important property of the discrete wavelet transform is the relationship between the impulse responses of the highpass and lowpass filters. The highpass and lowpass filters are not independent of each other, and they are related by &lt;/p&gt;  &lt;p&gt;&lt;img id="_x0000_i1031" src="http://users.rowan.edu/%7Epolikar/WAVELETS/Image7.gif" border="0" height="30" width="208" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span class="GramE"&gt;where&lt;/span&gt; g[n] is the highpass, h[n] is the lowpass filter, and L is the filter length (in number of points). Note that the two filters are odd index alternated reversed versions of each other. Lowpass to highpass conversion is provided by the (-1&lt;span class="GramE"&gt;)&lt;sup&gt;n&lt;/sup&gt;&lt;/span&gt; term. Filters satisfying this condition are commonly used in signal processing, and they are known as the &lt;span class="SpellE"&gt;Quadrature&lt;/span&gt; Mirror Filters (QMF). The two filtering and &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; operations can be expressed by &lt;/p&gt;  &lt;p&gt;&lt;img id="_x0000_i1032" src="http://users.rowan.edu/%7Epolikar/WAVELETS/Image8.gif" border="0" height="93" width="241" /&gt;&lt;/p&gt;  &lt;p&gt;The reconstruction in this case is very easy since &lt;span class="SpellE"&gt;halfband&lt;/span&gt; filters form &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; bases. The above procedure is followed in reverse order for the reconstruction. The signals at every level are &lt;span class="SpellE"&gt;upsampled&lt;/span&gt; by two, passed through the synthesis filters &lt;span class="GramE"&gt;g’[&lt;/span&gt;n], and h’[n] (highpass and lowpass, respectively), and then added. The interesting point here is that the analysis and synthesis filters are identical to each other, except for a time reversal. Therefore, the reconstruction formula becomes (for each layer)&lt;/p&gt;  &lt;p&gt;&lt;img id="_x0000_i1033" src="http://users.rowan.edu/%7Epolikar/WAVELETS/Image9.gif" border="0" height="56" width="436" /&gt;&lt;/p&gt;  &lt;p&gt;However, if the filters are not ideal &lt;span class="SpellE"&gt;halfband&lt;/span&gt;, then perfect reconstruction cannot be achieved. Although it is not possible to realize ideal filters, under certain conditions it is possible to find filters that provide perfect reconstruction. The most famous ones are the ones developed by Ingrid Daubechies, and they are known as Daubechies’ wavelets. &lt;/p&gt;  &lt;p&gt;Note that due to successive &lt;span class="SpellE"&gt;subsampling&lt;/span&gt; by 2, the signal length must be a power of 2, or at least a multiple of power of 2, in order this scheme to be efficient. The length of the signal determines the number of levels that the signal can be decomposed to. For example, if the signal length is 1024, ten levels of decomposition are possible. &lt;/p&gt;  &lt;p&gt;Interpreting the DWT coefficients can sometimes be rather difficult because the way DWT coefficients are presented is rather peculiar. To make a real long story real short, DWT coefficients of each level are concatenated, starting with the last level. An example is in order to make this concept clear: &lt;/p&gt;  &lt;p&gt;Suppose we have a 256-sample long signal sampled at 10 MHZ and we wish to obtain its DWT coefficients. Since the signal is sampled at 10 MHz, the highest frequency component that exists in the signal is 5 MHz. At the first level, the signal is passed through the lowpass filter h[n], and the highpass filter g[n], the outputs of which are &lt;span class="SpellE"&gt;subsampled&lt;/span&gt; by two. The highpass filter output is the first level DWT coefficients. There are 128 of them, and they represent the signal in the [2.5 5] MHz range. These 128 samples are the last 128 samples plotted. The lowpass filter output, which also has 128 samples, but spanning the frequency band of [0 2.5] MHz, are further decomposed by passing them through the same h[n] and g[n]. The output of the second highpass filter is the level 2 DWT coefficients and these 64 samples precede the 128 level 1 coefficients in the plot. The output of the second lowpass filter is further decomposed, once again by passing it through the filters h[n] and g[n]. The output of the third highpass filter is the level 3 DWT &lt;span class="SpellE"&gt;coefficiets&lt;/span&gt;. These 32 samples precede the level 2 DWT coefficients in the plot. &lt;/p&gt;  &lt;p&gt;The procedure continues until only 1 DWT coefficient can be computed at level 9. This one coefficient is the first to be plotted in the DWT plot. This is followed by 2 level 8 coefficients, 4 level 7 coefficients, 8 level 6 coefficients, 16 level 5 coefficients, 32 level 4 coefficients, 64 level 3 coefficients, 128 level 2 coefficients and finally 256 level 1 coefficients. Note that less and less number of samples is used at lower frequencies, therefore, the time resolution decreases as frequency decreases, but since the frequency interval also decreases at low frequencies, the frequency resolution increases. Obviously, the first few coefficients would not carry a whole lot of information, simply due to greatly reduced time resolution. To illustrate this richly bizarre DWT representation let us take a look at a real world signal. Our original signal is a 256-sample long ultrasonic signal, which was sampled at 25 MHz. This signal was originally generated by using a 2.25 MHz &lt;span class="GramE"&gt;transducer,&lt;/span&gt; therefore the main spectral component of the signal is at 2.25 MHz. The last 128 samples correspond to [6.25 12.5] MHz range. As seen from the plot, no information is available &lt;span class="GramE"&gt;here,&lt;/span&gt; hence these samples can be discarded without any loss of information. The preceding 64 samples represent the signal in the [3.12 6.25] MHz range, which also does not carry any significant information. The little glitches probably correspond to the high frequency noise in the signal. The preceding 32 samples represent the signal in the [1.5 3.1] MHz range. As you can see, the majority of the signal’s energy is focused in these 32 samples, as we expected to see. The previous 16 samples correspond to [0.75 1.5] MHz and the peaks that are seen at this level probably represent the lower frequency envelope of the signal. The previous samples probably do not carry any other significant information. It is safe to say that we can get by with the 3&lt;sup&gt;rd&lt;/sup&gt; and 4&lt;sup&gt;th&lt;/sup&gt; level &lt;span class="GramE"&gt;coefficients, that is&lt;/span&gt; we can represent this 256 sample long signal with 16+32=48 samples, a significant data reduction which would make your computer quite happy. &lt;/p&gt;  &lt;p&gt; One area that has benefited the most from this particular property of the wavelet transforms is image processing. As you may well know, images, particularly high-resolution images, claim a lot of disk space. As a matter of fact, if this tutorial is taking a long time to download, that is mostly because of the images. DWT can be used to reduce the image size without losing much of the resolution. Here is how: &lt;/p&gt;  &lt;p&gt;For a given image, you can compute the DWT of, say each row, and discard all values in the DWT that are less then a certain threshold. We then save only those DWT coefficients that are above the threshold for each row, and when we need to reconstruct the original image, we simply pad each row with as many zeros as the number of discarded coefficients, and use the inverse DWT to reconstruct each row of the original image. We can also analyze the image at different frequency bands, and reconstruct the original image by using only the coefficients that are of a particular band. I will try to put sample images hopefully soon, to illustrate this point.&lt;/p&gt;  &lt;p&gt;Another issue that is receiving more and more attention is carrying out the decomposition (&lt;span class="SpellE"&gt;subband&lt;/span&gt; coding) not only on the lowpass side but on both sides. &lt;span class="GramE"&gt;In other words, zooming into both low and high frequency bands of the signal separately.&lt;/span&gt; This can be visualized as having both sides of the tree structure of Figure 4.1. What result is what is known as the &lt;b&gt;wavelet &lt;span class="GramE"&gt;packages&lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; We will not discuss wavelet packages in this here, since it is beyond the scope of this tutorial. Anyone who is interested in wavelet &lt;span class="GramE"&gt;packages,&lt;/span&gt; or more information on DWT can find this information in any of the numerous texts available in the market.&lt;/p&gt;  &lt;p&gt;And this concludes our mini series of wavelet tutorial. If I could be of any assistance to anyone struggling to understand the wavelets, I would consider the time and the effort that went into this tutorial well spent. I would like to remind that this tutorial is neither a complete nor a through coverage of the wavelet transforms. It is merely an overview of the concept of wavelets and it was intended to serve as a first reference for those who find the available texts on wavelets rather complicated. There might be many structural and/or technical mistakes, and I would appreciate if you could point those out to me. Your feedback is of utmost importance for the success of this tutorial. &lt;/p&gt;  &lt;p&gt;Thank you very much for your interest in The Wavelet &lt;span class="GramE"&gt;Tutorial .&lt;/span&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-3716552424903284175?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/3716552424903284175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=3716552424903284175' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/3716552424903284175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/3716552424903284175'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2006/11/wavelet-tutorial-iv.html' title='The Wavelet Tutorial IV'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-7949741353497095068</id><published>2006-11-17T05:15:00.000-08:00</published><updated>2006-11-17T05:16:29.019-08:00</updated><title type='text'>The Wavelet Tutorial III</title><content type='html'>&lt;h1 style="text-align: center;" align="center"&gt;&lt;span style="font-variant: small-caps;"&gt;The Wavelet Tutorial&lt;br /&gt;&lt;br /&gt;Part III&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h1&gt;  &lt;h3 style="text-align: center;" align="center"&gt;MULTIRESOLUTION ANALYSIS&lt;br /&gt;&amp;&lt;br /&gt;THE CONTINUOUS WAVELET TRANSFORM &lt;/h3&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;span class="GramE"&gt;by&lt;/span&gt;&lt;br /&gt;&lt;b&gt;&lt;a href="http://users.rowan.edu/%7Epolikar/"&gt;Robi Polikar &lt;/a&gt;&lt;/b&gt;&lt;/p&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1027" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt7.gif" border="0" height="435" width="565" /&gt;&lt;/p&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;h2 style="text-align: center;" align="center"&gt;MULTIRESOLUTION ANALYSIS &lt;/h2&gt;  &lt;p&gt;Although the time and frequency resolution problems are results of a physical phenomenon (the Heisenberg uncertainty principle) and exist regardless of the transform used, it is possible to analyze any signal by using an alternative approach called the &lt;b&gt;multiresolution analysis (MRA&lt;span class="GramE"&gt;) &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; MRA, as implied by its name, analyzes the signal at different frequencies with different resolutions. Every spectral component is not resolved equally as was the case in the STFT. &lt;/p&gt;  &lt;p&gt;MRA is designed to give good time resolution and poor frequency resolution at high frequencies and good frequency resolution and poor time resolution at low frequencies. This approach makes sense especially when the signal at hand has high frequency components for short durations and low frequency components for long durations. Fortunately, the signals that are encountered in practical applications are often of this type. For example, the following shows a signal of this type. It has a relatively low frequency component throughout the entire signal and relatively high frequency components for a short duration somewhere around the middle. &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1029" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_time1.gif" border="0" height="395" width="500" /&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/p&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;h3 style="text-align: center;" align="center"&gt;THE CONTINUOUS WAVELET TRANSFORM&lt;/h3&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;p&gt;The continuous wavelet transform was developed as &lt;span class="GramE"&gt;an alternative approach to the short time Fourier transform&lt;/span&gt; to overcome the resolution problem. The wavelet analysis is done in a similar way to the STFT analysis, in the sense that the signal is multiplied with a function, {\it the wavelet}, similar to the window function in the STFT, and the transform is computed separately for different segments of the time-domain signal. However, there are two main differences between the STFT and the CWT: &lt;/p&gt;  &lt;p&gt;1. The Fourier transforms of the windowed signals are not taken, and therefore single peak will be seen corresponding to a sinusoid, i.e., negative frequencies are not computed. &lt;/p&gt;  &lt;p&gt;2. The width of the window is changed as the transform is computed for every single spectral component, which is probably the most significant characteristic of the wavelet transform. &lt;/p&gt;  &lt;p&gt;The continuous wavelet transform is defined as follows&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1032" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn1.gif" border="0" height="81" width="626" /&gt;&lt;br /&gt;Equation 3.1&lt;/p&gt;  &lt;p&gt;As seen in the above &lt;span class="GramE"&gt;equation ,&lt;/span&gt; the transformed signal is a function of two variables, &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;and &lt;b&gt;s &lt;/b&gt;, the &lt;b&gt;translation &lt;/b&gt;and &lt;b&gt;scale &lt;/b&gt;parameters, respectively. &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;b&gt;psi&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;b&gt;t)&lt;/b&gt; is the transforming function, and it is called &lt;b&gt;the mother wavelet &lt;/b&gt;. The term &lt;b&gt;mother wavelet &lt;/b&gt;gets its name due to two important properties of the wavelet analysis as explained below: &lt;/p&gt;  &lt;p&gt;The term &lt;b&gt;wavelet&lt;/b&gt; means a &lt;b&gt;small &lt;span class="GramE"&gt;wave &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; The smallness refers to the condition that this (window) function is of finite length &lt;span class="GramE"&gt;( &lt;b&gt;compactly&lt;/b&gt;&lt;/span&gt;&lt;b&gt; supported&lt;/b&gt;). The wave refers to the condition that this function is &lt;span class="GramE"&gt;oscillatory .&lt;/span&gt; The term &lt;b&gt;mother &lt;/b&gt;implies that the functions with different region of support that are used in the transformation process are derived from one main function, or the mother wavelet. In other words, the mother wavelet is a &lt;b&gt;prototype &lt;/b&gt;for generating the other window functions. &lt;/p&gt;  &lt;p&gt;The term &lt;b&gt;translation &lt;/b&gt;is used in the same sense as it was used in the STFT; it is related to the location of the window, as the window is shifted through the signal. This term, obviously, corresponds to time information in the transform domain. However, we do not have a frequency parameter, as we had before for the STFT. Instead, we have scale parameter which is defined as $1/frequency$. The term frequency is reserved for the STFT. Scale is described in more detail in the next section. &lt;/p&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;h4 style="text-align: center;" align="center"&gt;The Scale &lt;/h4&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;p&gt;The parameter &lt;b&gt;scale &lt;/b&gt;in the wavelet analysis is similar to the scale used in maps. As in the case of maps, high scales correspond to a non-detailed global view (of the signal), and low scales correspond to a detailed view. Similarly, in terms of frequency, low frequencies (high scales) correspond to a global information of a signal (that usually spans the entire signal), whereas high frequencies (low scales) correspond to a detailed information of a hidden pattern in the signal (that usually lasts a relatively short time). Cosine signals corresponding to various scales are given as examples in the following &lt;span class="GramE"&gt;figure .&lt;/span&gt; &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1035" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_time2.gif" border="0" height="540" width="629" /&gt;Figure 3.2&lt;/p&gt;  &lt;p&gt;Fortunately in practical applications, low scales (high frequencies) do not last for the entire duration of the signal, unlike those shown in the figure, but they usually appear from time to time as short bursts, or spikes. High scales (low frequencies) usually last for the entire duration of the signal. &lt;/p&gt;  &lt;p&gt;Scaling, as a mathematical operation, either dilates or compresses a signal. Larger scales correspond to dilated (or stretched out) signals and small scales correspond to compressed signals. All of the signals given in the figure are derived from the same cosine signal, i.e., they are dilated or compressed versions of the same function. In the above figure, &lt;b&gt;s=0.05 &lt;/b&gt;is the smallest scale, and &lt;b&gt;s=1 &lt;/b&gt;is the largest scale. &lt;/p&gt;  &lt;p&gt;In terms of mathematical functions, if &lt;span class="GramE"&gt;&lt;b&gt;f(&lt;/b&gt;&lt;/span&gt;&lt;b&gt;t) &lt;/b&gt;is a given function &lt;b&gt;f(&lt;span class="SpellE"&gt;st&lt;/span&gt;) &lt;/b&gt;corresponds to a contracted (compressed) version of &lt;b&gt;f(t) &lt;/b&gt;if &lt;b&gt;s &gt; 1 &lt;/b&gt;and to an expanded (dilated) version of &lt;b&gt;f(t) &lt;/b&gt;if &lt;b&gt;s &lt;&gt;. &lt;/b&gt;&lt;/p&gt;&lt;b&gt;  &lt;/b&gt;&lt;p&gt;&lt;b&gt;However, in the definition of the wavelet transform, the scaling term is used in the denominator, and therefore, the opposite of the above statements holds, i.e., scales &lt;b&gt;s &gt; 1 &lt;/b&gt;dilates the signals whereas scales &lt;b&gt;s &lt;&gt;, compresses the signal. This interpretation of scale will be used throughout this text. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h3 style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;COMPUTATION OF THE CWT &lt;/b&gt;&lt;/b&gt;&lt;/h3&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Interpretation of the above equation will be explained in this section. Let &lt;span class="GramE"&gt;&lt;b&gt;x(&lt;/b&gt;&lt;/span&gt;&lt;b&gt;t) &lt;/b&gt;is the signal to be analyzed. The mother wavelet is chosen to serve as a prototype for all windows in the process. All the windows that are used are the dilated (or compressed) and shifted versions of the mother wavelet. There are a number of functions that are used for this purpose. The &lt;span class="SpellE"&gt;Morlet&lt;/span&gt; wavelet and the Mexican hat function are two candidates, and they are used for the wavelet analysis of the examples which are presented later in this chapter. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Once the mother wavelet is chosen the computation starts with &lt;b&gt;s=1 &lt;/b&gt;and the continuous wavelet transform is computed for all values of &lt;span class="GramE"&gt;&lt;b&gt;s &lt;/b&gt;,&lt;/span&gt; smaller and larger than ``1''. However, depending on the signal, a complete transform is usually not necessary. For all practical purposes, the signals are &lt;span class="SpellE"&gt;bandlimited&lt;/span&gt;, and therefore, computation of the transform for a limited interval of scales is usually adequate. In this study, some finite &lt;span class="GramE"&gt;interval of values for &lt;b&gt;s &lt;/b&gt;were&lt;/span&gt; used, as will be described later in this chapter. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;For convenience, the procedure will be started from scale &lt;b&gt;s=1 &lt;/b&gt;and will continue for the increasing values of &lt;span class="GramE"&gt;&lt;b&gt;s &lt;/b&gt;,&lt;/span&gt; i.e., the analysis will start from high frequencies and proceed towards low frequencies. This first value of &lt;b&gt;s &lt;/b&gt;will correspond to the most compressed wavelet. As the value of &lt;b&gt;s &lt;/b&gt;is increased, the wavelet will dilate. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The wavelet is placed at the beginning of the signal at the point which corresponds to time=0. The wavelet function at scale ``1'' is multiplied by the signal and then integrated &lt;b&gt;over all times&lt;/b&gt;. The result of the integration is then multiplied by the constant number &lt;b&gt;1/sqrt{s&lt;span class="GramE"&gt;} &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; This multiplication is for energy normalization purposes so that the transformed signal will have the same energy at every scale. The final result is the value of the transformation, i.e., the value of the continuous wavelet transform &lt;b&gt;at time zero &lt;/b&gt;and &lt;b&gt;scale s=&lt;span class="GramE"&gt;1 &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; In other words, it is the value that corresponds to the point &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt; =&lt;span class="GramE"&gt;0 ,&lt;/span&gt; s=1 &lt;/b&gt;in the time-scale plane.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The wavelet at scale &lt;b&gt;s=1 &lt;/b&gt;is then shifted towards the right by &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;amount to the location &lt;b&gt;t=&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;tau&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt; &lt;span style="font-weight: normal;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; and the above equation is computed to get the transform value at &lt;b&gt;t=&lt;span class="SpellE"&gt;tau&lt;/span&gt; , s=1 &lt;/b&gt;in the time-frequency plane. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;This procedure is repeated until the wavelet reaches the end of the signal. &lt;b&gt;One row of points on the time-scale plane &lt;/b&gt;for the scale &lt;b&gt;s=1 &lt;/b&gt;is now completed.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Then, &lt;b&gt;s&lt;/b&gt; is increased by a small value. Note that, this is a continuous transform, and therefore, both &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;and &lt;b&gt;s &lt;/b&gt;must be incremented &lt;span class="GramE"&gt;continuously .&lt;/span&gt; However, if this transform needs to be computed by a computer, then both parameters are increased by &lt;b&gt;a sufficiently small step size&lt;/b&gt;. This corresponds to sampling the time-scale plane. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The above procedure is repeated for every value of &lt;b&gt;s&lt;/b&gt;. Every computation for a given value of &lt;b&gt;s&lt;/b&gt; fills the corresponding single row of the time-scale plane. When the process is completed for all desired values of &lt;b&gt;s&lt;/b&gt;, the CWT of the signal has been calculated. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;The figures below illustrate the entire process step by step. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1038" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_time3.gif" border="0" height="526" width="617" /&gt;Figure 3.3 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;In Figure 3.3, the signal and the wavelet function are shown for four different values of &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;b&gt; &lt;/b&gt;.&lt;/span&gt; The signal is a truncated version of the signal shown in Figure 3.1. The scale value is &lt;span class="GramE"&gt;&lt;b&gt;1 &lt;/b&gt;,&lt;/span&gt; corresponding to the lowest scale, or highest frequency. Note how compact it is (the blue window). It should be as narrow as the highest frequency component that exists in the signal. Four distinct locations of the wavelet function are shown in the figure at &lt;b&gt;to=&lt;span class="GramE"&gt;2 ,&lt;/span&gt; to=40, to=90, and to=140 &lt;/b&gt;. At every location, it is multiplied by the signal. Obviously, the product is nonzero only where the signal falls in the region of support of the wavelet, and it is zero elsewhere. By shifting the wavelet in time, the signal is localized in time, and by changing the value of &lt;span class="GramE"&gt;&lt;b&gt;s &lt;/b&gt;,&lt;/span&gt; the signal is localized in scale (frequency).&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;If the signal has a spectral component that corresponds to the current value of &lt;b&gt;s &lt;/b&gt;(which is 1 in this case), the product of the wavelet with the signal &lt;b&gt;at the location where this spectral component exists &lt;/b&gt;gives a relatively large value. If the spectral component that corresponds to the current value of &lt;b&gt;s &lt;/b&gt;is not present in the signal, the product value will be relatively small, or zero. The signal in Figure 3.3 has spectral components comparable to the window's width at &lt;b&gt;s=1 &lt;/b&gt;around t=100 ms.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The continuous wavelet transform of the signal in Figure 3.3 will yield large values for low scales around time 100 ms, and small values elsewhere. For high scales, on the other hand, the continuous wavelet transform will give large values for almost the entire duration of the signal, since low frequencies exist at all times.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1039" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_time4.gif" border="0" height="528" width="634" /&gt;Figure 3.4 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1040" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_time5.gif" border="0" height="528" width="636" /&gt;Figure 3.5 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Figures 3.4 and 3.5 illustrate the same process for the scales s=5 and s=20, respectively. Note how the window width changes with increasing scale (decreasing frequency). As the window width increases, the transform starts picking up the lower frequency components.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;As a result, for every scale and for every time (interval), one point of the time-scale plane is computed. The computations at one scale construct the rows of the time-scale plane, and the computations at different scales construct the columns of the time-scale plane.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Now, let's take a look at an example, and see how the wavelet transform really looks like. Consider the &lt;b&gt;non-stationary &lt;/b&gt;signal in Figure 3.6. This is similar to the example given for the STFT, except at different frequencies. As stated on the figure, the signal is composed of four frequency components at 30 Hz, 20 Hz, 10 Hz and 5 Hz. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1041" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_time6.gif" border="0" height="412" width="509" /&gt;&lt;br /&gt;Figure 3.6 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Figure 3.7 is the continuous wavelet transform (CWT) of this signal. Note that the axes are translation and scale, not time and frequency. However, translation is strictly related to time, since it indicates where the mother wavelet is located. The translation of the mother wavelet can be thought of as the time elapsed since &lt;b&gt;t=&lt;span class="GramE"&gt;0 &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; The scale, however, has a whole different story. Remember that the scale parameter &lt;b&gt;s &lt;/b&gt;in equation 3.1 is actually &lt;span class="GramE"&gt;inverse&lt;/span&gt; of frequency. In other words, whatever we said about the properties of the wavelet transform regarding the frequency resolution, inverse of it will appear on the figures showing the WT of the time-domain signal. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1042" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt7.gif" border="0" height="435" width="566" /&gt;&lt;br /&gt;Figure 3.7 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Note that in Figure 3.7 that smaller scales correspond to higher frequencies, i.e., frequency decreases as scale increases, therefore, that portion of the graph with scales around zero, actually correspond to highest frequencies in the analysis, and that with high scales correspond to lowest frequencies. Remember that the signal had 30 Hz (highest frequency) components first, and this appears at the lowest scale &lt;span class="GramE"&gt;at a translations&lt;/span&gt; of 0 to 30. Then &lt;span class="GramE"&gt;comes&lt;/span&gt; the 20 Hz component, second highest frequency, and so on. The 5 Hz component appears at the end of the translation axis (as expected), and at higher scales (lower frequencies) again as expected. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1043" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt8.gif" border="0" height="471" width="626" /&gt;&lt;br /&gt;Figure 3.8 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now, recall these resolution properties: Unlike the STFT which has a constant resolution at all times and frequencies, the WT has a good time and poor frequency resolution at high frequencies, and good frequency and poor time resolution at low frequencies. Figure 3.8 shows the same WT in Figure 3.7 from another angle to better illustrate the resolution properties: In Figure 3.8, lower scales (higher frequencies) have &lt;b&gt;better scale resolution &lt;/b&gt;(narrower in scale, which means that it is less ambiguous what the exact value of the scale) which correspond to &lt;b&gt;poorer frequency resolution &lt;/b&gt;. Similarly, higher scales have scale frequency resolution (wider support in scale, which means it is more ambitious what the exact value of the scale is&lt;span class="GramE"&gt;) ,&lt;/span&gt; which correspond to better frequency resolution of lower frequencies. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The axes in Figure 3.7 and 3.8 are normalized and should be evaluated accordingly. Roughly speaking the 100 points in the translation axis correspond to 1000 ms, and the 150 points on the scale axis correspond to a frequency band of 40 Hz (the numbers on the translation and scale axis &lt;b&gt;do not correspond to seconds and Hz, respectively &lt;/b&gt;, they are just the number of samples in the computation). &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h4 style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;TIME AND FREQUENCY RESOLUTIONS &lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;In this section we will take a closer look at the resolution properties of the wavelet transform. Remember that the resolution problem was the main reason why we switched from STFT to WT. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The illustration in Figure 3.9 is commonly used to explain how time and frequency resolutions should be interpreted. Every box in Figure 3.9 corresponds to a value of the wavelet transform in the time-frequency plane. Note that boxes have a certain &lt;b&gt;non-zero &lt;/b&gt;area, which implies that the value of a particular point in the time-frequency plane cannot be known. All the points in the time-frequency plane that falls into a box &lt;span class="GramE"&gt;is&lt;/span&gt; represented by one value of the WT. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1046" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_resolution9.gif" border="0" height="512" width="624" /&gt;&lt;br /&gt;Figure 3.9 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="margin-bottom: 12pt;"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;&lt;!--[endif]--&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Let's take a closer look at Figure 3.9: First thing to notice is that although the widths and heights of the boxes change, the area is constant. That is each box represents an equal portion of the time-frequency plane, but giving different proportions to time and frequency. Note that at low frequencies, the height of the boxes are shorter (which corresponds to better frequency resolutions, since there is less ambiguity regarding the value of the exact frequency), but their widths are longer (which correspond to poor time resolution, since there is more ambiguity regarding the value of the exact time). At higher frequencies the width of the boxes decreases, i.e., the time resolution gets better, and the heights of the boxes increase, i.e., the frequency resolution gets poorer. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Before concluding this section, it is worthwhile to mention how the partition looks like in the case of STFT. Recall that in STFT the time and frequency resolutions are determined by the width of the analysis window, which is selected once for the entire analysis, i.e., both time and frequency resolutions are constant. Therefore the time-frequency plane consists of &lt;b&gt;squares &lt;/b&gt;in the STFT case. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Regardless of the dimensions of the boxes, the areas of all boxes, both in STFT and WT, are the same and determined by &lt;b&gt;Heisenberg's &lt;span class="GramE"&gt;inequality &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; As a summary, the area of a box is fixed for each window function (STFT) or mother wavelet (CWT), whereas different windows or mother wavelets can result in different areas. However, &lt;b&gt;all areas are lower bounded by 1/4 \&lt;span class="GramE"&gt;pi &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; That is, we cannot reduce the areas of the boxes as much as we want due to the Heisenberg's uncertainty principle. &lt;span class="GramE"&gt;On the other hand, for a given mother wavelet the dimensions of the boxes can be changed, while keeping the area the same.&lt;/span&gt; This is exactly what wavelet transform does.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h3 style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;THE WAVELET THEORY: A MATHEMATICAL APPROACH &lt;/b&gt;&lt;/b&gt;&lt;/h3&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;This section describes the main idea of wavelet analysis theory, which can also be considered to be the underlying concept of most of the signal analysis techniques. The FT defined by Fourier use &lt;b&gt;basis functions &lt;/b&gt;to analyze and reconstruct a function. &lt;b&gt;Every vector in a vector space can be written as a linear combination of the basis vectors in that vector space &lt;/b&gt;, i.e., by multiplying the vectors by some constant numbers, and then by taking the summation of the products. The analysis of the signal involves the estimation of these constant numbers (transform coefficients, or Fourier coefficients, wavelet coefficients, etc). The synthesis, or the reconstruction, corresponds to computing the linear combination equation. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;All the definitions and theorems related to this subject can be found in Keiser's book, &lt;b&gt;A Friendly Guide to Wavelets &lt;/b&gt;but an introductory level knowledge of how basis functions work is necessary to understand the underlying principles of the wavelet theory. Therefore, this information will be presented in this section.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h4 style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;Basis Vectors &lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Note: Most of the equations include letters of the Greek alphabet. These letters are written out explicitly in the text with their names, such as &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt;, &lt;span class="SpellE"&gt;psi&lt;/span&gt;, phi &lt;/b&gt;etc. For capital letters, the first letter of the name has been capitalized, such as,&lt;b&gt; &lt;span class="SpellE"&gt;Tau&lt;/span&gt;, &lt;span class="SpellE"&gt;Psi&lt;/span&gt;, Phi &lt;/b&gt;etc. Also, subscripts are shown by the underscore character &lt;span class="GramE"&gt;&lt;b&gt;_ &lt;/b&gt;,&lt;/span&gt; and superscripts are shown by the &lt;b&gt;^ &lt;/b&gt;character. Also note that all letters or letter names written in bold type face represent vectors, &lt;span class="GramE"&gt;Some&lt;/span&gt; important points are also written in bold face, but the meaning should be clear from the context. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;A &lt;b&gt;basis &lt;/b&gt;of a vector space &lt;b&gt;V &lt;/b&gt;is a set of linearly independent vectors, such that any vector &lt;b&gt;v &lt;/b&gt;in &lt;b&gt;V &lt;/b&gt;can be written as a linear combination of these basis vectors. There may be more than one basis for a vector space. However, all of them have the same number of vectors, and this number is known as the &lt;b&gt;dimension &lt;/b&gt;of the vector space. For example in two-dimensional space, the basis will have two vectors.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1051" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn2.gif" border="0" height="79" width="161" /&gt;&lt;br /&gt;Equation 3.2&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Equation 3.2 shows how any vector &lt;b&gt;v &lt;/b&gt;can be written as a linear combination of the basis vectors &lt;span class="SpellE"&gt;&lt;b&gt;b_k&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;and the corresponding coefficients &lt;span class="SpellE"&gt;&lt;b&gt;nu^k&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;This concept, given in terms of vectors, can easily be generalized to functions, by replacing the basis vectors &lt;span class="SpellE"&gt;&lt;b&gt;b_k&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;with basis functions &lt;span class="SpellE"&gt;phi_&lt;span class="GramE"&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;t), and the vector &lt;b&gt;v &lt;/b&gt;with a function f(t). Equation 3.2 then becomes &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1052" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn2a.gif" border="0" height="71" width="247" /&gt;&lt;br /&gt;Equation 3.2a&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The complex exponential (&lt;span class="SpellE"&gt;sines&lt;/span&gt; and cosines) functions are the basis functions for the FT. Furthermore, they are orthogonal functions, which provide some desirable properties for reconstruction.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Let &lt;span class="GramE"&gt;f(&lt;/span&gt;t) and g(t) be two functions in L^2 [&lt;span class="SpellE"&gt;a,b&lt;/span&gt;]. &lt;span class="GramE"&gt;( L&lt;/span&gt;^2 [&lt;span class="SpellE"&gt;a,b&lt;/span&gt;] denotes the set of square &lt;span class="SpellE"&gt;integrable&lt;/span&gt; functions in the interval [&lt;span class="SpellE"&gt;a,b&lt;/span&gt;]). The inner product of two functions is defined by Equation 3.3: &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1053" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn3.gif" border="0" height="65" width="426" /&gt;&lt;br /&gt;Equation 3.3&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;According to the above definition of the inner product, the CWT can be thought of as the inner product of the test signal with the basis functions &lt;span class="SpellE"&gt;psi&lt;/span&gt;_(&lt;span class="SpellE"&gt;tau&lt;/span&gt; ,s)(t):&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1054" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn4.gif" border="0" height="56" width="558" /&gt;&lt;br /&gt;Equation 3.4&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;where&lt;/span&gt;, &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1055" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn5.gif" border="0" height="89" width="297" /&gt;&lt;br /&gt;Equation 3.5&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;This definition of the CWT shows that the wavelet analysis is a measure of similarity between the basis functions (wavelets) and the signal itself. Here the similarity is in the sense of similar frequency content. The calculated CWT coefficients refer to the closeness of the signal to the wavelet &lt;b&gt;at the current &lt;span class="GramE"&gt;scale &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;This further clarifies the previous discussion on the correlation of the signal with the wavelet at a certain scale. If the signal has a major component of the frequency corresponding to the current scale, then the wavelet (the basis function) at the current scale will be &lt;b&gt;similar &lt;/b&gt;or &lt;b&gt;close &lt;/b&gt;to the signal at the particular location where this frequency component occurs. Therefore, the CWT coefficient computed at this point in the time-scale plane will be a relatively large number.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h4 style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;Inner Products, Orthogonality, and &lt;span class="SpellE"&gt;Orthonormality&lt;/span&gt; &lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Two vectors &lt;span class="GramE"&gt;&lt;b&gt;v &lt;/b&gt;,&lt;/span&gt; &lt;b&gt;w &lt;/b&gt;are said to be &lt;b&gt;orthogonal &lt;/b&gt;if their inner product equals zero:&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1058" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn6.gif" border="0" height="73" width="296" /&gt;&lt;br /&gt;Equation 3.6&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Similarly, two functions $f$ and $g$ are said to be orthogonal to each other if their inner product is zero: &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1059" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn7.gif" border="0" height="52" width="441" /&gt;&lt;br /&gt;Equation 3.7&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;A set of vectors &lt;b&gt;{v_1, v_2, ....&lt;span class="GramE"&gt;,&lt;span class="SpellE"&gt;v&lt;/span&gt;&lt;/span&gt;&lt;span class="SpellE"&gt;_n&lt;/span&gt;} &lt;/b&gt;is said to be &lt;span class="SpellE"&gt;&lt;b&gt;orthonormal&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;, if they are &lt;span class="SpellE"&gt;pairwise&lt;/span&gt; orthogonal to each other, and all have length ``1''. This can be expressed as:&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1060" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn8.gif" border="0" height="60" width="206" /&gt;&lt;br /&gt;Equation 3.8&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Similarly, a set of functions {&lt;span class="SpellE"&gt;phi_&lt;span class="GramE"&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;t)}, k=1,2,3,..., is said to be &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; if &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1061" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn9.gif" border="0" height="66" width="604" /&gt;&lt;br /&gt;Equation 3.9&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;and&lt;/span&gt; &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1062" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn10.gif" border="0" height="76" width="267" /&gt;&lt;br /&gt;Equation 3.10&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;or&lt;/span&gt; equivalently &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1063" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn11.gif" border="0" height="77" width="307" /&gt;&lt;br /&gt;Equation 3.11&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;span class="GramE"&gt;&lt;b&gt;&lt;b&gt;where&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt;, delta_{&lt;span class="SpellE"&gt;kl&lt;/span&gt;} is the &lt;span class="SpellE"&gt;&lt;b&gt;Kronecker&lt;/b&gt;&lt;/span&gt;&lt;b&gt; delta &lt;/b&gt;function, defined as: &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1064" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn12.gif" border="0" height="90" width="303" /&gt;&lt;br /&gt;Equation 3.12&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;As stated above, there may be more than one set of basis functions (or vectors). Among them, the &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; basis functions (or vectors) are of particular importance because of the nice properties they provide in finding these analysis coefficients. The &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; bases allow computation of these coefficients in a very simple and straightforward way using the &lt;span class="SpellE"&gt;orthonormality&lt;/span&gt; property.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;For &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; bases, the coefficients, &lt;span class="SpellE"&gt;mu_&lt;span class="GramE"&gt;k&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt; ,&lt;/span&gt; can be calculated as &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1065" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn13.gif" border="0" height="61" width="418" /&gt;&lt;br /&gt;Equation 3.13&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;span class="GramE"&gt;&lt;b&gt;&lt;b&gt;and&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt; the function f(t) can then be reconstructed by Equation 3.2_a by substituting the &lt;span class="SpellE"&gt;mu_k&lt;/span&gt; coefficients. &lt;span class="GramE"&gt;This yields&lt;/span&gt; &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1066" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn14.gif" border="0" height="120" width="355" /&gt;&lt;br /&gt;Equation 3.14&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;span class="SpellE"&gt;&lt;b&gt;&lt;b&gt;Orthonormal&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt; bases may not be available for every type of application where a generalized version, &lt;span class="SpellE"&gt;&lt;b&gt;biorthogonal&lt;/b&gt;&lt;/span&gt;&lt;b&gt; &lt;/b&gt;bases can be used. The term ``&lt;span class="SpellE"&gt;biorthogonal&lt;/span&gt;'' refers to two different bases which are orthogonal to each other, but each do not form an orthogonal set.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;In some applications, however, &lt;span class="SpellE"&gt;biorthogonal&lt;/span&gt; bases also may not be available in which case &lt;b&gt;frames &lt;/b&gt;can be used. Frames constitute an important part of wavelet theory, and interested readers are referred to Kaiser's book mentioned earlier.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Following the same order as in chapter 2 for the STFT, some examples of continuous wavelet transform are presented next. The figures given in the examples were generated by a program written to compute the CWT. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Before we close this section, I would like to include two mother wavelets commonly used in wavelet analysis. The Mexican Hat wavelet is defined as the second derivative of the Gaussian function: &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1067" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn15.gif" border="0" height="100" width="316" /&gt;&lt;br /&gt;Equation 3.15 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;which&lt;/span&gt; is &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1068" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn16.gif" border="0" height="100" width="414" /&gt;&lt;br /&gt;Equation 3.16 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The &lt;span class="SpellE"&gt;Morlet&lt;/span&gt; wavelet is defined as&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1069" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn_morlet.gif" border="0" height="71" width="252" /&gt;&lt;br /&gt;Equation 3.16a &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;span class="GramE"&gt;&lt;b&gt;&lt;b&gt;where&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt; &lt;b&gt;a &lt;/b&gt;is a modulation parameter, and &lt;b&gt;sigma &lt;/b&gt;is the scaling parameter that affects the width of the window. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h3 style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;EXAMPLES &lt;/b&gt;&lt;/b&gt;&lt;/h3&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;All of the examples that are given below correspond to real-life non-stationary signals. These signals are drawn from a database signals that includes &lt;b&gt;event related potentials &lt;/b&gt;of normal people, and patients with Alzheimer's disease. Since these are not test signals like simple sinusoids, it is not as easy to interpret them. They are shown here only to give an idea of how real-life &lt;span class="SpellE"&gt;CWTs&lt;/span&gt; look like. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;The following signal shown in Figure 3.11 belongs to a normal person. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1072" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_time11.gif" border="0" height="350" width="521" /&gt;&lt;br /&gt;Figure 3.11 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;span class="GramE"&gt;&lt;b&gt;&lt;b&gt;and&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt; the following is its CWT. The numbers on the axes are of no importance to us. &lt;span class="GramE"&gt;those&lt;/span&gt; numbers simply show that the CWT was computed at 350 translation and 60 scale locations on the translation-scale plane. The important point to note here is the fact that the computation is not a true &lt;b&gt;continuous &lt;/b&gt;WT, as it is apparent from the computation at finite number of locations. This is only a discretized version of the CWT, which is explained later on this page. Note, however, that this is NOT discrete wavelet transform (DWT) which is the topic of Part IV of this tutorial.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1073" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt12.gif" border="0" height="446" width="564" /&gt;&lt;br /&gt;Figure 3.12 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;and&lt;/span&gt; the Figure 3.13 plots the same transform from a different angle for better visualization. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1074" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt13.gif" border="0" height="438" width="554" /&gt;&lt;br /&gt;Figure 3.13 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;Figure 3.14 plots an event related potential of a patient diagnosed with Alzheimer's disease &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1075" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_14.gif" border="0" height="271" width="521" /&gt;&lt;br /&gt;Figure 3.14 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;span class="GramE"&gt;&lt;b&gt;&lt;b&gt;and&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt; Figure 3.15 illustrates its CWT: &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1076" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_15.gif" border="0" height="486" width="527" /&gt;&lt;br /&gt;Figure 3.15 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;and&lt;/span&gt; here is another view from a different angle &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1077" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_16.gif" border="0" height="484" width="523" /&gt;&lt;br /&gt;Figure 3.16 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h3 style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;THE WAVELET SYNTHESIS&lt;/b&gt;&lt;/b&gt;&lt;/h3&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;The continuous wavelet transform is a reversible transform, provided that Equation 3.18 is satisfied. Fortunately, this is a very non-restrictive requirement. The continuous wavelet transform is reversible if Equation 3.18 is satisfied, even though the basis functions are in general may not be &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt;. The reconstruction is possible by using the following reconstruction formula: &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1080" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn17.gif" border="0" height="77" width="507" /&gt;&lt;br /&gt;Equation 3.17 Inverse Wavelet Transform&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;where&lt;/span&gt; &lt;span class="SpellE"&gt;C_psi&lt;/span&gt; is a constant that depends on the wavelet used. The success of the reconstruction depends on this constant called, &lt;b&gt;the admissibility &lt;span class="GramE"&gt;constant &lt;span style="font-weight: normal;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; to satisfy the following &lt;b&gt;admissibility condition &lt;/b&gt;: &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1081" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn18.gif" border="0" height="122" width="431" /&gt;&lt;br /&gt;Equation 3.18 Admissibility Condition&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;where&lt;/span&gt; &lt;span class="SpellE"&gt;psi^hat&lt;/span&gt;(xi) is the FT of &lt;span class="SpellE"&gt;psi&lt;/span&gt;(t). Equation 3.18 implies that &lt;span class="SpellE"&gt;psi^&lt;span class="GramE"&gt;hat&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;(&lt;/span&gt;0) = 0, which is &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1082" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn19.gif" border="0" height="59" width="193" /&gt;&lt;br /&gt;Equation 3.19 &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;As stated above, Equation 3.19 is not a very restrictive requirement since many wavelet functions can be found whose integral is zero. For Equation 3.19 to be satisfied, the wavelet must be oscillatory. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;h4 style="text-align: center;" align="center"&gt;&lt;span class="SpellE"&gt;&lt;b&gt;&lt;b&gt;Discretization&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;b&gt; of the Continuous Wavelet Transform: The Wavelet Series &lt;/b&gt;&lt;/b&gt;&lt;/h4&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;hr align="center" size="2" width="100%"&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/div&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;In today's world, computers are used to do most computations (well&lt;span class="GramE"&gt;,...&lt;/span&gt;ok... almost all computations). It is apparent that neither the FT, nor the STFT, nor the CWT can be practically computed by using analytical equations, integrals, etc. It is therefore necessary to &lt;span class="SpellE"&gt;discretize&lt;/span&gt; the transforms. As in the FT and STFT, the most intuitive way of doing this is simply sampling the time-frequency (scale) plane. &lt;span class="GramE"&gt;Again intuitively, sampling the plane with a uniform sampling rate sounds like the most natural choice.&lt;/span&gt; However, in the case of WT, the scale change can be used to reduce the sampling rate. &lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;At higher scales (lower frequencies)&lt;span class="GramE"&gt;,&lt;/span&gt; the sampling rate can be decreased, according to &lt;span class="SpellE"&gt;Nyquist's&lt;/span&gt; rule. In other words, if the time-scale plane needs to be sampled with a sampling rate of &lt;b&gt;N_1 &lt;/b&gt;at scale &lt;b&gt;s_1 &lt;/b&gt;, the same plane can be sampled with a sampling rate of &lt;b&gt;N_2 &lt;/b&gt;, at scale &lt;b&gt;s_2 &lt;/b&gt;, where, &lt;b&gt;s_1 &lt;&gt;(corresponding to frequencies &lt;b&gt;f1&gt;f2 &lt;/b&gt;) and &lt;b&gt;N_2 &lt;&gt;. The actual relationship between &lt;b&gt;N_1 &lt;/b&gt;and &lt;b&gt;N_2 &lt;/b&gt;is &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1085" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn20.gif" border="0" height="99" width="175" /&gt;&lt;br /&gt;Equation 3.20 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;or&lt;/span&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1086" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn21.gif" border="0" height="102" width="200" /&gt;&lt;br /&gt;Equation 3.21 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;In other words, at lower frequencies the sampling rate can be decreased which will save a considerable amount of computation time. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;It should be noted at this time, however, that the &lt;span class="SpellE"&gt;discretization&lt;/span&gt; can be done in any way without any restriction as far as the analysis of the signal is concerned. If synthesis is not required, even the Nyquist &lt;span class="GramE"&gt;criteria does&lt;/span&gt; not need to be satisfied. The restrictions on the &lt;span class="SpellE"&gt;discretization&lt;/span&gt; and the sampling rate become important if, and only if, the signal reconstruction is desired. &lt;span class="SpellE"&gt;Nyquist's&lt;/span&gt; sampling rate is the minimum sampling rate that allows the original &lt;b&gt;continuous time &lt;/b&gt;signal to be reconstructed from its &lt;b&gt;discrete &lt;/b&gt;samples. The basis vectors that are mentioned earlier are of particular importance for this reason. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;As mentioned earlier, the wavelet &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;b&gt;psi&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;span class="SpellE"&gt;&lt;b&gt;tau,s&lt;/b&gt;&lt;/span&gt;&lt;b&gt;) &lt;/b&gt;satisfying Equation 3.18, allows reconstruction of the signal by Equation 3.17. However, this is true for the continuous transform. The question is: can we still reconstruct the signal if we &lt;span class="SpellE"&gt;discretize&lt;/span&gt; the time and scale parameters? The answer is ``yes'', under certain conditions (as they always say in commercials: certain restrictions &lt;span class="GramE"&gt;apply !!!&lt;/span&gt;). &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;The scale parameter &lt;b&gt;s &lt;/b&gt;is discretized first on a logarithmic grid. The time parameter is then discretized &lt;b&gt;with respect to the scale &lt;span class="GramE"&gt;parameter &lt;span style="font-weight: normal;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; i.e., a different sampling rate is used for every scale. In other words, the sampling is done on the &lt;b&gt;dyadic &lt;/b&gt;sampling grid shown in Figure &lt;span class="GramE"&gt;3.17 :&lt;/span&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1087" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt17.gif" border="0" height="496" width="641" /&gt;&lt;br /&gt;Figure 3.17 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;Think of the area covered by the axes as the entire time-scale plane. The CWT assigns a value to the continuum of points on this plane. Therefore, there are an infinite number of CWT coefficients. First consider the &lt;span class="SpellE"&gt;discretization&lt;/span&gt; of the scale axis. Among that infinite number of points, only a finite number are taken, using a logarithmic rule. The base of the logarithm depends on the user. The most common value is &lt;b&gt;2 &lt;/b&gt;because of its convenience. If 2 is chosen, only the scales 2, 4, 8, 16, 32, 64&lt;span class="GramE"&gt;,...&lt;/span&gt;etc. are computed. If the value was 3, the scales 3, 9, 27, 81, 243&lt;span class="GramE"&gt;,...&lt;/span&gt;etc. would have been computed. The time axis is then discretized according to the &lt;span class="SpellE"&gt;discretization&lt;/span&gt; of the scale axis. Since the discrete scale changes by factors of &lt;span class="GramE"&gt;&lt;b&gt;2 &lt;/b&gt;,&lt;/span&gt; the sampling rate is reduced for the time axis by a factor of &lt;b&gt;2 &lt;/b&gt;at every scale. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;Note that at the lowest scale (s=2), only 32 points of the time axis are sampled (for the particular case given in Figure 3.17). At the next scale value, s=4, the sampling rate of time axis is reduced by a factor of 2 since the scale is increased by a factor of 2, and therefore, only 16 samples are taken. At the next step, s=8 and 8 samples are taken in time, and so on. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;Although it is called the time-scale plane, it is more accurate to call it the &lt;b&gt;translation-scale &lt;/b&gt;plane, because ``time'' in the transform domain actually corresponds to the shifting of the wavelet in time. For the wavelet series, the actual time is still continuous. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;Similar to the relationship between continuous Fourier transform, Fourier series and the discrete Fourier transform, there is a continuous wavelet transform, &lt;span class="GramE"&gt;a semi-discrete wavelet transform&lt;/span&gt; (also known as wavelet series) and a discrete wavelet transform. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;Expressing the above &lt;span class="SpellE"&gt;discretization&lt;/span&gt; procedure in mathematical terms, the scale &lt;span class="SpellE"&gt;discretization&lt;/span&gt; is &lt;b&gt;s = s_0^&lt;span class="GramE"&gt;j &lt;span style="font-weight: normal;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; and translation &lt;span class="SpellE"&gt;discretization&lt;/span&gt; is &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt; = k.s_0^j.tau_0 &lt;/b&gt;where &lt;b&gt;s_0&gt;1 &lt;/b&gt;and &lt;b&gt;tau_0&gt;0 &lt;/b&gt;. Note, how the translation &lt;span class="SpellE"&gt;discretization&lt;/span&gt; is dependent on scale &lt;span class="SpellE"&gt;discretization&lt;/span&gt; with &lt;b&gt;s_&lt;span class="GramE"&gt;0 &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;The continuous wavelet function &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1088" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn22.gif" border="0" height="103" width="330" /&gt;&lt;br /&gt;Equation 3.22 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1089" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn23.gif" border="0" height="95" width="385" /&gt;&lt;br /&gt;Equation 3.23 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;by&lt;/span&gt; inserting &lt;b&gt;s = s_0^j &lt;/b&gt;, and &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt; = k.s_0^j.tau_0 &lt;/b&gt;. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;If &lt;b&gt;{&lt;span class="SpellE"&gt;psi&lt;/span&gt;&lt;span class="GramE"&gt;_(&lt;/span&gt;&lt;span class="SpellE"&gt;j,k&lt;/span&gt;)} &lt;/b&gt;constitutes an &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; basis, the wavelet series transform becomes &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1090" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn24.gif" border="0" height="76" width="303" /&gt;&lt;br /&gt;Equation 3.24 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;or&lt;/span&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1091" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn25.gif" border="0" height="80" width="358" /&gt;&lt;br /&gt;Equation 3.25 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;o:p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt; &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/o:p&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;A wavelet series requires that &lt;b&gt;{&lt;span class="SpellE"&gt;psi&lt;/span&gt;&lt;span class="GramE"&gt;_(&lt;/span&gt;&lt;span class="SpellE"&gt;j,k&lt;/span&gt;)} &lt;/b&gt;are either &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt;, &lt;span class="SpellE"&gt;biorthogonal&lt;/span&gt;, or frame. If &lt;b&gt;{&lt;span class="SpellE"&gt;psi&lt;/span&gt;&lt;span class="GramE"&gt;_(&lt;/span&gt;&lt;span class="SpellE"&gt;j,k&lt;/span&gt;)} &lt;/b&gt;are not &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt;, Equation 3.24 becomes &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;img id="_x0000_i1092" src="http://users.rowan.edu/%7Epolikar/WAVELETS/wt_eqn26.gif" border="0" height="76" width="298" /&gt;&lt;br /&gt;Equation 3.26 &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;br /&gt;&lt;span class="GramE"&gt;where&lt;/span&gt; &lt;b&gt;hat{ &lt;span class="SpellE"&gt;psi&lt;/span&gt;_{&lt;span class="SpellE"&gt;j,k&lt;/span&gt;}^*(t)} &lt;/b&gt;, is either the &lt;b&gt;dual &lt;span class="SpellE"&gt;biorthogonal&lt;/span&gt; basis &lt;/b&gt;or &lt;b&gt;dual frame &lt;/b&gt;(Note that &lt;b&gt;* &lt;/b&gt;denotes the conjugate). &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;If &lt;b&gt;{&lt;span class="SpellE"&gt;psi&lt;/span&gt;&lt;span class="GramE"&gt;_(&lt;/span&gt;&lt;span class="SpellE"&gt;j,k&lt;/span&gt;) } &lt;/b&gt;are &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; or &lt;span class="SpellE"&gt;biorthogonal&lt;/span&gt;, the transform will be non-redundant, where as if they form a frame, the transform will be redundant. On the other hand, it is much easier to find frames than it is to find &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; or &lt;span class="SpellE"&gt;biorthogonal&lt;/span&gt; bases. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;The following analogy may clear this concept. Consider the whole process as looking at a particular object. The human eyes first determine the coarse view which depends on the distance of the eyes to the object. This corresponds to adjusting the scale parameter &lt;b&gt;s_0&lt;span class="GramE"&gt;^(&lt;/span&gt;-j)&lt;/b&gt;. When looking at a very close object, with great detail, &lt;b&gt;j &lt;/b&gt;is negative and large (low scale, high frequency, analyses the detail in the signal). Moving the head (or eyes) very slowly and with very small increments (of angle, of distance, depending on the object that is being viewed), corresponds to small values of &lt;span class="SpellE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;b&gt; = k.s_0^j.tau_&lt;span class="GramE"&gt;0 &lt;span style="font-weight: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt; Note that when &lt;b&gt;j &lt;/b&gt;is negative and large, it corresponds to small changes in time, &lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;b&gt;tau&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;b&gt; &lt;/b&gt;,&lt;/span&gt; (high sampling rate) and large changes in &lt;b&gt;s_0^-j &lt;/b&gt;(low scale, high frequencies, where the sampling rate is high). The scale parameter can be thought of as magnification too. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;How low can the sampling rate be and still allow reconstruction of the signal? This is the main question to be answered to optimize the procedure. The most convenient value (in terms of programming) is found to be ``2'' for s_0 and "1" for &lt;span class="SpellE"&gt;tau&lt;/span&gt;. Obviously, when the sampling rate is forced to be as low as possible, the number of available &lt;span class="SpellE"&gt;orthonormal&lt;/span&gt; wavelets is also reduced. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;The continuous wavelet transform examples that were given in this chapter were actually the wavelet series of the given signals. The parameters were chosen depending on the signal. Since the reconstruction was not needed, the sampling rates were sometimes far below the critical value where s_0 varied from 2 to 10, and tau_0 varied from 2 to 8, for different examples. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;This concludes Part III of this tutorial. I hope you now have a basic understanding of what the wavelet transform is all about. There is one thing left to be discussed however. Even though the discretized wavelet transform can be computed on a computer, this computation may take anywhere from a couple seconds to couple hours depending on your signal size and the resolution you want. An amazingly fast algorithm is actually available to compute the wavelet transform of a signal. The discrete wavelet transform (DWT) is introduced in the final chapter of this tutorial, in Part IV. &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;Let's meet at the grand finale, shall we? &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;  &lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;pre style="text-align: center;"&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/b&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/33845523-7949741353497095068?l=phongwork.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://phongwork.blogspot.com/feeds/7949741353497095068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=33845523&amp;postID=7949741353497095068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7949741353497095068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/33845523/posts/default/7949741353497095068'/><link rel='alternate' type='text/html' href='http://phongwork.blogspot.com/2006/11/wavelet-tutorial-iii.html' title='The Wavelet Tutorial III'/><author><name>Stop The Wind</name><uri>http://www.blogger.com/profile/14702304709512893712</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-33845523.post-1288878200587143416</id><published>2006-11-17T05:11:00.000-08:00</published><updated>2006-11-17T05:12:16.498-08:00</updated><title type='text'>The Wavelet Tutorial II</title><content type='html'>&lt;h1 style="text-align: center;" align="center"&gt;&lt;span style="font-variant: small-caps;"&gt;The Wavelet Tutorial&lt;br /&gt;Part 2&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/h1&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;br /&gt;&lt;span class="GramE"&gt;by&lt;/span&gt; &lt;/p&gt;  &lt;h3 style="text-align: center;" align="center"&gt;&lt;a href="http://users.rowan.edu/%7Epolikar"&gt;ROBI POLIKAR&lt;o:p&gt;&lt;/o:p&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1025" src="http://users.rowan.edu/%7Epolikar/GIFS/colorbar.gif" border="0" height="7" width="623" /&gt;&lt;/p&gt;  &lt;h3 style="text-align: center;" align="center"&gt;FUNDAMENTALS:&lt;br /&gt;&lt;br /&gt;THE FOURIER TRANSFORM&lt;br /&gt;AND&lt;br /&gt;THE SHORT TERM FOURIER TRANSFORM &lt;/h3&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1026" src="http://users.rowan.edu/%7Epolikar/WAVELETS/stft2.gif" border="0" height="399" width="522" /&gt;&lt;/p&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;h3 style="text-align: center;" align="center"&gt;FUNDAMENTALS &lt;/h3&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;p&gt;Let's have a short review of the first part.&lt;br /&gt;We basically need Wavelet Transform (WT) to analyze non-stationary signals, i.e., whose frequency response varies in time. I have written that Fourier Transform (FT) is not suitable for non-stationary signals, and I have shown examples of it to make it &lt;span class="GramE"&gt;more clear&lt;/span&gt;. For a quick recall, let me give the following example. &lt;/p&gt;  &lt;p&gt;Suppose we have two different signals. Also suppose that they both have the same spectral components, with one major difference. Say one of the signals &lt;span class="GramE"&gt;have&lt;/span&gt; four frequency components at all times, and the other have the same four frequency components at different times. The FT of both of the signals would be the same, as shown in the example in part 1 of this tutorial. Although the two signals are completely different, their (magnitude of) FT are the &lt;span class="GramE"&gt;SAME &lt;b&gt;!&lt;/b&gt;.&lt;/span&gt; &lt;span class="GramE"&gt;This,&lt;/span&gt; obviously tells us that we can not use the FT for non-stationary signals. &lt;/p&gt;  &lt;p&gt;&lt;b&gt;But why does this happen?&lt;/b&gt; In other words, how come both of the signals have the same FT? &lt;b&gt;HOW DOES FOURIER TRANSFORM WORK ANYWAY?&lt;/b&gt; &lt;/p&gt;  &lt;h4&gt;An Important Milestone in Signal Processing: &lt;/h4&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;h2 style="text-align: center;" align="center"&gt;THE FOURIER TRANSFORM &lt;/h2&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;p&gt;I will not go into the details of FT for two reasons:&lt;br /&gt;1. &lt;span class="GramE"&gt;It&lt;/span&gt; is too wide of a subject to discuss in this tutorial.&lt;br /&gt;2. It is not our main concern anyway.&lt;br /&gt;However, I would like to mention a couple important points again for two reasons&lt;span class="GramE"&gt;:&lt;/span&gt;&lt;br /&gt;1. It is a necessary background to understand how WT works.&lt;br /&gt;2. It has been by far the most important signal processing tool for many (and I mean many &lt;span class="SpellE"&gt;many&lt;/span&gt;) years. &lt;/p&gt;  &lt;p&gt;In 19th century (1822*, to be exact, but you do not need to know the exact time. Just trust me that it is far before than you can remember), the French mathematician J. Fourier, showed that any periodic function can be expressed as an infinite sum of periodic complex exponential functions. Many years after he had discovered this remarkable property of (periodic) functions, his ideas were generalized to first non-periodic functions, and then periodic or non-periodic discrete time signals. It is after this generalization that it became a very suitable tool for computer calculations. In 1965, a new algorithm called fast Fourier Transform (FFT) was developed and FT became even more popular. &lt;/p&gt;  &lt;p&gt;(* I thank Dr. &lt;span class="SpellE"&gt;Pedregal&lt;/span&gt; for the valuable information he has provided) &lt;/p&gt;  &lt;p&gt;Now let us take a look at how Fourier &lt;span class="GramE"&gt;transform&lt;/span&gt; works:&lt;br /&gt;FT decomposes a signal to complex exponential functions of different frequencies. The way it does this, is defined by the following two equations: &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1031" src="http://users.rowan.edu/%7Epolikar/WAVELETS/fteq.gif" border="0" height="160" width="418" /&gt;&lt;br /&gt;Figure 2.1&lt;/p&gt;  &lt;p&gt;In the above equation, &lt;b&gt;t&lt;/b&gt; stands for time, &lt;b&gt;f&lt;/b&gt; stands for frequency, and &lt;b&gt;x&lt;/b&gt; denotes the signal at hand. Note that &lt;b&gt;x&lt;/b&gt; denotes the signal in time domain and the &lt;b&gt;X&lt;/b&gt; denotes the signal in frequency domain. This convention is used to distinguish the two representations of the signal. Equation (1) is called the &lt;b&gt;Fourier transform of &lt;span class="GramE"&gt;x(&lt;/span&gt;t)&lt;/b&gt;, and equation (2) is called the &lt;b&gt;inverse Fourier transform of X(f)&lt;/b&gt;, which is x(t). &lt;/p&gt;  &lt;p&gt;For those of you who have been using the Fourier transform are already familiar with this. Unfortunately many people use these equations without knowing the underlying principle. &lt;/p&gt;  &lt;p&gt;Please take a closer look at equation (1): &lt;/p&gt;  &lt;p&gt;The signal &lt;span class="GramE"&gt;x(&lt;/span&gt;t), is multiplied with an exponential term, &lt;b&gt;at some certain frequency "f" &lt;/b&gt;, and then integrated over &lt;b&gt;ALL TIMES !!!&lt;/b&gt; (The key words here are "all times&lt;span class="GramE"&gt;" ,&lt;/span&gt; as will explained below). &lt;/p&gt;  &lt;p&gt;Note that the exponential term in &lt;span class="SpellE"&gt;Eqn&lt;/span&gt;. (1) can also be written as: &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;span class="SpellE"&gt;&lt;span class="GramE"&gt;&lt;b&gt;Cos&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="GramE"&gt;&lt;b&gt;(&lt;/b&gt;&lt;/span&gt;&lt;b&gt;2.pi.f.t)+&lt;span class="SpellE"&gt;j.Sin&lt;/span&gt;(2.pi.f.t).......(3) &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The above expression has a real part of cosine of frequency &lt;b&gt;f&lt;/b&gt;, and an imaginary part of sine of frequency &lt;b&gt;f&lt;/b&gt;. So what we are actually doing is, multiplying the original signal with a complex expression which has &lt;span class="SpellE"&gt;sines&lt;/span&gt; and cosines of frequency &lt;b&gt;f&lt;/b&gt;. Then we integrate this product. In other words, we add all the points in this product. If the result of this integration (which is nothing but some sort of infinite summation) is a large value, then we say &lt;span class="GramE"&gt;that :&lt;/span&gt; &lt;b&gt;the signal x(t), has a dominant spectral component at frequency "f"&lt;/b&gt;. This means that, a major portion of this signal is composed of frequency &lt;b&gt;f&lt;/b&gt;. If the integration result is a small value, than this means that the signal does not have a major frequency component of &lt;b&gt;f&lt;/b&gt; in it. If this integration result is zero, then the signal does not contain the frequency "f" at all. &lt;/p&gt;  &lt;p&gt;It is of particular interest here to see how this integration works: The signal is multiplied with the sinusoidal term of frequency "f". If the signal has a high amplitude component of frequency "f", then that component and the sinusoidal term will coincide, and the product of them will give &lt;b&gt;a (relatively) large value&lt;/b&gt;. This shows that, the signal "x&lt;span class="GramE"&gt;",&lt;/span&gt; has a major frequency component of "f". &lt;/p&gt;  &lt;p&gt;However, if the signal does not have a frequency component of "f", the product will yield zero, which shows that, the signal does not have a frequency component of "f". If the frequency "f", is not a major component of the signal "&lt;span class="GramE"&gt;x(&lt;/span&gt;t)", then the product will give &lt;b&gt;a (relatively) small value&lt;/b&gt;. This shows that, the frequency component "f" in the signal "x", has &lt;span class="GramE"&gt;a small&lt;/span&gt; amplitude, in other words, it is not a major component of "x". &lt;/p&gt;  &lt;p&gt;Now, note that the integration in the transformation equation (&lt;span class="SpellE"&gt;Eqn&lt;/span&gt;. 1) is over time. The left hand side of (1), however, is a function of frequency. Therefore, the integral in (1), is calculated for every value of &lt;b&gt;f&lt;/b&gt;. &lt;/p&gt;  &lt;p&gt;&lt;span class="GramE"&gt;&lt;b&gt;IMPORTANT(&lt;/b&gt;&lt;/span&gt;&lt;b&gt;!) &lt;/b&gt;The information provided by the integral, corresponds to all time instances, since the integration is from minus infinity to plus infinity over time. It follows that no matter where in time the component with frequency "f" appears, it will affect the result of the integration equally as well. In other words, whether the frequency component "f" appears at time t1 or &lt;span class="GramE"&gt;t2 ,&lt;/span&gt; it will have the same effect on the integration. This is why &lt;b&gt;Fourier transform is not suitable if the signal has time varying frequency&lt;/b&gt;, i.e., the signal is &lt;b&gt;non-stationary.&lt;/b&gt; If only, the signal has the frequency component "f" at all times (for all "f" values), then the result obtained by the Fourier transform makes sense. &lt;/p&gt;  &lt;p&gt;Note that &lt;b&gt;the Fourier transform tells whether a certain frequency component exists or not.&lt;/b&gt; This information is independent of where in time this component appears. It is therefore very important to know whether a signal is stationary or not, prior to processing it with the FT. &lt;/p&gt;  &lt;p&gt;The example given in part one should now be clear. I would like to give it here again: &lt;/p&gt;  &lt;p&gt;Look at the following figure, which shows the signal: &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;b&gt;x(t)=&lt;span class="SpellE"&gt;cos&lt;/span&gt;(2*pi*5*t)+&lt;span class="SpellE"&gt;cos&lt;/span&gt;(2*pi*10*t)+&lt;span class="SpellE"&gt;cos&lt;/span&gt;(2*pi*20*t)+&lt;span class="SpellE"&gt;cos&lt;/span&gt;(2*pi*50*t)&lt;/b&gt; &lt;/p&gt;  &lt;p&gt;&lt;span class="GramE"&gt;that&lt;/span&gt; is , it has four frequency components of 5, 10, 20, and 50 Hz., all occurring at all times. &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1032" src="http://users.rowan.edu/%7Epolikar/WAVELETS/cosfourfreq.gif" border="0" height="407" width="471" /&gt;&lt;br /&gt;Figure 2.2 &lt;/p&gt;  &lt;p&gt;And here is the FT of it. The frequency axis has been cut here, but theoretically it extends to infinity (for continuous Fourier transform (CFT). Actually, here we calculate the discrete Fourier transform (DFT), in which case the frequency axis goes up to (at least) twice the sampling frequency of the signal, and the transformed signal is symmetrical. However, this is not that important at this time.) &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1033" src="http://users.rowan.edu/%7Epolikar/WAVELETS/fftcosfourfreq.gif" border="0" height="406" width="477" /&gt;&lt;br /&gt;Figure 2.3 &lt;/p&gt;  &lt;p&gt;Note the four peaks in the above figure, which correspond to four different frequencies. &lt;/p&gt;  &lt;p&gt;Now, look at the following figure: Here the signal is again the cosine signal, and it has the same four frequencies. However, these components occur at &lt;b&gt;different times&lt;/b&gt;. &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1034" src="http://users.rowan.edu/%7Epolikar/WAVELETS/nonstationary.gif" border="0" height="406" width="481" /&gt;&lt;br /&gt;Figure 2.4 &lt;/p&gt;  &lt;p&gt;And here is the Fourier transform of this signal: &lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: center;" align="center"&gt;&lt;img id="_x0000_i1035" src="http://users.rowan.edu/%7Epolikar/WAVELETS/fftnonstationary.gif" border="0" height="407" width="476" /&gt;&lt;br /&gt;Figure 2.5 &lt;/p&gt;  &lt;p&gt;What you are supposed to see in the above figure, is it is (almost) same with the previous FT figure. Please look carefully and note the major four peaks corresponding to 5, 10, 20, and 50 Hz. I could have made this figure look very similar to the previous one, but I did not do that on purpose. The &lt;span class="GramE"&gt;reason of the noise like thing in between peaks show&lt;/span&gt; that, those frequencies also exist in the signal. But the reason they have a small &lt;span class="GramE"&gt;amplitude ,&lt;/span&gt; is because, &lt;b&gt;they are not major spectral components of the given signal&lt;/b&gt;, and the reason we see those, is because of the sudden change between the frequencies. Especially note how time domain signal changes at around time 250 (ms) (With some suitable filtering techniques, the noise like part of the frequency domain signal can be cleaned, but this has not &lt;span class="GramE"&gt;nothing&lt;/span&gt; to do with our subject now. If you need further information please send me an e-mail). &lt;/p&gt;  &lt;p&gt;By this time you should have understood the basic concepts of Fourier transform, when we can use it and we can not. As you can see from the above example, FT cannot distinguish the two signals very well. To FT, both signals are the same, because they constitute of the same frequency components. Therefore, FT is not a suitable tool for analyzing non-stationary signals, i.e., signals with time varying spectra. &lt;/p&gt;  &lt;p&gt;Please keep this very important property in mind. Unfortunately, many people using the FT do not think of this. They assume that the signal they have is stationary where it is not in many practical cases. Of course if you are not interested in&lt;b&gt; at what times these frequency components occur&lt;/b&gt;, but only interested in what frequency components exist, then FT can be a suitable tool to use. &lt;/p&gt;  &lt;p&gt;So, now that we know that we can not use (well, we can, but we shouldn't) FT for non-stationary signals, what are we going to do? &lt;/p&gt;  &lt;p&gt;Remember that, I have mentioned that wavelet transform is only (about) a decade old. You may wonder if researchers noticed this non-&lt;span class="SpellE"&gt;stationarity&lt;/span&gt; business only ten years ago or not. &lt;/p&gt;  &lt;p&gt;&lt;span class="GramE"&gt;Obviously not.&lt;/span&gt; &lt;/p&gt;  &lt;p&gt;Apparently they must have done something about it before they figured out the wavelet transform....?&lt;br /&gt;&lt;br /&gt;Well..., they sure did...&lt;br /&gt;&lt;br /&gt;They have come up &lt;span class="GramE"&gt;with ...&lt;/span&gt;&lt;/p&gt;  &lt;h5 style="text-align: center;" align="center"&gt;LINEAR TIME FREQUENCY REPRESENTATIONS &lt;/h5&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;h2 style="text-align: center;" align="center"&gt;THE SHORT TERM FOURIER TRANSFORM &lt;/h2&gt;  &lt;div class="MsoNormal" style="text-align: center;" align="center"&gt;  &lt;hr align="center" size="2" width="100%"&gt;  &lt;/div&gt;  &lt;p&gt;So, how are we going to insert this time business into our frequency plots? Let's look at the problem in hand little more &lt;span class="GramE"&gt;closer&lt;/span&gt;. &lt;/p&gt;  &lt;p&gt;What was wrong with FT? It did not work for non-stationary signals. Let's think this: &lt;b&gt;Can we assume &lt;span class="GramE"&gt;that ,&lt;/span&gt; some portion of a non-stationary signal is stationary? &lt;/b&gt;&lt;/p&gt;  &lt;p&gt;The answer is yes. &lt;/p&gt;  &lt;p&gt;Just look at the third figure above. The signal is stationary every 250 time unit intervals. &lt;/p&gt;  &lt;p&gt;You may ask the following question? &lt;/p&gt;  &lt;p&gt;What if the part that we can consider to be stationary is very small? &lt;/p&gt;  &lt;p&gt;Well, if it is too small, it is too small. There is nothing we can do about that, and actually, there is nothing wrong with that either. We have to play this game with the physicists' rules. &lt;/p&gt;  &lt;p&gt;If this region where the signal can be assumed to be stationary is too small, then we look at that signal from narrow windows, narrow enough that the portion of the signal seen from these windows are indeed stationary. &lt;/p&gt;  &lt;p&gt;This approach of researchers ended up with a &lt;b&gt;revised &lt;/b&gt;version of the Fourier transform, so-&lt;span class="GramE"&gt;called :&lt;/span&gt; The Short Time Fourier Transform (STFT) . &lt;/p&gt;  &lt;p&gt;There is only a minor difference between STFT and FT. In STFT, the signal is divided into small enough segments, where these segments (portions) of the signal can be assumed to be stationary. For this purpose, a window function &lt;b&gt;"w"&lt;/b&gt; is chosen. The width of this windo
