Data format » History » Version 17
Anonymous, 03/05/2020 04:00 PM
1 | 16 | Anonymous | h1. Lecture des données du radar PoSAR-X |
---|---|---|---|
2 | |||
3 | 17 | Anonymous | h2. Archive 2019_07_12_14_12_21 |
4 | 16 | Anonymous | |
5 | 17 | Anonymous | L'achive 2019_07_12_14_12_21 contient les fichiers préfixés "record" enregistré le 12 juillet 2019 lors de la première campagne de mise au point du radar PoSAR-X sur la zone aviation de Monterfil. |
6 | 16 | Anonymous | |
7 | * Chaque fichier préfixé "record" contient des données temporelles échantillonnées à 20MHz pendant une seconde, tous les fichiers sont contigus |
||
8 | * Chaque échantillon est enregistré au format uint16 |
||
9 | * Le signal RF est un signal triangulaire continu, une rampe montante de 500us suivie d'une rampe descendante de 500us |
||
10 | * Chaque fichier commence par le signal reçu pendant une rampe montante |
||
11 | |||
12 | Pour le traitement, je n'ai considéré pour l'instant que les rampes montantes |
||
13 | |||
14 | h2. Procédure |
||
15 | 1 | Anonymous | |
16 | 14 | Anonymous | La fonction de lecture d'un fichier de données est la suivante: |
17 | 3 | Anonymous | |
18 | 1 | Anonymous | <pre><code class="python"> |
19 | def readFileADLINKCh0( filename, samplesPerFile, timeSerie_A ): |
||
20 | fd = open(filename,'rb') |
||
21 | |||
22 | dum = np.fromfile(fd, dtype = np.uint16) |
||
23 | |||
24 | timeSerie_A[:] = dum[:] |
||
25 | |||
26 | fd.close() |
||
27 | </code></pre> |
||
28 | 3 | Anonymous | |
29 | 11 | Anonymous | On fait une boucle pour lire tous les fichiers et créer une matrice contenant une ligne par fichier: |
30 | 1 | Anonymous | |
31 | <pre><code class="python"> |
||
32 | 9 | Anonymous | firstFile = 0 |
33 | nbFiles = 59 |
||
34 | lastFile = firstFile + nbFiles - 1 |
||
35 | 1 | Anonymous | firstBuffer = firstFile * buffersPerFile |
36 | 11 | Anonymous | lastBuffer = (nbFiles-1) * buffersPerFile + firstBuffer |
37 | 9 | Anonymous | |
38 | 8 | Anonymous | scalingFactor = 2 / 65535 |
39 | 1 | Anonymous | offset = -32768 |
40 | 10 | Anonymous | |
41 | 1 | Anonymous | timeSerie_A = np.zeros( samplesPerFile ) |
42 | 4 | Anonymous | adc_A = np.zeros( (nbFiles, samplesPerFile) ) |
43 | 11 | Anonymous | |
44 | 1 | Anonymous | for k in range( nbFiles ): |
45 | |||
46 | # read the data |
||
47 | nb = str( int( k * buffersPerFile + firstBuffer) ) |
||
48 | filename = data_dir + "/record" + nb + ".bin" |
||
49 | readFileADLINKCh0( filename, samplesPerFile, timeSerie_A ) |
||
50 | |||
51 | print("k = {}, block = {} / {}".format(k, nb, lastBuffer)) |
||
52 | |||
53 | adc_A[ k, : ] = (timeSerie_A + offset) * scalingFactor |
||
54 | </code></pre> |
||
55 | 2 | Anonymous | |
56 | 15 | Anonymous | Les données étant lues, on remet en forme la matrice, une ligne par période de signal: |
57 | 1 | Anonymous | |
58 | 2 | Anonymous | <pre><code class="python"> |
59 | 1 | Anonymous | A_reshaped = adc_A.reshape(nbFiles * rampsPerFile, samplesPerRamp) |
60 | 15 | Anonymous | </code></pre> |
61 | 1 | Anonymous | |
62 | 15 | Anonymous | Ensuite, on ne garde que la partie du signal correspondant aux rampes montantes: |
63 | |||
64 | <pre><code class="python"> |
||
65 | 12 | Anonymous | samplesPerDownRamp = int(samplesPerRamp/2) |
66 | 11 | Anonymous | A_rampUp = A_reshaped[:, 0:samplesPerDownRamp] |
67 | 1 | Anonymous | </code></pre> |
68 | 15 | Anonymous | |
69 | 5 | Anonymous | |
70 | 13 | Anonymous | On obtient ainsi une matrice contenant toutes les rampes montantes. |
71 | |||
72 | 7 | Anonymous | *Note:* dans l'exemple *2019_07_12_14_12_21*, les paramètres sont les suivants: |
73 | 5 | Anonymous | |
74 | <pre><code class="xml"> |
||
75 | <?xml version="1.0" encoding="UTF-8"?> |
||
76 | <posarmc version="2.0"> |
||
77 | <posarV2> |
||
78 | <rampsPerBuffer value="500" units="-"/> |
||
79 | <bufferSize value="20000000" units="byte"/> |
||
80 | <buffersPerFile value="2" units="byte"/> |
||
81 | <rampsPerFile value="1000" units="-"/> |
||
82 | <fileSize value="4e+7" units="byte"/> |
||
83 | <samplingFrequency value="2e+7" units="Hz"/> |
||
84 | <samplesPerRamp value="20000" units="-"/> |
||
85 | <skipNSamples value="0" units="-"/> |
||
86 | <rampPeriod value="1000" units="-"/> |
||
87 | <startFrequency value="9800" units="-"/> |
||
88 | <stopFrequency value="10100" units="-"/> |
||
89 | </posarV2> |
||
90 | </posarmc> |
||
91 | </code></pre> |