-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathula.py
120 lines (101 loc) · 2.56 KB
/
ula.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
import numpy as np
from doa_py.algorithm import esprit, l1_svd, music, omp, root_music
from doa_py.arrays import UniformLinearArray
from doa_py.plot import plot_estimated_value, plot_spatial_spectrum
from doa_py.signals import ComplexStochasticSignal
# signal parameters
num_snapshots = 300
signal_fre = 2e7
fs = 5e7
snr = -5
# array parameters
num_antennas = 8
antenna_spacing = 0.5 * (
3e8 / signal_fre
) # set array spacing to half wavelength
# incident angles
angle_incidence = np.array([0, 30])
num_signal = len(angle_incidence)
# initialize signal instance
signal = ComplexStochasticSignal(fc=signal_fre)
# initialize array instance
array = UniformLinearArray(m=num_antennas, dd=antenna_spacing)
# generate received data
received_data = array.received_signal(
signal=signal,
snr=snr,
nsamples=num_snapshots,
angle_incidence=angle_incidence,
unit="deg",
)
search_grids = np.arange(-90, 90, 1)
music_spectrum = music(
received_data=received_data,
num_signal=num_signal,
array=array,
signal_fre=signal_fre,
angle_grids=search_grids,
unit="deg",
)
# plot spatial spectrum
plot_spatial_spectrum(
spectrum=music_spectrum,
angle_grids=search_grids,
ground_truth=angle_incidence,
num_signal=num_signal,
y_label="MUSIC Spectrum (dB)",
)
rmusic_estimates = root_music(
received_data=received_data,
num_signal=num_signal,
array=array,
signal_fre=signal_fre,
unit="deg",
)
plot_estimated_value(
estimates=rmusic_estimates,
ground_truth=angle_incidence,
y_label="Root-MUSIC Estimated Angle (deg)",
)
esprit_estimates = esprit(
received_data=received_data,
num_signal=num_signal,
array=array,
signal_fre=signal_fre,
)
plot_estimated_value(
estimates=esprit_estimates,
ground_truth=angle_incidence,
y_label="ESPRIT Estimated Angle (deg)",
)
omp_estimates = omp(
received_data=received_data,
num_signal=num_signal,
array=array,
signal_fre=signal_fre,
angle_grids=search_grids,
unit="deg",
)
plot_estimated_value(
estimates=omp_estimates,
ground_truth=angle_incidence,
y_label="OMP Estimated Angle (deg)",
)
l1_svd_spectrum = l1_svd(
received_data=received_data,
num_signal=num_signal,
array=array,
signal_fre=signal_fre,
angle_grids=search_grids,
unit="deg",
)
plot_spatial_spectrum(
spectrum=l1_svd_spectrum,
angle_grids=search_grids,
ground_truth=angle_incidence,
num_signal=num_signal,
y_label="L1-SVD Spectrum (dB)",
)