|
|
np.ndarray | resource_grid = np.asarray(resource_grid) |
|
int|None | new_fft_size = new_fft_size |
|
| num_subcarriers |
|
np.ndarray | num_ofdm_symbols = self.resource_grid.shape |
|
int | ndlrb = self.num_subcarriers // 12 |
|
tuple | normal_cp = (self.num_ofdm_symbols % 14 == 0) |
|
tuple | extended_cp = (self.num_ofdm_symbols % 12 == 0) |
|
int | num_subframes = self.num_ofdm_symbols // 14 |
|
int | N = self._determine_fft_size() |
|
int | sample_rate = self.N * 15000 |
|
np.ndarray | Ncp = multiplier * np.array([10] + [9] * 6) |
|
np.ndarray | Ecp = multiplier * np.array([32] * 6) |
|
int | n_symbols_per_slot = 7 |
|
np.ndarray | cp_lengths = self.Ncp |
|
int | output_length = self.num_subframes * (self.N * 14 + 2 * self.Ncp[0] + 12 * self.Ncp[1]) |
OFDM modulator za LTE signale (downlink, baseband).
Ova klasa generiše vremenski OFDM talasni oblik iz LTE resource grida:
- mapira centralnih ``12 * NDLRB`` podnosioca u IFFT ulaz,
- postavlja DC bin na nulu,
- računa IFFT (skalirano sa ``N``),
- dodaje ciklički prefiks (CP) za svaki OFDM simbol,
- spaja sve simbole u jedan vremenski signal.
Parametri
----------
resource_grid : np.ndarray
Kompleksna 2D matrica oblika ``(12*NDLRB, Nsym)`` gdje:
- redovi predstavljaju podnosioca (subcarrier index u gridu),
- kolone predstavljaju OFDM simbole.
new_fft_size : int, opcionalno
Ručni override FFT veličine. Ako je zadano, mora biti u listi
``[128, 256, 512, 1024, 1408, 1536, 2048]`` i biće uzeto
``max(base_fft, new_fft_size)``.
Atributi
--------
ndlrb : int
Broj downlink resource blokova (NDLRB), izveden iz broja podnosioca.
normal_cp : bool
True ako je broj simbola djeljiv sa 14 (normal CP).
extended_cp : bool
True ako je broj simbola djeljiv sa 12 (extended CP).
N : int
FFT veličina koja se koristi za IFFT.
sample_rate : int
Sampling frekvencija u Hz (``N * 15000``).
output_length : int
Ukupan broj uzoraka vremenskog signala nakon dodavanja CP.
Raises
------
ValueError
Ako `resource_grid` nije 2D, ako broj podnosioca nije višekratnik 12,
ili ako broj OFDM simbola nije kompatibilan sa LTE (14 ili 12 po subfrejmu).
RuntimeError
Ako dođe do nekonzistentnosti u popunjavanju izlaznog signala.
Primjer
-------
Minimalni primjer (NDLRB=6, 1 subframe, normal CP)::
>>> import numpy as np
>>> from transmitter.ofdm import OFDMModulator
>>>
>>> # Prazan grid (72 podnosioca, 14 simbola)
>>> grid = np.zeros((72, 14), dtype=np.complex64)
>>>
>>> # Npr. ubaci jedan simbol na neki podnosioc/simbol
>>> grid[10, 0] = 1 + 1j
>>>
>>> ofdm = OFDMModulator(grid)
>>> waveform, fs = ofdm.modulate()
>>> waveform.shape
(2048,)
>>> fs
1920000