11# Authors: CommPy contributors
22# License: BSD 3-Clause
33
4+ import numpy as np
45from numpy import array
5- from numpy .testing import run_module_suite , assert_raises , assert_equal
6-
7- from commpy .sequences import pnsequence
6+ from numpy .testing import run_module_suite , assert_raises , assert_equal , assert_almost_equal
87
8+ from commpy .sequences import pnsequence , zcsequence
99
1010def test_pnsequence ():
1111 # Test the raises of errors
1212 with assert_raises (ValueError ):
1313 pnsequence (4 , '001' , '1101' , 2 ** 4 - 1 )
14+ with assert_raises (ValueError ):
1415 pnsequence (4 , '0011' , '110' , 2 ** 4 - 1 )
1516
1617 # Test output with
@@ -19,6 +20,34 @@ def test_pnsequence():
1920 assert_equal (pnsequence (4 , (0 , 0 , 1 , 1 ), array ((1 , 1 , 0 , 1 )), 7 ), array ((1 , 1 , 0 , 0 , 1 , 0 , 1 ), int ),
2021 err_msg = 'Pseudo-noise sequence is not the one expected.' )
2122
23+ def test_zcsequence ():
24+ # Test the raises of errors
25+ with assert_raises (ValueError ):
26+ zcsequence (u = - 1 , seq_length = 20 , q = 0 )
27+ with assert_raises (ValueError ):
28+ zcsequence (u = 20 , seq_length = 0 , q = 0 )
29+ with assert_raises (ValueError ):
30+ zcsequence (u = 3 , seq_length = 18 , q = 0 )
31+ with assert_raises (ValueError ):
32+ zcsequence (u = 3.1 , seq_length = 11 , q = 0 )
33+ with assert_raises (ValueError ):
34+ zcsequence (u = 3 , seq_length = 11.1 , q = 0 )
35+ with assert_raises (ValueError ):
36+ zcsequence (u = 3 , seq_length = 11 , q = 0.1 )
37+
38+ # Test output with
39+ assert_almost_equal (zcsequence (u = 1 , seq_length = 2 , q = 0 ), array ([1.000000e+00 + 0.j , 6.123234e-17 - 1.j ]),
40+ err_msg = 'CAZAC sequence is not the expected one.' )
41+
42+ # Test if output cross-correlation is valid
43+ seqCAZAC = zcsequence (u = 3 , seq_length = 20 , q = 0 )
44+ x = np .fft .fft (seqCAZAC ) / np .sqrt (seqCAZAC .size )
45+ h = (np .fft .ifft (np .conj (x ) * x )* np .sqrt (seqCAZAC .size )).T
46+ corr = np .absolute (h )** 2 / h .size
47+ assert_almost_equal (corr [0 ], 1. ,
48+ err_msg = 'CAZAC sequence auto-correlation is not valid, first term is not 1' )
49+ assert_almost_equal (corr [1 :], np .zeros (corr .size - 1 ),
50+ err_msg = 'CAZAC sequence auto-correlation is not valid, all terms except first are not 0' )
2251
2352if __name__ == "__main__" :
2453 run_module_suite ()
0 commit comments