LPI.gdf | R Documentation |
Lag Profile Inversion with gdf files
LPI.gdf( ... )
... |
Arguments to be passed for functions that parse the final LPI input argument list. Accepts a reference to a stored input argument file and / or direct command line arguments. All parameters have default values which are used if the parameter is not found elsewhere. Following arguments are effective:
|
The final argument list is constructed from default values, values read from the optional parameter file, and command line arguments. Priorities of these, from lowest to highest, are defaults, values from a file, and command line arguments. Name collisions are solved by selecting the option with highest priority. In other words, command line arguments will override both defaults and file input, and file input will override the defaults. Defaults are used only if nothing else is available.
Usually a file that the analysis has automatically stored in a previous LPI run. The file is stored in the output directory ('resultDir') under the name "LPIparam.Rdata". Giving such a file as an input argument is the simplest way to restart an analysis with identical parameters. It is also possible to e.g. store parameters specific to an experiment in a file in order to avoid long input argument lists.
A vector of time lag limits. The vector is first divided with filterLength.us, then rounded to nearest integer, and finally possible dublicate values are removed. Output of this process is a vector lagLimits = c( l1, l2, l3, lN ). The analysis then integrates lags l1, l1+1, ... l2-1 (of decimated data) into lag profile 1, lags l2, l2+1, ... l3-1 into lag profile 2, etc. As an example, in order to decimate data to 10 us sample rate and to calculate all lags up to 100 us separately, one would use filterLength.us=10 and lagLimits.us = c(10,20,30,40,50,60,70,80,90,100,110). The steps in lagLimits.us do not need to be of equal length. It is possible to use coarser lag resolution at longer lags by selecting e.g. lagLimits.us = c(10,20,30,50,70,90,110).
A vector of range-gate limits. The vector is first converted into time-delays assuming that signal propagates at speed of light, then decimated to filterLength.us sample rate, and possible duplicate values are removed. Range-gates are then defined in exactly the same way as lag-gates (see above).
Allows one to reduce the number of range-gates at selected lags. If the vector is shorter than lagLimits.us its last value is repeated as necessary. Defaults to Inf, which means that all lags are solved at all range gates defined in rangeLimits.km.
maxRanges.km may be used in combined D/E/F-region experiments when correlations longer than certain limit are known to exist only in D-region. As an example, in order to solve first 30 lags at all range gates, but the longer ones only below 100 km, one can use maxRanges.km = c( rep( Inf , 30 ) , 100 ).
Another use case is a dedicated D region experiment that makes use of voltage level decoding. Most time lags will then have zero range ambiguity functions and can be safely skipped. Assuming that modulation bit length is 2 us and inter-pulse period is 1 ms, one could use e.g. the following combination: filterLength.us=2, decodingFilter='matched', lagLimits.us=c(1000,1002,2000,2002,3000,3002), maxRanges=c(Inf,0,Inf,0,Inf) which would solve three pulse-to-pulse lags and save the analysis from inspecting all time lags (only 1 in 500 of them can actually be measured).
A vector c( year , month , day , hour , minute , seconds ) of the desired analysis start time. If data is available from the given time, this is the start time of the first integration period. If data is not available from this time, the first integration period is still aligned with "beginTime", and the analys is started from the first available data sample that was recorded after "beginTime". Notice that, in order to make the software more suitable for real-time analysis, the *latest* available data is always used first, and the first integration period may thus be the last to actually analyse.
A vector c( year , month , day , hour , minute , seconds ) of the analysis end time. Data samples recorded after "endTime" are not used.
Frequency offset from baseband to the signal centre frequency. Currently only one frequency per data vector, i.e. either a single offset for all data, or different shifts for "RX1", "RX2", "TX1", and "TX2". See the details for "dataDir" for instructions.
Additional adjustments to the TX (and) RX indices returned by 'dataInputFunction'. The user input is converted into a list with entries "RX1", "RX2", "TX1", and "TX2" in the way explained in details for "dataDir". Each entry is a two-element vector c( shift1, shift2 ) where, in case of TX, shift1 is the adjustment at rising edge of each pulse, and shift2 is the adjustment at falling edge of each pulse. For RX, shift1 is the adjustment at each start of reception, and shift2 at end of reception. All shifts are positive forwards, use negative values to adjust towards earlier times. As an example, if the recorded TX bit for "TX1" starts 10 us *before* the actual pulse, and ends 20 us *after* the actual end of the pulse, one should have indexShifts.us["TX1"] == c(10,-20).
Either a character string of a single data directory, or a named vector of several data directories. The internally used "dataDir" is always a vector with entries "RX1", "RX2", "TX1", and "TX2", some or all of which may be equal. The analysis calculates lagged products in between data samples from "RX1" and "RX2", and range ambiguity functions as lagged products in between data samples from "TX1" and "TX2". The internally used list is formed from user input as follows:
1. If the input vector contains any of the entries "RX1", "RX2", "TX1", "TX2", they are copied as such.
2. If any of the four entries is missing after step 1, the input is searched for "RX", which is used to replace missing "RX1" and / or "RX2". A similar search is performed for "TX".
3. If any of the four entries is missig after steps 1 and 2, the input is searched for "TR1", which is used to replace "RX1" and / or "TX1". A similar search is performed for "TR2"
4. If any of the four entries is missing after steps 1 to 3, the *unnamed* elements of the input vector are repeated until a vector of length 4 is formed, and its elements are named "RX1", "RX2", "TX1", and "TX2".
5. If still unsuccessfull, i.e. the input vector was either empty or it contained only named entries with unknown names, the analysis will stop with an error message.
Ilkka Virtanen (University of Oulu, Finland)
ilkka.i.virtanen@oulu.fi
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.