Project

General

Profile

Data format » History » Version 19

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