orion-sdr 0.0.13

DSP/SDR block library targeting HF-to-UHF, satellites, and Python bindings. Roadmap inside.
Documentation
+
�n�ic�|�Rt^RIt^RIHuHt^RIt^RI	t	^RI
t^RIH
t
HtHtHtRtRtRtRtRtRtR	tR#)
z�Roundtrip SNR tests for the orion_sdr Python extension.

Each test modulates a tone, demodulates it, and asserts that SNR in the
recovered audio exceeds a minimum threshold. Thresholds match the Rust
roundtrip tests in src/tests/roundtrip.rs.
N)�FS�	real_tone�snr_db�taili�c	���RpRpRp\P!\V4Uu.uF&q3V,\,R,R8dRMRNK(	up\PR7p\
P!\VRR4PV4p\
P!\VR	4PV4p\R
\,4pWgRpWGRp\\P!\P!W�R8�,^,444p	\\P!\P!W�R8,^,444R,p
R
\P!W�,4,pRq�V8�q�'g�\P!RV
3RW�34RR\ P"!49g\P$!V4'd\P&!V4MRR\P&!V4/,p\P(!RVR
R24R,RV/,p\+\P,!V44hR;r�R#uupi)z=Recovered keying envelope should have >14 dB ON/OFF contrast.i�]g��@g@g�?��?�)�dtypeg@g�r@g�������?Ng�-���q=�4@g,@�py0�contrast_db�py3zCW ON/OFF contrast �.1fz dB < 14 dB�
>assert %(py5)s�py5��>�z%(py0)s > %(py3)s)�np�array�ranger�float32�sdr�
CwKeyedMod�process�CwEnvelopeDemod�int�float�sqrt�mean�log10�
@pytest_ar�_call_reprcompare�@py_builtins�locals�_should_repr_global_name�	_saferepr�_format_assertmsg�AssertionError�_format_explanation)�n�pitch_hz�key_f�k�key_env�iq�audio�skip�a�on_rms�off_rmsr�@py_assert2�@py_assert1�@py_format4�@py_format6s                �u/Users/glenn/Library/Mobile Documents/com~apple~CloudDocs/work/rust/projects/orion-sdr/python/tests/test_roundtrip.py�test_roundtrip_cw_enveloper9s����A��H��E��h�h�AF�q��J��A�e�)�b�.�C�'�#�-�#�3�
6��J��j�j��G�


����H�c�3�	/�	7�	7��	@�B�����H�e�4�<�<�R�@�E��u�r�z�?�D�
�e��A����A��B�G�G�B�G�G�A�#�g�J�!�O�4�5�6�F��B�G�G�B�G�G�A�#�g�J�!�O�4�5�6��>�G�����&�"2�3�3�K��Q���Q�Q�Q�Q�;�Q�Q�Q�Q�Q�Q�;�Q�Q�Q�Q�;�Q�Q�Q��Q�Q�Q�Q�!4�[��4E�[�Q�Q�Q�Q�Q�Q�Q�Q�Q��	Ks�,I.c���Rp\\V\R4p\P!\RRR4PV4p\P!\R4PV4p\\V4\V4pRqTV8�qf'g�\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4/,p\P!R	VR

R24R,R
V/,p\!\P"!V44hR;reR#)�@�@rr皙�����?���@g8@r
�snrrzAM roundtrip SNR r
z dB < 24 dBrrNrr�rr�Nr�AmDsbModr�AmEnvelopeDemodrrr r!r"r#r$r%r&r'r(�	�f_mod�audio_inr.�	audio_outr>r4r5r6r7s	         r8�test_roundtrip_am_enveloperG3s����E���U�A�s�+�H�	���b�#�s�C�	(�	0�	0��	:�B��#�#�B��0�8�8��<�I�
��i��"�e�
,�C��?��:�?�?�?�?�3�?�?�?�?�?�?�3�?�?�?�?�3�?�?�?��?�?�?�?�*�3�s�)�;�?�?�?�?�?�?�?�?�?�c���Rp\\V\R4p\P!\RRR4PV4p\P!\RRR7PV4p\\V4\V4pRqTV8�qf'g�\P!RV3RWE34R	R
\P!49g\P!V4'd\P!V4MR
R\P!V4/,p\P!RVR

R24R,RV/,p\!\P"!V44hR;reR#)z5AbsApprox variant should also achieve acceptable SNR.r;rrr<r=T)�
abs_approxr	r
r>rzAM AbsApprox roundtrip SNR r
� dB < 20 dBrrNrrr?rCs	         r8�%test_roundtrip_am_envelope_abs_approxrL>s����E���U�A�s�+�H�	���b�#�s�C�	(�	0�	0��	:�B��#�#�B��D�A�I�I�"�M�I�
��i��"�e�
,�C��I��:�I�I�I�I�3�I�I�I�I�I�I�3�I�I�I�I�3�I�I�I��I�I�I�I�4�S��I�[�I�I�I�I�I�I�I�I�IrHc���RpRpRp\\V\R4p\P!\WRR4PV4p\P!\W!4PV4p\R\,4p\WVR\V4pRq�V8�q�'g�\P!RV	3RWx34R	R
\P!49g\P!V4'd\P!V4MR
R\P!V4/,p
\P!RVR

R24R,RV
/,p\!\P"!V44hR;r�R#)g��@g�@gp�@g�������?rTg���Q��?N�2@r
r>rzSSB USB roundtrip SNR r
� dB < 18 dBrrrr)rrr@r�
SsbPhasingModr�SsbProductDemodrrr r!r"r#r$r%r&r'r()�f_audio�audio_bw_hz�audio_if_hzrEr.rFr0r>r4r5r6r7s            r8�test_roundtrip_ssb_usbrUNs����G��K��K���W�a��-�H�	�	�	�2�{��d�	C�	K�	K�H�	U�B��#�#�B��A�I�I�"�M�I��u�r�z�?�D�
��5�!�2�w�
/�C��D��:�D�D�D�D�3�D�D�D�D�D�D�3�D�D�D�D�3�D�D�D��D�D�D�D�/��C�y��D�D�D�D�D�D�D�D�DrHc���Rp\\V\R4p\P!\RR4PV4p\P!\RR4PV4p\\V4\V4pRqTV8�qf'g�\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4/,p\P!R	VR

R24R,R
V/,p\!\P"!V44hR;reR#)r;rg��@rr=r	r
r>rzFM roundtrip SNR r
rKrrNrr)rrr@r�FmPhaseAccumModr�FmQuadratureDemodrrr r!r"r#r$r%r&r'r(rCs	         r8�test_roundtrip_fm_quadraturerY`s����E���U�A�s�+�H�	�	�	�R��#�	.�	6�	6�x�	@�B��%�%�b�'�7�;�C�C�B�G�I�
��i��"�e�
,�C��?��:�?�?�?�?�3�?�?�?�?�?�?�3�?�?�?�?�3�?�?�?��?�?�?�?�*�3�s�)�;�?�?�?�?�?�?�?�?�?rHc���Rp\\V\R4p\P!\RR4PV4p\P!\RR4PV4p\\V4\V4pRqTV8�qf'g�\P!RV3RWE34RR\P!49g\P!V4'd\P!V4MRR\P!V4/,p\P!R	VR

R24R,R
V/,p\!\P"!V44hR;reR#)g �@rg�������?rr=rNr
r>rzPM roundtrip SNR r
rOrrNrr)rrr@r�PmDirectPhaseModr�PmQuadratureDemodrrr r!r"r#r$r%r&r'r(rCs	         r8�test_roundtrip_pm_quadraturer]os����E���U�A�s�+�H�	�	�	�b�#�s�	+�	3�	3�H�	=�B��%�%�b�#�w�7�?�?��C�I�
��i��"�e�
,�C��?��:�?�?�?�?�3�?�?�?�?�?�?�3�?�?�?�?�3�?�?�?��?�?�?�?�*�3�s�)�;�?�?�?�?�?�?�?�?�?rH)�__doc__�builtinsr"�_pytest.assertion.rewrite�	assertion�rewriter �numpyr�pytest�	orion_sdrr�conftestrrrrr@r9rGrLrUrYr]�rHr8�<module>rhsK������
��1�1���R�:@�	J� E�$@�@rH