1
1
import sys , os
2
+
2
3
my_path = os .path .dirname (os .path .abspath (__file__ ))
3
4
sys .path .insert (0 , my_path + '/../' )
4
5
9
10
import pyExSi as es
10
11
11
12
12
- N = 2 ** 16 # number of data points of time signal
13
- fs = 1024 # sampling frequency [Hz]
14
- t = np .arange (0 ,N ) / fs # time vector
13
+ N = 2 ** 16 # number of data points of time signal
14
+ fs = 1024 # sampling frequency [Hz]
15
+ t = np .arange (0 , N ) / fs # time vector
15
16
16
17
# define frequency vector and one-sided flat-shaped PSD
17
- M = N // 2 + 1 # number of data points of frequency vector
18
- f = np .arange (0 , M , 1 ) * fs / N # frequency vector
19
- f_min = 50 # PSD upper frequency limit [Hz]
20
- f_max = 100 # PSD lower frequency limit [Hz]
21
- PSD = es .get_psd (f , f_min , f_max ) # one-sided flat-shaped PSD
22
- plt .plot (f ,PSD )
18
+ M = N // 2 + 1 # number of data points of frequency vector
19
+ f = np .arange (0 , M , 1 ) * fs / N # frequency vector
20
+ f_min = 50 # PSD upper frequency limit [Hz]
21
+ f_max = 100 # PSD lower frequency limit [Hz]
22
+ PSD = es .get_psd (f , f_min , f_max ) # one-sided flat-shaped PSD
23
+ plt .plot (f , PSD )
23
24
plt .xlabel ('Frequency [Hz]' )
24
25
plt .ylabel ('PSD [Unit**2/Hz]' )
25
- plt .xlim (0 ,200 )
26
+ plt .xlim (0 , 200 )
26
27
plt .show ()
27
28
28
29
29
- #Random Generator seed
30
+ # Random Generator seed
30
31
seed = 1234
31
- rg = np .random .default_rng (seed ) # or rng = np.random.default_rng(seed)
32
+ rg = np .random .default_rng (seed ) # or rng = np.random.default_rng(seed)
32
33
33
- #get gaussian stationary signal
34
+ # get gaussian stationary signal
34
35
gaussian_signal = es .random_gaussian (N , PSD , fs , rg = rg )
35
- #calculate kurtosis
36
+ # calculate kurtosis
36
37
k_u_stationary = es .get_kurtosis (gaussian_signal )
37
38
38
- #get non-gaussian stationary signal, with kurtosis k_u=10
39
+ # get non-gaussian stationary signal, with kurtosis k_u=10
39
40
k_u_target = 10
40
41
rng = np .random .default_rng (seed )
41
42
nongaussian_signal = es .stationary_nongaussian_signal (N , PSD , fs , k_u = k_u_target , rg = rg )
42
- #calculate kurtosis
43
+ # calculate kurtosis
43
44
k_u_stationary_nongaussian = es .get_kurtosis (nongaussian_signal )
44
45
45
- #get non-gaussian non-stationary signal, with kurtosis k_u=10
46
- #a) amplitude modulation, modulating signal defined by PSD
46
+ # get non-gaussian non-stationary signal, with kurtosis k_u=10
47
+ # a) amplitude modulation, modulating signal defined by PSD
47
48
rng = np .random .default_rng (seed )
48
- PSD_modulating = es .get_psd (f , f_low = 1 , f_high = k_u_target )
49
- plt .plot (f ,PSD , label = 'PSD, carrier signal' )
50
- plt .plot (f ,PSD_modulating , label = 'PSD, modulating signal' )
49
+ PSD_modulating = es .get_psd (f , f_low = 1 , f_high = k_u_target )
50
+ plt .plot (f , PSD , label = 'PSD, carrier signal' )
51
+ plt .plot (f , PSD_modulating , label = 'PSD, modulating signal' )
51
52
plt .xlabel ('Frequency [Hz]' )
52
53
plt .ylabel ('PSD [Unit**2/Hz]' )
53
- plt .xlim (0 ,200 )
54
+ plt .xlim (0 , 200 )
54
55
plt .legend ()
55
56
plt .show ()
56
- #define array of parameters delta_m and p
57
- delta_m_list = np .arange (.1 ,2.1 ,.5 )
58
- p_list = np .arange (.1 ,2.1 ,.5 )
59
- #get signal
60
- nongaussian_nonstationary_signal_psd = es .nonstationary_signal (N ,PSD ,fs ,k_u = k_u_target ,modulating_signal = ('PSD' ,PSD_modulating ),
61
- param1_list = delta_m_list ,param2_list = p_list ,seed = seed )
62
- #calculate kurtosis
63
- k_u_nonstationary_nongaussian_psd = es .get_kurtosis (nongaussian_nonstationary_signal_psd )
57
+ # define array of parameters delta_m and p
58
+ delta_m_list = np .arange (0.1 , 2.1 , 0.5 )
59
+ p_list = np .arange (0.1 , 2.1 , 0.5 )
60
+ # get signal
61
+ nongaussian_nonstationary_signal_psd = es .nonstationary_signal (
62
+ N ,
63
+ PSD ,
64
+ fs ,
65
+ k_u = k_u_target ,
66
+ modulating_signal = ('PSD' , PSD_modulating ),
67
+ param1_list = delta_m_list ,
68
+ param2_list = p_list ,
69
+ seed = seed ,
70
+ )
71
+ # calculate kurtosis
72
+ k_u_nonstationary_nongaussian_psd = es .get_kurtosis (
73
+ nongaussian_nonstationary_signal_psd
74
+ )
64
75
65
- #b) amplitude modulation, modulating signal defined by cubis spline intepolation. Points are based on beta distribution
66
- #Points are separated by delta_n = 2**8 samples (at fs=2**10)
67
- delta_n = 2 ** 10
68
- #define array of parameters alpha and beta
69
- alpha_list = np .arange (1 ,10 ,1 )
70
- beta_list = np .arange (1 ,10 ,1 )
71
- #get signal
72
- nongaussian_nonstationary_signal_beta = es .nonstationary_signal (N ,PSD ,fs ,k_u = k_u_target ,modulating_signal = ('CSI' ,delta_n ),
73
- param1_list = alpha_list ,param2_list = beta_list ,seed = seed )
74
- #calculate kurtosis
75
- k_u_nonstationary_nongaussian_beta = es .get_kurtosis (nongaussian_nonstationary_signal_beta )
76
+ # b) amplitude modulation, modulating signal defined by cubis spline intepolation. Points are based on beta distribution
77
+ # Points are separated by delta_n = 2**8 samples (at fs=2**10)
78
+ delta_n = 2 ** 10
79
+ # define array of parameters alpha and beta
80
+ alpha_list = np .arange (1 , 10 , 1 )
81
+ beta_list = np .arange (1 , 10 , 1 )
82
+ # get signal
83
+ nongaussian_nonstationary_signal_beta = es .nonstationary_signal (
84
+ N ,
85
+ PSD ,
86
+ fs ,
87
+ k_u = k_u_target ,
88
+ modulating_signal = ('CSI' , delta_n ),
89
+ param1_list = alpha_list ,
90
+ param2_list = beta_list ,
91
+ seed = seed ,
92
+ )
93
+ # calculate kurtosis
94
+ k_u_nonstationary_nongaussian_beta = es .get_kurtosis (
95
+ nongaussian_nonstationary_signal_beta
96
+ )
76
97
77
- #Plot
78
- plt .plot (gaussian_signal [:200 ], label = 'Gaussian' )
79
- plt .plot (nongaussian_signal [:200 ], label = 'non-Gaussian stationary' )
80
- plt .plot (nongaussian_nonstationary_signal_psd [:200 ], label = 'non-Gaussian non-stationary (PSD)' )
81
- plt .plot (nongaussian_nonstationary_signal_beta [:200 ], label = 'non-Gaussian non-stationary (CSI)' )
98
+ # Plot
99
+ plt .plot (gaussian_signal [:200 ], label = 'Gaussian' )
100
+ plt .plot (nongaussian_signal [:200 ], label = 'non-Gaussian stationary' )
101
+ plt .plot (
102
+ nongaussian_nonstationary_signal_psd [:200 ],
103
+ label = 'non-Gaussian non-stationary (PSD)' ,
104
+ )
105
+ plt .plot (
106
+ nongaussian_nonstationary_signal_beta [:200 ],
107
+ label = 'non-Gaussian non-stationary (CSI)' ,
108
+ )
82
109
plt .xlabel ('Sample [n]' )
83
110
plt .ylabel ('Signal [Unit]' )
84
111
plt .legend ()
87
114
print (f'kurtosis of stationary Gaussian signal:{ k_u_stationary :.3f} ' )
88
115
print (f'Desired kurtosis of non-Gaussian signals:{ k_u_target :.3f} ' )
89
116
print (f'kurtosis of stationary non-Gaussian signal:{ k_u_stationary_nongaussian :.3f} ' )
90
- print (f'kurtosis of non-stationary non-Gaussian signal (psd):{ k_u_nonstationary_nongaussian_psd :.3f} ' )
91
- print (f'kurtosis of non-stationary non-Gaussian signal (beta):{ k_u_nonstationary_nongaussian_beta :.3f} ' )
117
+ print (
118
+ f'kurtosis of non-stationary non-Gaussian signal (psd):{ k_u_nonstationary_nongaussian_psd :.3f} '
119
+ )
120
+ print (
121
+ f'kurtosis of non-stationary non-Gaussian signal (beta):{ k_u_nonstationary_nongaussian_beta :.3f} '
122
+ )
0 commit comments