Project

General

Profile

Data format » History » Revision 16

Revision 15 (Anonymous, 03/05/2020 03:41 PM) → Revision 16/21 (Anonymous, 03/05/2020 03:57 PM)

h1. Lecture des données du radar PoSAR-X 

 h2. Introduction 

 Cette page a pour but d'expliciter la lecture de l'archive des données de l'enregistrement 2019_07_12_14_12_21. 

 Au niveau de la lecture des données, voici quelques informations: 

 * 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 Data 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 

 h2. Procédure 

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

 <pre><code class="python"> 
 def readFileADLINKCh0( filename, samplesPerFile, timeSerie_A ): 
     fd = open(filename,'rb') 
    
     dum = np.fromfile(fd, dtype = np.uint16) 

     timeSerie_A[:] = dum[:] 
    
     fd.close() 
 </code></pre> 

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

 <pre><code class="python"> 
 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 
 </code></pre> 

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

 <pre><code class="python"> 
 A_reshaped = adc_A.reshape(nbFiles * rampsPerFile, samplesPerRamp) 
 </code></pre> 

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

 <pre><code class="python"> 
 samplesPerDownRamp = int(samplesPerRamp/2) 
 A_rampUp = A_reshaped[:, 0:samplesPerDownRamp] 
 </code></pre> 


 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: 

 <pre><code class="xml"> 
 <?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> 
 </code></pre>