comnum 0.2.0__cp311-abi3-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
comnum/__init__.py ADDED
@@ -0,0 +1,835 @@
1
+ """Communication algorithms in Rust, with Python bindings.
2
+
3
+ ``comnum`` implements the building blocks of digital and optical communication
4
+ simulations in Rust and exposes them to Python with NumPy arrays in and out. The
5
+ conventions follow OptiCommPy (Gray mapping, metrics, pulse shapes, fibre and device
6
+ models), which serves as the test oracle; the code is an independent implementation
7
+ under the MIT licence.
8
+
9
+ Conventions:
10
+
11
+ - signals are 1-D ``complex128`` arrays (array-likes are converted), bits are ``uint8``
12
+ arrays, symbol indices ``int64`` arrays; the functions return arrays, not lists, of
13
+ one type whatever their arguments;
14
+ - several streams (antennas, polarisations) are stream-major ``(n_streams, n)``
15
+ arrays, a time-frequency grid is ``(n_subcarriers, n_symbols)`` with its resource
16
+ elements as ``(k, l)`` pairs;
17
+ - names: ``fs`` is a sampling rate, ``fc_hz`` a carrier, ``noise_var`` a noise variance
18
+ ``E|w|²``, ``ebn0_db`` and ``esn0_db`` the SNRs per bit and per symbol, MIMO channels
19
+ are ``(n_rx, n_tx)``; the tuning parameters are keyword-only, the generator is the
20
+ last positional argument, ``rng``;
21
+ - the closed forms (``theory_*``, ``qfunc``, ``db2lin``…) take a scalar (and return a
22
+ float) or an array-like (and return an array of the same shape);
23
+ - randomness is explicit: every function that draws takes a :class:`Rng`, so that a
24
+ simulation is reproducible from its seeds (``Rng.stream`` derives the per-trial
25
+ generators of a Monte Carlo campaign, as the Rust runner does);
26
+ - invalid parameters raise ``ValueError``, numerical failures ``ArithmeticError``.
27
+
28
+ Contents:
29
+
30
+ ===================== ===============================================================
31
+ Theme Names
32
+ ===================== ===============================================================
33
+ random and math :class:`Rng`, :func:`db2lin`, :func:`lin2db`, :func:`dbm2w`,
34
+ :func:`w2dbm`, :func:`qfunc`, :func:`ber_to_q_db`
35
+ sources :func:`bits`, :func:`prbs`, :func:`o150_sequence`,
36
+ :func:`symbols`, :func:`maxwell_boltzmann`
37
+ modulation :class:`Constellation`, :func:`gray_code`, :class:`Dpsk`
38
+ metrics :func:`ber`, :func:`snr_db`, :func:`phase_error_std`, :func:`fast_ber_calc`, :func:`evm`,
39
+ :func:`monte_carlo_gmi`, :func:`monte_carlo_mi`, :func:`entropy`,
40
+ :func:`information_rates`, :func:`posterior_rates`
41
+ closed forms :func:`theory_ber`, :func:`theory_ser`, :func:`theory_ser_esn0`,
42
+ :func:`theory_mi`,
43
+ :func:`theory_gmi`, :func:`theory_ber_gray`,
44
+ :func:`theory_ber_rayleigh_mrc`,
45
+ :func:`theory_phase_pdf`, :func:`theory_ber_dpsk`,
46
+ :func:`theory_differential_phase_tail`, :func:`theory_papr_ccdf`,
47
+ :func:`theory_rs_wer`, :func:`theory_rs_ser`,
48
+ :func:`theory_rs_ber`, :func:`theory_biawgn_capacity`,
49
+ :func:`bpsk_noise_variance`, :func:`bpsk_llr`,
50
+ :func:`theory_normal_approximation`, :func:`theory_shannon_limit_ebn0_db`,
51
+ :func:`theory_cm_capacity`, :func:`theory_bicm_capacity`,
52
+ :func:`theory_cm_cutoff_rate`, :func:`theory_bicm_cutoff_rate`
53
+ filters and sampling :func:`pulse_shape`, :func:`rrc_spectrum`, :func:`rrc_taps`,
54
+ :func:`rc_taps`, :func:`fir_filter`,
55
+ :func:`convolve`, :func:`upsample`, :func:`downsample`,
56
+ :func:`decimate`, :func:`resample_fft`, :func:`low_pass_fir`, :func:`butterworth_lowpass`,
57
+ :func:`pnorm`, :func:`anorm`, :func:`freq_shift`, :func:`select_channel`, :func:`resample_rational`,
58
+ :func:`moving_average`, :func:`delay_fft`
59
+ equalisation :func:`cdc`, :func:`cd_taps_needed`, :func:`cd_fir_taps`,
60
+ :func:`cd_dispersion_factor`, :func:`cd_savory_taps`,
61
+ :func:`cd_ls_taps`, :func:`cd_ls_error`,
62
+ :func:`adaptive_equalizer`
63
+ carrier recovery :func:`fourth_power_foe`, :func:`viterbi_viterbi`, :func:`bps`,
64
+ :func:`ddpll`, :func:`derotate`, :func:`unwrap`
65
+ clock recovery :func:`gardner_ted`, :func:`gardner_ted_nyquist`,
66
+ :func:`lagrange_cubic`, :func:`gardner_clock_recovery`
67
+ channels :func:`awgn`, :func:`awgn_ebn0`, :func:`phase_noise`, :func:`clock_offset`,
68
+ :func:`linear_fiber_channel`, :class:`FiberParams`,
69
+ :class:`Edfa`, :class:`Ssfm`, :class:`ManakovPmd`,
70
+ :class:`ManakovSsfm`, :func:`gn_model`,
71
+ :func:`gn_closed_form`, :func:`gn_isrs_closed_form`,
72
+ :func:`format_moments`,
73
+ :func:`raman_profile`, :func:`wdm_grid`
74
+ devices :func:`laser`, :func:`phase_modulator`, :func:`mzm`, :func:`iqm`,
75
+ :class:`Photodiode`, :func:`balanced_photodiode`,
76
+ :func:`hybrid_2x4`, :func:`coherent_receiver`
77
+ optical wireless :class:`OwcRoom`, :class:`OwcIllumination`,
78
+ :class:`OwcImpulseResponse`, :func:`lambertian_mode`,
79
+ :func:`owc_direction`, :func:`owc_illuminance` (indoor VLC and
80
+ infrared), :class:`PinFetReceiver`, :class:`Fso`,
81
+ :class:`GammaGamma`, :class:`PointingError`,
82
+ :func:`rytov_variance`, :func:`fog_attenuation_db_per_km`
83
+ channel coding :class:`Crc`, :class:`Scrambler`, :class:`Interleaver`,
84
+ :class:`ConvolutionalCode`, :class:`TurboCode`,
85
+ :class:`LdpcCode`, :class:`PolarCode`, :class:`NrLdpc`,
86
+ :class:`NrPolar`,
87
+ :class:`ReedSolomonCode`, :class:`BchCode`, :class:`Ccdm`,
88
+ :func:`free_distance`, :func:`pack_symbols`,
89
+ :func:`unpack_symbols`, :class:`Dvbs`, :func:`dvb_packets`,
90
+ :class:`Dvbs2`, :func:`dvbs2_bbframe`,
91
+ :func:`dvbs2_bbframe_data`, :func:`dvbs2_decode_plheader`,
92
+ :class:`Dvbt`, :func:`dvbt_channel_gains`,
93
+ :class:`CcsdsRs`, :class:`CcsdsLdpc`, :class:`CcsdsTurbo`,
94
+ :class:`CcsdsConvolutional`, :func:`ccsds_randomizer`,
95
+ :func:`ccsds_marker`, :func:`ccsds_cadu`
96
+ OFDM and PAPR :class:`Ofdm`, :class:`PaprReduction`, :func:`papr_db`,
97
+ :func:`papr_db_blocks`,
98
+ :func:`ccdf`, :func:`clipping_bussgang`
99
+ filtered multicarrier :class:`Fbmc` (FBMC/OQAM, PHYDYAS), :func:`oqam_stagger`,
100
+ :func:`oqam_destagger`, :class:`Ufmc`, :func:`chebyshev_window`
101
+ OTFS :class:`Otfs`, :func:`delay_doppler_paths`
102
+ CPM and CE-OFDM :class:`Cpm`, :func:`msk_precode`, :func:`msk_bits`,
103
+ :func:`theory_msk_psd`, :class:`CeOfdm`, :func:`ce_ofdm_imp_powers`,
104
+ :func:`ce_ofdm_optimum_gain`, :func:`theory_ce_ofdm_ber_optimum`,
105
+ :func:`pm_occupied_bandwidth`
106
+ chirp spread spectrum :class:`Css` (the modulation of LoRa), :func:`theory_css_ser`,
107
+ :func:`theory_css_ber`, :func:`css_cross_correlation`,
108
+ :func:`css_max_cross_correlation`,
109
+ :func:`css_continuous_spectrum`, :func:`css_spectral_lines`,
110
+ :func:`css_occupied_bandwidth`, :func:`css_interference_pattern`,
111
+ :func:`theory_css_ser_interference`
112
+ OFDM links :class:`ResourceGrid`, :func:`ofdm_estimate`,
113
+ :func:`ofdm_preamble`, :func:`schmidl_cox`,
114
+ :func:`ofdm_synchronize`, :func:`ofdm_budget`,
115
+ :func:`ofdm_timing_noise`, :class:`Wiener2d`, :class:`RobustDesign`,
116
+ :class:`LowRank`, :func:`ls_noise_factor`, :func:`random_delay_correlation`,
117
+ :class:`TdlChannel`,
118
+ :class:`ChannelTaps`, :func:`power_delay_profile`,
119
+ :func:`rms_delay_spread`, :class:`CdlChannel`,
120
+ :func:`cdl_profile`, :func:`cdl_k_factor_db`,
121
+ :func:`path_loss_db`, :func:`shadow_fading_std_db`,
122
+ :func:`los_probability`, :func:`uma_environment_height`,
123
+ :func:`building_penetration_db`,
124
+ :func:`gain_limited_correction`, :func:`theory_sdr_gain_limited`,
125
+ :func:`theory_sdr_optimum_correction`
126
+ amplifiers and DPD :func:`pa_rapp`, :func:`pa_saleh`, :func:`pa_memory_polynomial`,
127
+ :func:`rapp_predistort`, :class:`MemoryPolynomialDpd`,
128
+ :func:`amplifier_bussgang`
129
+ blind estimation :func:`cumulants`, :func:`theory_cumulants`,
130
+ :func:`classify_modulation`, :func:`snr_m2m4_db`, :func:`snr_crb_nmse`,
131
+ :func:`estimate_symbol_rate`, :func:`cyclic_autocorrelation`
132
+ converters :func:`adc`, :func:`dac`, :func:`theory_sqnr_sine_db`,
133
+ :func:`theory_quantization_mse`, :func:`optimal_loading`,
134
+ :func:`theory_jitter_snr_db`, :func:`enob_from_sinad_db`,
135
+ :func:`zero_order_hold_gain`
136
+ spectrum :func:`psd`, :func:`periodogram`, :func:`aclr_db`
137
+ MIMO :func:`mimo_channel`, :func:`mimo_channels`,
138
+ :func:`exponential_correlation`,
139
+ :func:`mimo_detect`, :func:`mimo_llr`, :func:`mimo_estimate`,
140
+ :class:`MimoTraining`, :func:`blue_weights`, :func:`blue_combine`,
141
+ :func:`blue_mse`,
142
+ :func:`message_passing`, :func:`amp_state_evolution`,
143
+ :func:`amp_thresholds`, :func:`oamp_state_evolution`,
144
+ :class:`Ostbc`, :func:`mimo_capacity`, :func:`water_filling_powers`,
145
+ :func:`eigenmode`, :func:`zf_precoder`,
146
+ :func:`theory_ergodic_capacity`, :func:`theory_outage_probability`,
147
+ :func:`theory_outage_capacity`
148
+ chains :class:`Chain` (named blocks, run on the Rust runner),
149
+ :mod:`comnum.blocks`, :class:`Block`, :class:`Native`,
150
+ :func:`var` and :class:`Var` (a grid variable as a parameter),
151
+ :class:`Frame`, :class:`LinkBlock`, :func:`frame_metrics`
152
+ analysis :class:`Results`, :func:`compare`, :class:`Trace`,
153
+ :mod:`comnum.plot` (constellation, eye, time, PSD, curves)
154
+ Monte Carlo :mod:`comnum.sim` (Python trials on the Rust runner: ``run``,
155
+ ``grid``, ``Stop``, ``Record``, ``ErrorRate``, ``Mean``)
156
+ declarative campaigns :func:`run_spec` (a YAML specification on the parallel Rust
157
+ runner), :func:`verify_spec` (check its expected results),
158
+ :func:`search_spec` (the operating point of a metric),
159
+ :func:`spec_conditions`, :func:`spec_blocks`,
160
+ :func:`spec_schema`, :func:`spec_check_link`,
161
+ :class:`Tolerance` (the acceptance rule of the expectations)
162
+ recordings :func:`read_sigmf`, :func:`write_sigmf`
163
+ link theory :func:`theory_ber_imperfect_csi`, :func:`theory_ber_dpsk_jakes`,
164
+ :func:`envelope_series`, :func:`distortion_spectrum`,
165
+ :func:`bessel_j0`
166
+ 5G NR :func:`nr_numerology`, :func:`nr_ofdm_modulate`, :func:`nr_pss`,
167
+ :func:`nr_sss`, :func:`nr_pbch_dmrs`, :func:`nr_ssb_indices`,
168
+ :func:`nr_ssb_grid`, :func:`nr_detect_cell_id`,
169
+ :func:`nr_pdsch_dmrs`, :func:`nr_mcs`, :func:`nr_tbs`,
170
+ :func:`nr_constellation`, :class:`NrTransportBlock`,
171
+ :class:`NrHarqProcess`, :class:`NrPdsch`
172
+ FM broadcasting :func:`fm_modulate`, :func:`fm_discriminator`, :func:`fm_preemphasis`,
173
+ :func:`fm_deemphasis`, :func:`fm_multiplex`, :func:`fm_stereo_decode`,
174
+ :func:`rds_group_bits`, :func:`rds_differential_encode`,
175
+ :func:`rds_receive`
176
+ LTE :func:`lte_frame`, :func:`lte_pss`, :func:`lte_cell_search`,
177
+ :func:`lte_decode_mib`, :func:`zadoff_chu`
178
+ AIS :func:`ais_transmit`, :func:`ais_receive`, :func:`ais_decode`,
179
+ :func:`ais_position_report`, :func:`ais_aivdm`, :func:`ais_messages`,
180
+ :func:`ais_front_end_rate`
181
+ ===================== ===============================================================
182
+
183
+ Example:
184
+ >>> import comnum
185
+ >>> rng = comnum.Rng(1)
186
+ >>> c = comnum.Constellation("qam", 16).normalized()
187
+ >>> b = comnum.bits(4 * 20_000, rng)
188
+ >>> y = comnum.awgn_ebn0(c.map_bits(b), 10.0, 4, rng)
189
+ >>> ber = comnum.ber(c.demap_bits(y), b)
190
+ >>> abs(ber / comnum.theory_ber(16, 10.0, "qam") - 1) < 0.2
191
+ True
192
+ """
193
+
194
+ from comnum import blocks, plot, sim
195
+ from comnum._comnum import (
196
+ BchCode,
197
+ Ccdm,
198
+ CcsdsConvolutional,
199
+ CcsdsLdpc,
200
+ CcsdsRs,
201
+ CcsdsTurbo,
202
+ CdlChannel,
203
+ CeOfdm,
204
+ ChannelTaps,
205
+ Constellation,
206
+ ConvolutionalCode,
207
+ Cpm,
208
+ Crc,
209
+ Css,
210
+ Dpsk,
211
+ Dvbs,
212
+ Dvbs2,
213
+ Dvbt,
214
+ Edfa,
215
+ Fbmc,
216
+ FiberParams,
217
+ Frame,
218
+ Fso,
219
+ GammaGamma,
220
+ Interleaver,
221
+ LdpcCode,
222
+ LinkBlock,
223
+ LowRank,
224
+ ManakovPmd,
225
+ ManakovSsfm,
226
+ MemoryPolynomialDpd,
227
+ MimoTraining,
228
+ NrHarqProcess,
229
+ NrLdpc,
230
+ NrPdsch,
231
+ NrPolar,
232
+ NrTransportBlock,
233
+ Ofdm,
234
+ Ostbc,
235
+ Otfs,
236
+ OwcIllumination,
237
+ OwcImpulseResponse,
238
+ OwcRoom,
239
+ PaprReduction,
240
+ Photodiode,
241
+ PinFetReceiver,
242
+ PointingError,
243
+ PolarCode,
244
+ ReedSolomonCode,
245
+ ResourceGrid,
246
+ Rng,
247
+ RobustDesign,
248
+ Scrambler,
249
+ Ssfm,
250
+ TdlChannel,
251
+ Tolerance,
252
+ TurboCode,
253
+ Ufmc,
254
+ Wiener2d,
255
+ __version__,
256
+ aclr_db,
257
+ adaptive_equalizer,
258
+ adc,
259
+ ais_aivdm,
260
+ ais_decode,
261
+ ais_front_end_rate,
262
+ ais_messages,
263
+ ais_position_report,
264
+ ais_receive,
265
+ ais_transmit,
266
+ amp_state_evolution,
267
+ amp_thresholds,
268
+ amplifier_bussgang,
269
+ anorm,
270
+ awgn,
271
+ awgn_ebn0,
272
+ balanced_photodiode,
273
+ ber,
274
+ ber_to_q_db,
275
+ bessel_j0,
276
+ bits,
277
+ blue_combine,
278
+ blue_mse,
279
+ blue_weights,
280
+ bps,
281
+ bpsk_llr,
282
+ bpsk_noise_variance,
283
+ building_penetration_db,
284
+ butterworth_lowpass,
285
+ ccdf,
286
+ ccsds_cadu,
287
+ ccsds_marker,
288
+ ccsds_randomizer,
289
+ cd_dispersion_factor,
290
+ cd_fir_taps,
291
+ cd_ls_error,
292
+ cd_ls_taps,
293
+ cd_savory_taps,
294
+ cd_taps_needed,
295
+ cdc,
296
+ cdl_k_factor_db,
297
+ cdl_profile,
298
+ ce_ofdm_imp_powers,
299
+ ce_ofdm_optimum_gain,
300
+ chebyshev_window,
301
+ classify_modulation,
302
+ clipping_bussgang,
303
+ clock_offset,
304
+ coherent_receiver,
305
+ convolve,
306
+ css_continuous_spectrum,
307
+ css_cross_correlation,
308
+ css_interference_pattern,
309
+ css_max_cross_correlation,
310
+ css_occupied_bandwidth,
311
+ css_spectral_lines,
312
+ cumulants,
313
+ cyclic_autocorrelation,
314
+ dac,
315
+ db2lin,
316
+ dbm2w,
317
+ ddpll,
318
+ decimate,
319
+ delay_doppler_paths,
320
+ delay_fft,
321
+ derotate,
322
+ distortion_spectrum,
323
+ downsample,
324
+ dvb_packets,
325
+ dvbs2_bbframe,
326
+ dvbs2_bbframe_data,
327
+ dvbs2_decode_plheader,
328
+ dvbt_channel_gains,
329
+ eigenmode,
330
+ enob_from_sinad_db,
331
+ entropy,
332
+ envelope_series,
333
+ estimate_symbol_rate,
334
+ evm,
335
+ exponential_correlation,
336
+ fast_ber_calc,
337
+ fir_filter,
338
+ fm_deemphasis,
339
+ fm_discriminator,
340
+ fm_modulate,
341
+ fm_multiplex,
342
+ fm_preemphasis,
343
+ fm_stereo_decode,
344
+ fog_attenuation_db_per_km,
345
+ format_moments,
346
+ fourth_power_foe,
347
+ frame_metrics,
348
+ free_distance,
349
+ freq_shift,
350
+ gain_limited_correction,
351
+ gardner_clock_recovery,
352
+ gardner_ted,
353
+ gardner_ted_nyquist,
354
+ gn_closed_form,
355
+ gn_isrs_closed_form,
356
+ gn_model,
357
+ gray_code,
358
+ hybrid_2x4,
359
+ information_rates,
360
+ iqm,
361
+ lagrange_cubic,
362
+ lambertian_mode,
363
+ laser,
364
+ lin2db,
365
+ linear_fiber_channel,
366
+ los_probability,
367
+ low_pass_fir,
368
+ ls_noise_factor,
369
+ lte_cell_search,
370
+ lte_decode_mib,
371
+ lte_frame,
372
+ lte_pss,
373
+ maxwell_boltzmann,
374
+ message_passing,
375
+ mimo_capacity,
376
+ mimo_channel,
377
+ mimo_channels,
378
+ mimo_detect,
379
+ mimo_estimate,
380
+ mimo_llr,
381
+ monte_carlo_gmi,
382
+ monte_carlo_mi,
383
+ moving_average,
384
+ msk_bits,
385
+ msk_precode,
386
+ mzm,
387
+ nr_constellation,
388
+ nr_detect_cell_id,
389
+ nr_mcs,
390
+ nr_numerology,
391
+ nr_ofdm_modulate,
392
+ nr_pbch_dmrs,
393
+ nr_pdsch_dmrs,
394
+ nr_pss,
395
+ nr_ssb_grid,
396
+ nr_ssb_indices,
397
+ nr_sss,
398
+ nr_tbs,
399
+ o150_sequence,
400
+ oamp_state_evolution,
401
+ ofdm_budget,
402
+ ofdm_estimate,
403
+ ofdm_preamble,
404
+ ofdm_synchronize,
405
+ ofdm_timing_noise,
406
+ optimal_loading,
407
+ oqam_destagger,
408
+ oqam_stagger,
409
+ owc_direction,
410
+ owc_illuminance,
411
+ pa_memory_polynomial,
412
+ pa_rapp,
413
+ pa_saleh,
414
+ pack_symbols,
415
+ papr_db,
416
+ papr_db_blocks,
417
+ path_loss_db,
418
+ periodogram,
419
+ phase_error_std,
420
+ phase_modulator,
421
+ phase_noise,
422
+ pm_occupied_bandwidth,
423
+ pnorm,
424
+ posterior_rates,
425
+ power_delay_profile,
426
+ prbs,
427
+ psd,
428
+ pulse_shape,
429
+ qfunc,
430
+ raman_profile,
431
+ random_delay_correlation,
432
+ rapp_predistort,
433
+ rc_taps,
434
+ rds_differential_encode,
435
+ rds_group_bits,
436
+ rds_receive,
437
+ read_sigmf,
438
+ resample_fft,
439
+ resample_rational,
440
+ rms_delay_spread,
441
+ rrc_spectrum,
442
+ rrc_taps,
443
+ run_spec,
444
+ rytov_variance,
445
+ schmidl_cox,
446
+ search_spec,
447
+ select_channel,
448
+ shadow_fading_std_db,
449
+ snr_crb_nmse,
450
+ snr_db,
451
+ snr_m2m4_db,
452
+ spec_blocks,
453
+ spec_check_link,
454
+ spec_conditions,
455
+ spec_schema,
456
+ symbols,
457
+ theory_ber,
458
+ theory_ber_dpsk,
459
+ theory_ber_dpsk_jakes,
460
+ theory_ber_gray,
461
+ theory_ber_imperfect_csi,
462
+ theory_ber_rayleigh_mrc,
463
+ theory_biawgn_capacity,
464
+ theory_bicm_capacity,
465
+ theory_bicm_cutoff_rate,
466
+ theory_ce_ofdm_ber_optimum,
467
+ theory_cm_capacity,
468
+ theory_cm_cutoff_rate,
469
+ theory_css_ber,
470
+ theory_css_ser,
471
+ theory_css_ser_interference,
472
+ theory_cumulants,
473
+ theory_differential_phase_tail,
474
+ theory_ergodic_capacity,
475
+ theory_gmi,
476
+ theory_jitter_snr_db,
477
+ theory_mi,
478
+ theory_msk_psd,
479
+ theory_normal_approximation,
480
+ theory_outage_capacity,
481
+ theory_outage_probability,
482
+ theory_papr_ccdf,
483
+ theory_phase_pdf,
484
+ theory_quantization_mse,
485
+ theory_rs_ber,
486
+ theory_rs_ser,
487
+ theory_rs_wer,
488
+ theory_sdr_gain_limited,
489
+ theory_sdr_optimum_correction,
490
+ theory_ser,
491
+ theory_ser_esn0,
492
+ theory_shannon_limit_ebn0_db,
493
+ theory_sqnr_sine_db,
494
+ uma_environment_height,
495
+ unpack_symbols,
496
+ unwrap,
497
+ upsample,
498
+ verify_spec,
499
+ viterbi_viterbi,
500
+ w2dbm,
501
+ water_filling_powers,
502
+ wdm_grid,
503
+ write_sigmf,
504
+ zadoff_chu,
505
+ zero_order_hold_gain,
506
+ zf_precoder,
507
+ )
508
+ from comnum.block import Block, Native, Var, var
509
+ from comnum.chain import Chain
510
+ from comnum.results import Results, Trace, compare
511
+
512
+ __all__ = [
513
+ "BchCode",
514
+ "Block",
515
+ "Ccdm",
516
+ "CcsdsConvolutional",
517
+ "CcsdsLdpc",
518
+ "CcsdsRs",
519
+ "CcsdsTurbo",
520
+ "CdlChannel",
521
+ "CeOfdm",
522
+ "Chain",
523
+ "ChannelTaps",
524
+ "Constellation",
525
+ "ConvolutionalCode",
526
+ "Cpm",
527
+ "Crc",
528
+ "Css",
529
+ "Dpsk",
530
+ "Dvbs",
531
+ "Dvbs2",
532
+ "Dvbt",
533
+ "Edfa",
534
+ "Fbmc",
535
+ "FiberParams",
536
+ "Frame",
537
+ "Fso",
538
+ "GammaGamma",
539
+ "Interleaver",
540
+ "LdpcCode",
541
+ "LinkBlock",
542
+ "LowRank",
543
+ "ManakovPmd",
544
+ "ManakovSsfm",
545
+ "MemoryPolynomialDpd",
546
+ "MimoTraining",
547
+ "Native",
548
+ "NrHarqProcess",
549
+ "NrLdpc",
550
+ "NrPdsch",
551
+ "NrPolar",
552
+ "NrTransportBlock",
553
+ "Ofdm",
554
+ "Ostbc",
555
+ "Otfs",
556
+ "OwcIllumination",
557
+ "OwcImpulseResponse",
558
+ "OwcRoom",
559
+ "PaprReduction",
560
+ "Photodiode",
561
+ "PinFetReceiver",
562
+ "PointingError",
563
+ "PolarCode",
564
+ "ReedSolomonCode",
565
+ "ResourceGrid",
566
+ "Results",
567
+ "Rng",
568
+ "RobustDesign",
569
+ "Scrambler",
570
+ "Ssfm",
571
+ "TdlChannel",
572
+ "Tolerance",
573
+ "Trace",
574
+ "TurboCode",
575
+ "Ufmc",
576
+ "Var",
577
+ "Wiener2d",
578
+ "__version__",
579
+ "aclr_db",
580
+ "adaptive_equalizer",
581
+ "adc",
582
+ "ais_aivdm",
583
+ "ais_decode",
584
+ "ais_front_end_rate",
585
+ "ais_messages",
586
+ "ais_position_report",
587
+ "ais_receive",
588
+ "ais_transmit",
589
+ "amp_state_evolution",
590
+ "amp_thresholds",
591
+ "amplifier_bussgang",
592
+ "anorm",
593
+ "awgn",
594
+ "awgn_ebn0",
595
+ "balanced_photodiode",
596
+ "ber",
597
+ "ber_to_q_db",
598
+ "bessel_j0",
599
+ "bits",
600
+ "blocks",
601
+ "blue_combine",
602
+ "blue_mse",
603
+ "blue_weights",
604
+ "bps",
605
+ "bpsk_llr",
606
+ "bpsk_noise_variance",
607
+ "building_penetration_db",
608
+ "butterworth_lowpass",
609
+ "ccdf",
610
+ "ccsds_cadu",
611
+ "ccsds_marker",
612
+ "ccsds_randomizer",
613
+ "cd_dispersion_factor",
614
+ "cd_fir_taps",
615
+ "cd_ls_error",
616
+ "cd_ls_taps",
617
+ "cd_savory_taps",
618
+ "cd_taps_needed",
619
+ "cdc",
620
+ "cdl_k_factor_db",
621
+ "cdl_profile",
622
+ "ce_ofdm_imp_powers",
623
+ "ce_ofdm_optimum_gain",
624
+ "chebyshev_window",
625
+ "classify_modulation",
626
+ "clipping_bussgang",
627
+ "clock_offset",
628
+ "coherent_receiver",
629
+ "compare",
630
+ "convolve",
631
+ "css_continuous_spectrum",
632
+ "css_cross_correlation",
633
+ "css_interference_pattern",
634
+ "css_max_cross_correlation",
635
+ "css_occupied_bandwidth",
636
+ "css_spectral_lines",
637
+ "cumulants",
638
+ "cyclic_autocorrelation",
639
+ "dac",
640
+ "db2lin",
641
+ "dbm2w",
642
+ "ddpll",
643
+ "decimate",
644
+ "delay_doppler_paths",
645
+ "delay_fft",
646
+ "derotate",
647
+ "distortion_spectrum",
648
+ "downsample",
649
+ "dvb_packets",
650
+ "dvbs2_bbframe",
651
+ "dvbs2_bbframe_data",
652
+ "dvbs2_decode_plheader",
653
+ "dvbt_channel_gains",
654
+ "eigenmode",
655
+ "enob_from_sinad_db",
656
+ "entropy",
657
+ "envelope_series",
658
+ "estimate_symbol_rate",
659
+ "evm",
660
+ "exponential_correlation",
661
+ "fast_ber_calc",
662
+ "fir_filter",
663
+ "fm_deemphasis",
664
+ "fm_discriminator",
665
+ "fm_modulate",
666
+ "fm_multiplex",
667
+ "fm_preemphasis",
668
+ "fm_stereo_decode",
669
+ "fog_attenuation_db_per_km",
670
+ "format_moments",
671
+ "fourth_power_foe",
672
+ "frame_metrics",
673
+ "free_distance",
674
+ "freq_shift",
675
+ "gain_limited_correction",
676
+ "gardner_clock_recovery",
677
+ "gardner_ted",
678
+ "gardner_ted_nyquist",
679
+ "gn_closed_form",
680
+ "gn_isrs_closed_form",
681
+ "gn_model",
682
+ "gray_code",
683
+ "hybrid_2x4",
684
+ "information_rates",
685
+ "iqm",
686
+ "lagrange_cubic",
687
+ "lambertian_mode",
688
+ "laser",
689
+ "lin2db",
690
+ "linear_fiber_channel",
691
+ "los_probability",
692
+ "low_pass_fir",
693
+ "ls_noise_factor",
694
+ "lte_cell_search",
695
+ "lte_decode_mib",
696
+ "lte_frame",
697
+ "lte_pss",
698
+ "maxwell_boltzmann",
699
+ "message_passing",
700
+ "mimo_capacity",
701
+ "mimo_channel",
702
+ "mimo_channels",
703
+ "mimo_detect",
704
+ "mimo_estimate",
705
+ "mimo_llr",
706
+ "monte_carlo_gmi",
707
+ "monte_carlo_mi",
708
+ "moving_average",
709
+ "msk_bits",
710
+ "msk_precode",
711
+ "mzm",
712
+ "nr_constellation",
713
+ "nr_detect_cell_id",
714
+ "nr_mcs",
715
+ "nr_numerology",
716
+ "nr_ofdm_modulate",
717
+ "nr_pbch_dmrs",
718
+ "nr_pdsch_dmrs",
719
+ "nr_pss",
720
+ "nr_ssb_grid",
721
+ "nr_ssb_indices",
722
+ "nr_sss",
723
+ "nr_tbs",
724
+ "o150_sequence",
725
+ "oamp_state_evolution",
726
+ "ofdm_budget",
727
+ "ofdm_estimate",
728
+ "ofdm_preamble",
729
+ "ofdm_synchronize",
730
+ "ofdm_timing_noise",
731
+ "optimal_loading",
732
+ "oqam_destagger",
733
+ "oqam_stagger",
734
+ "owc_direction",
735
+ "owc_illuminance",
736
+ "pa_memory_polynomial",
737
+ "pa_rapp",
738
+ "pa_saleh",
739
+ "pack_symbols",
740
+ "papr_db",
741
+ "papr_db_blocks",
742
+ "path_loss_db",
743
+ "periodogram",
744
+ "phase_error_std",
745
+ "phase_modulator",
746
+ "phase_noise",
747
+ "plot",
748
+ "pm_occupied_bandwidth",
749
+ "pnorm",
750
+ "posterior_rates",
751
+ "power_delay_profile",
752
+ "prbs",
753
+ "psd",
754
+ "pulse_shape",
755
+ "qfunc",
756
+ "raman_profile",
757
+ "random_delay_correlation",
758
+ "rapp_predistort",
759
+ "rc_taps",
760
+ "rds_differential_encode",
761
+ "rds_group_bits",
762
+ "rds_receive",
763
+ "read_sigmf",
764
+ "resample_fft",
765
+ "resample_rational",
766
+ "rms_delay_spread",
767
+ "rrc_spectrum",
768
+ "rrc_taps",
769
+ "run_spec",
770
+ "rytov_variance",
771
+ "schmidl_cox",
772
+ "search_spec",
773
+ "select_channel",
774
+ "shadow_fading_std_db",
775
+ "sim",
776
+ "snr_crb_nmse",
777
+ "snr_db",
778
+ "snr_m2m4_db",
779
+ "spec_blocks",
780
+ "spec_check_link",
781
+ "spec_conditions",
782
+ "spec_schema",
783
+ "symbols",
784
+ "theory_ber",
785
+ "theory_ber_dpsk",
786
+ "theory_ber_dpsk_jakes",
787
+ "theory_ber_gray",
788
+ "theory_ber_imperfect_csi",
789
+ "theory_ber_rayleigh_mrc",
790
+ "theory_biawgn_capacity",
791
+ "theory_bicm_capacity",
792
+ "theory_bicm_cutoff_rate",
793
+ "theory_ce_ofdm_ber_optimum",
794
+ "theory_cm_capacity",
795
+ "theory_cm_cutoff_rate",
796
+ "theory_css_ber",
797
+ "theory_css_ser",
798
+ "theory_css_ser_interference",
799
+ "theory_cumulants",
800
+ "theory_differential_phase_tail",
801
+ "theory_ergodic_capacity",
802
+ "theory_gmi",
803
+ "theory_jitter_snr_db",
804
+ "theory_mi",
805
+ "theory_msk_psd",
806
+ "theory_normal_approximation",
807
+ "theory_outage_capacity",
808
+ "theory_outage_probability",
809
+ "theory_papr_ccdf",
810
+ "theory_phase_pdf",
811
+ "theory_quantization_mse",
812
+ "theory_rs_ber",
813
+ "theory_rs_ser",
814
+ "theory_rs_wer",
815
+ "theory_sdr_gain_limited",
816
+ "theory_sdr_optimum_correction",
817
+ "theory_ser",
818
+ "theory_ser_esn0",
819
+ "theory_shannon_limit_ebn0_db",
820
+ "theory_sqnr_sine_db",
821
+ "uma_environment_height",
822
+ "unpack_symbols",
823
+ "unwrap",
824
+ "upsample",
825
+ "var",
826
+ "verify_spec",
827
+ "viterbi_viterbi",
828
+ "w2dbm",
829
+ "water_filling_powers",
830
+ "wdm_grid",
831
+ "write_sigmf",
832
+ "zadoff_chu",
833
+ "zero_order_hold_gain",
834
+ "zf_precoder",
835
+ ]