# Ideal Channel¶

The IdealChannel is the default Channel assumed by Simulations. It is completely deterministic and lossless, introducing neither phase shifts, amplitude changes nor propagation delays in between the linked Devices.

classDiagram direction LR class IdealChannel { _realize() : IdealChannelRealization } class IdealChannelRealization { _sample() : IdealChannelSample } class IdealChannelSample { propagate(Signal) : Signal } IdealChannel --o IdealChannelRealization : realize() IdealChannelRealization --o IdealChannelSample : sample() click IdealChannel href "#hermespy.channel.ideal.IdealChannel" click IdealChannelRealization href "#hermespy.channel.ideal.IdealChannelRealization" click IdealChannelSample href "#hermespy.channel.ideal.IdealChannelSample"

Considering two devices $$\alpha$$ and $$\beta$$ featuring $$N_\alpha$$ and $$N_\beta$$ antennas respectively, the ideal Channel’s impulse response

$\begin{split}\mathbf{H}(t, \tau) = \delta(\tau) \left\lbrace\begin{array}{cr} \left[1, 1,\,\dotsc,\, 1 \right] & \text{for } N_\beta = 1 \\ \left[1, 1,\,\dotsc,\, 1 \right]^\mathsf{T} & \text{for } N_\alpha = 1 \\ \begin{bmatrix} 1, & 0, & \dots, & 0 \\ 0, & 1, & \dots, & 0 \\ \vdots & \vdots & \ddots & \vdots \\ 0, & 0, & \dots, & 1 \end{bmatrix} & \text{otherwise} \end{array}\right\rbrace \in \mathbb{C}^{N_\beta \times N_\alpha}\end{split}$

depends on the number of antennas of the devices and is independent of the time $$t$$. For channels with an unequal number of antennas, the ideal Channel’s impulse response is a diagonal matrix with ones on the diagonal, padded with zeros to match the dimensions of the channel matrix. Therefore, the device with the bigger amount of antennas will receive / transmit nothing from the additional antennas.

class IdealChannel(gain=1.0, seed=None)[source]

An ideal distortion-less channel model.

Parameters:
• gain (float, optional) – Linear channel energy gain factor. Initializes the gain property. $$1.0$$ by default.

• seed (int, optional) – Seed used to initialize the pseudo-random number generator.

_realize()[source]

Generate a new channel realzation.

Abstract subroutine of realize. Each Channel is required to implement their own _realize() method.

Returns: A new channel realization.

Return type:

IdealChannelRealization

recall_realization(group)[source]

Recall a realization of this channel type from its HDF serialization.

Parameters:

group (h5py.Group) – HDF group to which the channel realization was serialized.

Return type:

IdealChannelRealization

Returns: The recalled realization instance.

class IdealChannelRealization(sample_hooks=None, gain=1.0)[source]

Realization of an ideal channel.

Generated by the _realize() routine of IdealChannels.

Parameters:
• sample_hooks (Set[ChannelSampleHook[CST]], optional) – Hooks to be called after the channel is sampled.

• gain (float, optional) – Linear power gain factor a signal experiences when being propagated over this realization. $$1.0$$ by default, meaning no gain or loss.

static From_HDF(group, sample_hooks)[source]
Return type:

IdealChannelRealization

_sample(state)[source]

Sample the channel realization at a given point in time and space.

Abstract subroutine of sample.

Parameters:

state (LinkState) – State of the channel at the time of sampling.

Return type:

IdealChannelSample

Returns: The channel sample at the given point in time.

to_HDF(group)[source]

Serialize the channel realization to HDF5.

Parameters:

group (Group) – HDF5 group to serialize the channel realization to.

Return type:

None

class IdealChannelSample(gain, state)[source]

Bases: ChannelSample

Sample of an ideal channel realization.

Generated by the _sample routine of IdealChannelRealization.

Parameters:
• gain (float) – Linear channel power factor.

• state (ChannelState) – State of the channel at the time of sampling.

_propagate(signal, interpolation)[source]

Propagate radio-frequency band signals over a channel instance.

Abstract subroutine of propagate.

Parameters:
• signal (SignalBlock) – The signal block to be propagated.

• interpolation (InterpolationMode) – Interpolation behaviour of the channel realization’s delay components with respect to the proagated signal’s sampling rate.

Return type:

SignalBlock

Returns: The propagated signal.

state(num_samples, max_num_taps, interpolation_mode=InterpolationMode.NEAREST)[source]

Generate the discrete channel state information from this channel realization.

Denoted by

$\mathbf{H}^{(m, \tau)} \in \mathbb{C}^{N_{\mathrm{Rx}} \times N_{\mathrm{Tx}}}$

within the respective equations.

Parameters:
• num_samples (int) – Number of discrete time-domain samples of the chanel state information.

• max_num_taps (int) – Maximum number of delay taps considered per discrete time-domain sample.

• interpolation_mode (InterpolationMode, optional) – Interpolation behaviour of the channel realization’s delay components with respect to the proagated signal’s sampling rate. If not specified, an integer rounding to the nearest sampling instance will be assumed.

Return type:

ChannelStateInformation

Returns: The channel state information representing this channel realization.

property expected_energy_scale: float

Expected linear scaling of a propagated signal’s energy at each receiving antenna.

Required to compute the expected energy of a signal after propagation, and therfore signal-to-noise ratios (SNRs) and signal-to-interference-plus-noise ratios (SINRs).