Project

General

Profile

Actions

Data format » History » Revision 18

« Previous | Revision 18/21 (diff) | Next »
Anonymous, 03/05/2020 04:01 PM


Lecture des données du radar PoSAR-X

Archive 2019_07_12_14_12_21

Présentation

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.

  • Chaque fichier préfixé "record" contient des données temporelles échantillonnées à 20MHz pendant une seconde, tous les fichiers sont contigus
  • Chaque échantillon est enregistré au format uint16
  • Le signal RF est un signal triangulaire continu, une rampe montante de 500us suivie d'une rampe descendante de 500us
  • Chaque fichier commence par le signal reçu pendant une rampe montante

Pour le traitement, je n'ai considéré pour l'instant que les rampes montantes

Procédure

La fonction de lecture d'un fichier de données est la suivante:

def readFileADLINKCh0( filename, samplesPerFile, timeSerie_A ):
    fd = open(filename,'rb')

    dum = np.fromfile(fd, dtype = np.uint16)

    timeSerie_A[:] = dum[:]

    fd.close()

On fait une boucle pour lire tous les fichiers et créer une matrice contenant une ligne par fichier:

firstFile = 0
nbFiles = 59
lastFile = firstFile + nbFiles - 1
firstBuffer = firstFile * buffersPerFile
lastBuffer = (nbFiles-1) * buffersPerFile + firstBuffer

scalingFactor = 2 / 65535 
offset = -32768

timeSerie_A = np.zeros( samplesPerFile )
adc_A = np.zeros( (nbFiles, samplesPerFile) )

for k in range( nbFiles ):

    # read the data
    nb = str( int( k * buffersPerFile + firstBuffer) )
    filename = data_dir + "/record" + nb + ".bin" 
    readFileADLINKCh0( filename, samplesPerFile, timeSerie_A )

    print("k = {}, block = {} / {}".format(k, nb, lastBuffer))

    adc_A[ k, : ] = (timeSerie_A + offset) * scalingFactor

Les données étant lues, on remet en forme la matrice, une ligne par période de signal:

A_reshaped = adc_A.reshape(nbFiles * rampsPerFile, samplesPerRamp)

Ensuite, on ne garde que la partie du signal correspondant aux rampes montantes:

samplesPerDownRamp = int(samplesPerRamp/2)
A_rampUp = A_reshaped[:, 0:samplesPerDownRamp]

On obtient ainsi une matrice contenant toutes les rampes montantes.

Note: dans l'exemple 2019_07_12_14_12_21, les paramètres sont les suivants:

<?xml version="1.0" encoding="UTF-8"?>
<posarmc version="2.0">
    <posarV2>
        <rampsPerBuffer value="500" units="-"/>
        <bufferSize value="20000000" units="byte"/>
        <buffersPerFile value="2" units="byte"/>
        <rampsPerFile value="1000" units="-"/>
        <fileSize value="4e+7" units="byte"/>
        <samplingFrequency value="2e+7" units="Hz"/>
        <samplesPerRamp value="20000" units="-"/>
        <skipNSamples value="0" units="-"/>
        <rampPeriod value="1000" units="-"/>
        <startFrequency value="9800" units="-"/>
        <stopFrequency value="10100" units="-"/>
    </posarV2>
</posarmc>

Updated by Anonymous over 4 years ago · 18 revisions