pub struct RandomDelayProfile {
pub paths: usize,
pub max_delay: f64,
pub tau_rms: Option<f64>,
pub first_at_zero: bool,
pub n_fft: usize,
}Expand description
A channel of paths impulses whose delays are independent and uniform over
$[0, L]$ samples of the IFFT (max_delay = $L$), not on the sampling grid, of
power $e^{-\tau/\tau_{\mathrm{rms}}}$ (or all equal), the first one at delay 0 when
first_at_zero: the “synchronized” (exponential, first at 0) and “uniform” models of
Edfors et al. (1998, Sec. II). Its correlation averaged over the delays is, for one
random delay of power $w(\tau)$,
$$ E\left[w(\tau), e^{-j 2\pi \Delta k \tau / N}\right] = \frac{1 - e^{-aL}}{aL}, \qquad a = \frac{1}{\tau_{\mathrm{rms}}} + j\frac{2\pi \Delta k}{N}, $$
normalised to a unit power: RandomDelayProfile::correlation and the $N \times N$
matrix of $N$ adjacent subcarriers, RandomDelayProfile::correlation_matrix.
§Examples
use comnum_waveform::ofdm::estimation::RandomDelayProfile;
// equal powers over a prefix of 4 samples: the correlation of a uniform delay
let p = RandomDelayProfile { paths: 3, max_delay: 4.0, tau_rms: None, first_at_zero: false, n_fft: 64 };
assert!((p.correlation(0.0).re - 1.0).abs() < 1e-15);
// 8 subcarriers apart, half a turn over the prefix: (1 - e^{-j pi}) / (j pi)
assert!((p.correlation(8.0).norm() - (2.0 / std::f64::consts::PI)).abs() < 1e-12);Fields§
§paths: usizeImpulses $M$.
max_delay: f64The largest delay $L$ (samples of the IFFT), the cyclic prefix.
tau_rms: Option<f64>The decay $\tau_{\mathrm{rms}}$ (samples) of the powers, None for equal powers.
first_at_zero: boolThe first impulse at delay 0, the others random.
n_fft: usizeThe IFFT size $N$ the delays refer to.
Implementations§
Source§impl RandomDelayProfile
impl RandomDelayProfile
Sourcepub fn correlation(&self, delta: f64) -> C64
pub fn correlation(&self, delta: f64) -> C64
The correlation $R(\Delta k)$ between subcarriers $\Delta k$ apart, averaged over the delays, of unit power.
Sourcepub fn correlation_matrix(&self, n: usize) -> Array2<C64>
pub fn correlation_matrix(&self, n: usize) -> Array2<C64>
The correlation matrix of n adjacent subcarriers, $R_{ij} = R(i - j)$.