Mercurial > hg > ltpda
diff m-toolbox/html_help/help/ug/ao_create_content.html @ 0:f0afece42f48
Import.
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 23 Nov 2011 19:22:13 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/m-toolbox/html_help/help/ug/ao_create_content.html Wed Nov 23 19:22:13 2011 +0100 @@ -0,0 +1,341 @@ +<!-- $Id: ao_create_content.html,v 1.9 2009/09/30 21:39:43 ingo Exp $ --> + <p>Analysis objects can be created in MATLAB in many ways. Apart from being created by the many + algorithms in the LTPDA Toolbox, AOs can also be created from initial data or descriptions + of data. The various <i>constructors</i> + are listed in the function help: <a href="matlab:doc('ao')">ao help</a>.</p> + + <h3>Examples of creating AOs</h3> + + <p>The following examples show some ways to create Analysis Objects.</p> + + <ul> + <li><a href="ao_create.html#text">Creating AOs from text files</a></li> + <li><a href="ao_create.html#xml">Creating AOs from XML or MAT files</a></li> + <li><a href="ao_create.html#fcn">Creating AOs from MATLAB functions</a></li> + <li><a href="ao_create.html#tsfcn">Creating AOs from functions of time</a></li> + <li><a href="ao_create.html#window">Creating AOs from window functions</a></li> + <li><a href="ao_create.html#waveform">Creating AOs from waveform descriptions</a></li> + <li><a href="ao_create.html#pzmodel">Creating AOs from pole zero models</a></li> + </ul> + + <hr> + <h4><a name="text"></a>Creating AOs from text files.</h4> + + <p>Analysis Objects can be created from text files containing two columns of ASCII numbers. Files + ending in '.txt' or '.dat' will be handled as ASCII file inputs. The + first column is taken to be the time instances; the second column is taken to be the amplitude + samples. The created AO is of type <tt>tsdata</tt> with the sample rate set by the difference + between the time-stamps of the first two samples in the file. The name of the resulting AO is + set to the filename (without the file extension). The filename is also stored as a parameter in + the history parameter list. The following code shows this in action:</p> + + <div class="fragment"><pre> + >> a = ao(<span class="string">'data.txt'</span>) + ----------- ao 01: data.txt_01_02 ----------- + + name: data.txt_01_02 + data: (0,-1.06421341288933) (0.1,1.60345729812004) (0.2,1.23467914689078) ... + -------- tsdata 01 ------------ + + fs: 10 + x: [100 1], double + y: [100 1], double + dx: [0 0], double + dy: [0 0], double + xunits: [s] + yunits: [] + nsecs: 10 + t0: 1970-01-01 00:00:00.000 + ------------------------------- + + hist: ao / ao / SId: fromDatafile ... $-->$Id: ao ... S + mdlfile: empty + description: + UUID: e6ccfcb6-da49-4f4c-8c2c-3054fe5d2762 + --------------------------------------------- + </pre></div> + <p>As with most constructor calls, an equivalent action can be achieved using an input + <a href="plist_intro.html">Parameter List</a>.</p> + + <div class="fragment"><pre> + >> a = ao(plist(<span class="string">'filename'</span>, <span class="string">'data.txt'</span>)) + </pre></div> + + <hr> + <h4><a name="xml"></a>Creating AOs from XML or .mat files</h4> + + <p>AOs can be saved as both XML and .MAT files. As such, they can also be created from these + files.</p> + + <div class="fragment"><pre> + >> a = ao(<span class="string">'a.xml'</span>) + ----------- ao 01: a ----------- + + name: None + data: (0,-0.493009815316451) (0.1,-0.180739356415037) (0.2,0.045841105713705) ... + -------- tsdata 01 ------------ + + fs: 10 + x: [100 1], double + y: [100 1], double + dx: [0 0], double + dy: [0 0], double + xunits: [s] + yunits: [] + nsecs: 10 + t0: 1970-01-01 00:00:01.000 + ------------------------------- + + hist: ao / ao / SId: fromVals ... $-->$Id: ao ... S + mdlfile: empty + description: + UUID: 2fed6155-6468-4533-88f6-e4b27bc6e1aa + -------------------------------- + </pre></div> + + <hr> + <h4><a name="fcn"></a>Creating AOs from MATLAB functions</h4> + + <p>AOs can be created from any valid MATLAB function which returns a vector or matrix of values. + For such calls, a parameter list is used as input. For example, the following code creates + an AO containing 1000 random numbers:</p> + + <div class="fragment"><pre> + >> a = ao(plist(<span class="string">'fcn'</span>, <span class="string">'randn(1000,1)'</span>)) + ----------- ao 01: a ----------- + + name: None + data: -1.28325610460477 -2.32895451628334 0.901931466951714 -1.83563868373519 0.06675 ... + -------- cdata 01 ------------ + y: [1000x1], double + dy: [0x0], double + yunits: [] + ------------------------------ + + hist: ao / ao / SId: fromFcn ... $-->$Id ... $ + mdlfile: empty + description: + UUID: 0072f8d0-f804-472b-a4aa-e9ec6a8de803 + -------------------------------- + </pre></div> + <p>Here you can see that the AO is a <tt>cdata</tt> type and the name is set to be the function + that was input.</p> + + <hr> + <h4><a name="tsfcn"></a>Creating AOs from functions of time</h4> + + <p>AOs can be created from any valid MATLAB function which is a function of the variable + <tt>t</tt>. For such calls, a parameter list is used as input. For example, the following + code creates an AO containing sinusoidal signal at 1Hz with some additional Gaussian noise:</p> + + <div class="fragment"><pre> + pl = plist(); + pl = append(pl, <span class="string">'nsecs'</span>, 100); + pl = append(pl, <span class="string">'fs'</span>, 10); + pl = append(pl, <span class="string">'tsfcn'</span>, <span class="string">'sin(2*pi*1*t)+randn(size(t))'</span>); + a = ao(pl) + ----------- ao 01: a ----------- + + name: None + data: (0,1.37694916561229) (0.1,-0.820427237640771) (0.2,1.09228819960292) ... + -------- tsdata 01 ------------ + + fs: 10 + x: [1000 1], double + y: [1000 1], double + dx: [0 0], double + dy: [0 0], double + xunits: [s] + yunits: [] + nsecs: 100 + t0: 1970-01-01 00:00:00.000 + ------------------------------- + + hist: ao / ao / SId: fromTSfcn ... $-->$Id: ao ... S + mdlfile: empty + description: + UUID: c0f481cf-4bdd-4a91-bc78-6d34f8222313 + -------------------------------- + </pre></div> + <p>Here you can see that the AO is a <tt>tsdata</tt> type, as you would expect. Also note that you + need to specify the sample rate (<tt>fs</tt>) and the number of seconds of data you would like + to have (<tt>nsecs</tt>).</p> + + <hr> + <h4><a name="window"></a>Creating AOs from window functions</h4> + + <p>The LTPDA Toolbox contains a class for designing spectral windows + (see <a href="specwin.html">Spectral Windows</a>). A spectral window object can + also be used to create an Analysis Object as follows:</p> + + <div class="fragment"><pre> + >> w = specwin(<span class="string">'Hanning'</span>, 1000) + ------ specwin/1 ------- + type: Hanning + alpha: 0 + psll: 31.5 + rov: 50 + nenbw: 1.5 + w3db: 1.4382 + flatness: -1.4236 + ws: 500 + ws2: 375.000000000001 + win: [0 9.86957193144233e-06 3.94778980919441e-05 8.88238095955174e-05 0.0001579 ... + version: SId: specwin.m,v 1.67 2009/09/01 09:25:24 ingo Exp S + ------------------------ + + >> a = ao(w) + ----------- ao 01: ao(Hanning) ----------- + + name: ao(Hanning) + data: 0 9.86957193144233e-06 3.94778980919441e-05 8.88238095955174e-05 0.0001579 ... + -------- cdata 01 ------------ + y: [1x1000], double + dy: [0x0], double + yunits: [] + ------------------------------ + + hist: ao / ao / SId: fromSpecWin ... $-->$Id: ao ... S + mdlfile: empty + description: + UUID: ea1a9036-b9f5-4bdb-b3a3-211e9d697060 + ------------------------------------------ + </pre></div> + <p> + It is also possible to pass the information about the window as a plist to the ao constructor. + </p> + <div class="fragment"><pre> + >> ao(plist(<span class="string">'win'</span>, <span class="string">'Hanning'</span>, <span class="string">'length'</span>, 1000)) + ----------- ao 01: ao(Hanning) ----------- + + name: ao(Hanning) + data: 0 9.86957193144233e-06 3.94778980919441e-05 8.88238095955174e-05 0.0001579 ... + -------- cdata 01 ------------ + y: [1x1000], double + dy: [0x0], double + yunits: [] + ------------------------------ + + hist: ao / ao / SId: fromSpecWin ... -->$Id: ao ... S + mdlfile: empty + description: + UUID: 5b81f67a-45b9-43f8-a74a-bc5161fd718f + ------------------------------------------ + </pre></div> + + <p> + The example code above creates a Hanning window object with 1000 points. The call to the AO + constructor then creates a <tt>cdata</tt> type AO with 1000 points. This AO can then be multiplied + against other AOs in order to window the data. + </p> + + <hr> + <h4><a name="waveform"></a>Creating AOs from waveform descriptions</h4> + + <p> + MATLAB contains various functions for creating different waveforms, for example, + <tt>square</tt>, <tt>sawtooth</tt>. Some of these functions can be called upon to create + Analysis Objects. The following code creates an AO with a sawtooth waveform: + </p> + + <div class="fragment"><pre> + pl = plist(); + pl = append(pl, <span class="string">'fs'</span>, 100); + pl = append(pl, <span class="string">'nsecs'</span>, 5); + pl = append(pl, <span class="string">'waveform'</span>, 'Sawtooth'); + pl = append(pl, <span class="string">'f'</span>, 1); + pl = append(pl, <span class="string">'width'</span>, 0.5); + + asaw = ao(pl) + ----------- ao 01: Sawtooth ----------- + + name: Sawtooth + data: (0,-1) (0.01,-0.96) (0.02,-0.92) (0.03,-0.88) (0.04,-0.84) ... + -------- tsdata 01 ------------ + + fs: 100 + x: [500 1], double + y: [500 1], double + dx: [0 0], double + dy: [0 0], double + xunits: [s] + yunits: [] + nsecs: 5 + t0: 1970-01-01 00:00:00.000 + ------------------------------- + + hist: ao / ao / SId: fromWaveform ... $-->$Id: ao ... S + mdlfile: empty + description: + UUID: cb76c866-ee3f-47e6-bb29-290074666e43 + --------------------------------------- + </pre></div> + <p> + You can call the <tt>iplot</tt> function to view the resulting waveform: + </p> + <div class="fragment"><pre> + iplot(asaw); + </pre></div> + <img src="images/ao_create_sawtooth.png" alt="Sawtooth waveform" border="3" width="600px"> + + <hr> + <h4><a name="pzmodel"></a>Creating AOs from pole zero models</h4> + + <p> + When generating an AO from a pole zero model, the noise generator function is called. + This a method to generate arbitrarily long time series with a prescribed spectral density. + The algorithm is based on the following paper: + </p> + <p>Franklin, Joel N.: +<i> Numerical simulation of stationary and non-stationary gaussian +random processes </i>, SIAM review, Volume {<b> 7</b>}, Issue 1, page 68--80, 1965. + </p> + <p> + The Document <i> Generation of Random time series with prescribed spectra </i> by Gerhard Heinzel (S2-AEI-TN-3034) <br> corrects a mistake in the aforesaid paper and describes the practical implementation. + The following code creates an AO with a time series having a prescribed spectral density, + defined by the input pole zero model: + </p> + + <div class="fragment"><pre> + f1 = 5; + f2 = 10; + f3 = 1; + gain = 1; + fs = 10; <span class="comment">%sampling frequancy</span> + nsecs = 100; <span class="comment">%number of seconds to be generated</span> + + p = [pz(f1) pz(f2)]; + z = [pz(f3)]; + pzm = pzmodel(gain, p, z); + a = ao(pzm, nsecs, fs) + ----------- ao 01: noisegen(None) ----------- + + name: noisegen(None) + data: (0,9.20287001568168) (0.1,-3.88425345108961) (0.2,6.31042718242658) ... + -------- tsdata 01 ------------ + + fs: 10 + x: [1000 1], double + y: [1000 1], double + dx: [0 0], double + dy: [0 0], double + xunits: [s] + yunits: [] + nsecs: 100 + t0: 1970-01-01 00:00:00.000 + ------------------------------- + + hist: ao / ao / SId: fromPzmodel ... $-->$Id: ao ... S + mdlfile: empty + description: + UUID: 4a89d910-8672-475f-91cd-4fcc4b52a6b4 + --------------------------------------------- + </pre></div> +<p> + You can call the <tt>iplot</tt> function to view the resulting noise. + </p> + <div class="fragment"><pre> + iplot(a); + </pre></div> +<img src="images/ao_create_niose.png" alt="Random time series" border="3" width="600px"> +