ANNEXE :
1 ## Importation des modules
2
3 import numpy as np
4
5 from [Link] import speed_of_light, pi
6
7 from [Link] import loadmat
8
9 from matplotlib import pyplot as plt
10
11
12 ## Importation du signal
13
14 data = loadmat('[Link]')
15
16 signal =[Link](data['signal'])
17
18 frequence = [Link](data['frequency'])
19
20 distance_centrale = [Link](data['range_center'])
21
22 ouverture_synthetique = [Link](data['synthetic_aperture'])
23
24 ouverture_reelle= [Link](data['aperture_length'])
25
26
27 ## Pré-traitement du signal pour la compression en distance
28
29 nAz, nRange = [Link]
30
31 nfft_Range = 16*2**[Link](np.log2(nRange))
32
33 nfft_Az = 2**[Link](np.log2(nAz))
34
35 fenetre_distance= speed_of_light/ (2 * (frequence[1] - frequence[0]))
36
37 distance_oblique= [Link](0,fenetre_distance, int(nfft_Range))
38
39 frequence_centrale =frequence[int(len(frequence)/2)]
40
41 longeur_d_onde = speed_of_light / frequence_centrale
42
43 coefficients = [Link](nRange)
44
45
46 ## Compression en distance
47
48 Hf=[Link](1j * 4.0 * pi*frequence/ speed_of_light *
distance_centrale[int(len(distance_centrale)/2)]) * coefficients
49
50 Sf = signal
51
52 data_correction=[Link]((nAz, int(nfft_Range)), dtype=complex)
1/5
53
54 for i in range(nAz):
55
56 data_correction[i, :] = [Link]([Link](Sf[i, :] * Hf,
int(nfft_Range)))
57
58 prf = 850
59 v_eff = 100
60 frequence=[Link](-(v_eff*nAz*(1/prf)/2), v_eff*nAz*(1/prf)/2 , nAz)
61
62
63 ## Résultat après la compression en distance
64
65
[Link](distance_oblique, frequence,
[Link](data_correction)/[Link]([Link](data_correction)), cmap='jet')
66
67 # Définis le titre et le nom des axes
68
69 [Link]('Données après la compression en distance', size=18)
70
71 [Link]('Range (m)', size=16)
72
73
[Link]('Position azimutale du radar (m)', size=16)
74
75
76
# Ajuste la taille des valeurs affichées sur les axes
77
78
79 plt.tick_params(labelsize=16)
80
81
82 # Affiche l'échelle d'amplitude
83
84 cbar = [Link]()
85
86 cbar.set_label('Amplitude normalisée')
87
88
89 # Affiche l'image
90
91 [Link]()
92
93
94
## Pré-traitement du signal pour la Correction de la Migration en Distance
95
96
97 rd_data=[Link]([Link](data_correction, axis=0), 0)
98
99 centre=distance_centrale[int(len(distance_centrale)/2)]
100
101 delta_distance_oblique = distance_oblique[1] - distance_oblique[0]
102
103 [nA, nR] = rd_data.shape
104
105 frequence=[Link](-0.5 * prf, 0.5 * prf, nA)
2/5
106 ## Correction de la Migration en Distance
107
108 # Calcul du déclage induit par le déplacement du radar
109
110 offsets=(1 / [Link](1 - (longeur_d_onde * frequence / (2 * v_eff) )**2) -
1)*centre
111
112
113 # Conversion du décalage en nombre de cases dans l'image
114
115 offsets=[Link](offsets/ delta_distance_oblique)
116
117 frequence = frequence * 5
118
119
120
# Création de l'image avec la correction du décalage
121
122
123 cmd_data = np.zeros_like(rd_data)
124
125 i = 0
126
127 for offset in offsets:
128
129 cmd_data[i,:] =[Link](rd_data[i, :], -int(offset))
130
131 i+= 1
132
133
134 ## Résultat après la CMD
135
[Link](distance_oblique,frequence,
[Link](cmd_data)/[Link]([Link](cmd_data)), cmap='jet')
136
137 [Link]([-0.5 * prf - 0.05 * prf, 0.5 * prf + 0.05 * prf])
138
139
140
141 # Définis le titre et le nom des axes
142
143
[Link]('Données après la CMD', size=18)
144
145
[Link]('Range (m)', size=16)
146
147
148 [Link]('Doppler (Hz)', size=16)
149
150
151 # Ajuste la taille des valeurs affichées sur les axes
152
153 plt.tick_params(labelsize=16)
154
155
156 # Affiche l'échelle d'amplitude
157
158 cbar = [Link]()
3/5
159 cbar.set_label('Amplitude normalisée')
160
161
162 # Affiche l'image
163
164 [Link]()
165
166
167
## Compression azimuthale
168
169
data_correction = [Link]([Link](cmd_data, 0), axis=0)
170
171
172 coefficients = [Link](nAz)
173
174 image=[Link]((int(nfft_Az), int(nfft_Range)), dtype=complex)
175
176 index_central = int([Link](len(distance_centrale) / 2))
177
178 i = 0
179
180 for sr in distance_oblique:
181
a=coefficients * [Link](1j * 4 * pi * frequence_centrale /
speed_of_light * ouverture_synthetique**2 / (distance_centrale[index_central]
+ sr))
182
183 af=[Link](a, int(nfft_Az))
184
185 image[:,i] =
[Link]([Link]([Link](data_correction[:,i], int(nfft_Az))*
af))
186
187 i += 1
188
189 distance_azimuth = [Link](-0.5 * ouverture_reelle * nAz / nfft_Az, 0.5 *
ouverture_reelle * nAz / nfft_Az, int(nfft_Az))
190
191
192 ## Résultat après la compression azimuthale
193
194 # En dessous de cette valeur d'amplitude en dB, le signal sera considéré
comme nul
195
196 filtre_amplitude = 35
197
198
199 [Link](distance_oblique, distance_azimuth + 45, 20 *
np.log10([Link](image)/[Link]([Link](image)) ), cmap='jet', vmin=-
abs(filtre_amplitude), vmax=0)
200
201 [Link]([-10, 10])
202
203
204 # Définis le titre et le nom des axes
205
4/5
206 [Link]('Données après la Compression azimutale', size=18)
207
208 [Link]('Range (m)', size=16)
209
210 [Link]('distance azimutale (m)', size=16)
211
212
213
# Ajuste la taille des valeurs affichées sur les axes
214
215
plt.tick_params(labelsize=16)
216
217
218
219 # Affiche l'échelle d'amplitude
220
221 cbar = [Link]()
222
223 cbar.set_label('Amplitude (dB)')
224
225
226 # Affiche l'image
227
[Link]()
5/5