Calculates one-dimensional filter weights.
Available in version 4.3.1 and later.
function filwgts_lanczos ( nwt  : integer, ihp  : integer, fca  : float or double, fcb  : float or double, nsigma  : numeric ) return_val [nwt] : float or double
A scalar indicating the total number of weights (must be an odd number; nwt >= 3). The more weights, the better the filter, but there is a greater loss of data.ihp
A scalar indicating the low-pass filter: ihp = 0; high-pass ihp = 1; band-pass ihp = 2.fca
A scalar indicating the cut-off frequency of the ideal high or low-pass filter: (0.0 < fca < 0.5).fcb
A scalar used only when a band-pass filter is desired. It is the second cut-off frequency (fca < fcb < 0.5).nsigma
A scalar indicating the power of the sigma factor (nsigma >= 0). Note: nsigma=1. is common.
An array of length nwt is returned. The type will be double if fca is double, and float otherwise.
Given a user-specified number of weights (must be odd), filwgts_lanczos returns a symmetrical set of weights.
The user may have to iterate using different numbers of weights to get the desired response. The usual caveats apply: the narrower the filter, the more weights required and, thus, the more data at each end that is lost.
The derived weights can be input to the function wgt_runave to apply the filter to a series if data values. Usually, the kopt=0 is chosen for wgt_runave when applying the weights to, say, a time series.
The response function (frequency and amplitude) are returned as attributes of the returned weights (say, wt). Specifically: the attributes wt@freq and wt@resp are one-dimensional arrays of length (2*nwt+3) and the same type as wt. These may be plotted for a visual examination of the filter response.
- Reference: C. Duchon
- J. Applied Meteorology; August,1979; pp 1016-1022
- Lanczos Filtering in One and Two Dimensions
i low pass 1.0 i--------- i | i | i | i | 0.0 i________|______________________________ 0.0 fca 0.5 i high pass 1.0 i ---------------------- i | i | i | i | i | 0.0 i______________|________________________ 0.0 fca 0.5 i band pass 1.0 i |------------| i | | i | | i | | i | | 0.0 i___________|____________|_______________ 0.0 fca fcb 0.5
In response to a question posted to ncl-talk.ucar.edu, Dave Allured (CU/CIRES), posted the following:
NCL's filter functions operate over discrete time steps in a time series. Their time metric is time steps, *not* calendar time or real time. This is a common point of confusion about digital filters. Therefore, the filters *do not care* about your time units or time coordinate variable. To get correct filter parameters, you must manually (or with clever programming) express your time domain parameters in terms of *time steps*. For example, if the desired filter is 10 to 50 days, and the time series is on 3-day time steps, then: dt = 3 days per time step t1 = 50 days (low frequency cutoff, expressed in time domain) t2 = 10 days (high frequency cutoff, expressed in time domain) fca = dt/t1 = 3./50. = 0.06 time steps (low frequency cutoff) fcb = dt/t2 = 3./10. = 0.30 time steps (high frequency cutoff)More filter examples are discussed here.
Note: this function is not a new one. It used to be named "filwgts_lancos", and we renamed it to reflect the correct spelling of Cornelius Lanczos' name.
This example generates the weights for a low pass filter using nine weights:
nwt = 9 fca = 0.2 ihp = 0 nsigma = 1. wgt = filwgts_lanczos (nwt, ihp, fca, -999., nsigma)
wgt@freq and wgt@resp are returned as one-dimensional arrays containing a set of frequencies and the response at each frequency.
This example generates the weights for a high pass filter using seven weights:
nwt = 7 fca = 0.4 ihp = 1 nsigma = 1. wts = filwgts_lanczos (nwt, ihp, fca, -999., nsigma)
This example generates the weights for a band pass filter using 21 weights:
nwt = 21 fca = 0.2 fcb = 0.35 ihp = 2 nsigma = 1. wts = filwgts_lanczos (nwt, ihp, fca, fcb, nsigma)
The above examples focus on 'time'. However, the function can be used for any equally spaced set of values. Consider a set of values (z) spaced 100m apart and information from (say) 500m scales and larger are desired,
nwt = 17 ihp = 0 dz = 100.0 ; m ... grid spacing (separation) d1 = 500.0 ; m fca = dz/d1 ; = 0.2 wts = filwgts_lanczos (nwt, ihp, fca, -999, 1.0)