ttt.py 6.55 KB
#!/usr/bin/python3
#import os
"""
Created on Tue Jan 11 2022
@author : ALKADRI Mohammad
E-mail : mohammad.alkadri.95@gmail.com

"""

import threading
import collections
import time
import socket
import string
import numpy as np
from datetime import datetime
def thread_client():
    print("Server launched")
    a=1
    while (a):
        sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        sock.connect(('127.0.0.1',4242))
        data= sock.recv(1)
        data=data.decode()
        while (a):
            if 'q' in data:
                global arret
                print("Bye")
                time.sleep(1.6)
                arret=0
                sock.close()
                a=0
    print("Server done")
    print(datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'))

def Data_RTL():
    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    ip=socket.gethostbyname("127.0.0.1")
    port=1234
    address=(ip,port)
    client.connect(address)
    global arret
    N=0
    dd = collections.deque(maxlen=9770)
    while (arret):
        dd.append(client.recv(1024))
        N+=1024
    a=0
    b=[]#np.zeros(10000000)
    i=0
    for i in range(len(dd)):
        b[a:a+1023]=dd[i]
        a=a+1024
    if ((len(b)%2)==1):
        b=b[0:-1]
    x=np.array(b)
    print(len(x))
    #x.tofile("xxxxx.txt")
    x=x[0::2]+1j*x[1::2]
    x=x-127-127j;
    client.close()
    return x
def PPS(x):
    # identification des fronts montants des 1-PPS sur gateway
    pps1=(np.absolute(x)>seuilpps).nonzero()
    dpps=np.diff(pps1,n=1,axis=1).reshape(-1)
    k=np.array((dpps>50).nonzero()).reshape(-1) ; # (fs*0.1)); % elimine les communications LoRa
    pps1=np.array(pps1).flatten()
    pps=np.array(pps1)[k.astype(int)];
    """
    k=(np.diff(pps,n=1,axis=0)>(fs*0.4)).nonzero()  # elimine les fronts descendants
    print(len(k))
    print(k)
    k=np.array(k).reshape(-1)
    if k[0]==0: 
            k=k[1:];                           # cas ou` acquisition commence dans un PPS haut
    """
    print("pps = ",np.diff(pps,n=1,axis=0))
    k=(np.diff(pps,n=1,axis=0)==300000).nonzero()
    k=np.array(k).reshape(-1)
    try:
        ppsgw=pps[k];                              # indice des 1-PPS sur gw
    except:
        ppsgw=[1]
    if (ppsgw.size==0):
        ppsgw=[1]
    print("ppsgw = ", ppsgw)
    
    return ppsgw

def Chirp_detect(x,t):
    cc=[]
    ddd=x[int((t+1)*1e6):int((t+2)*1e6)]
    cc=np.fft.fft(ddd)
    cc=np.array(cc)
    sssr=[]
    sssd=[]
    ccris=np.fromfile('ccris.bin',dtype=np.complex128)
    ccdec=np.fromfile('ccdec.bin',dtype=np.complex128)

    N=0#int((t-1)*1e6)
    sssr[N:N+len(ccris)-1]=cc[N:N+len(ccris)]*ccris
    sssr=np.array(sssr)
    chirp_detect_ris=np.fft.ifft(sssr)
    sssd[N:N+len(ccdec)-1]=cc[N:N+len(ccdec)]*ccdec
    sssd=np.array(sssd)
    chirp_detect_dec=np.fft.ifft(sssd)
    chirp_detect=np.absolute(chirp_detect_ris)+np.absolute(chirp_detect_dec);
    """
    if (t==1):
        chirp_detect.tofile("ch1.txt")
        cc.tofile("c1.txt")
    if (t==2):
        chirp_detect.tofile("ch2.txt")
        cc.tofile("c2.txt")
    """
    seuil=0.65*max(chirp_detect);
    print(seuil)
    k=np.array((chirp_detect>seuil).nonzero()).reshape(-1);
    try:
        debut=int(k[0]-int(d*fs)+(t-1)*1e6+2000000) # fin_gw1=k(end); % /!\ ATTENTION RISQUE D'AVOIR LES DEUX COMM
    except:
        debut=int((t-1)*1e6+2000000) # pour éviter l'erreur, k[0]=0
    
    print(debut)
    return debut

def Time(x,debut,ppsgw,t):
    global indice_pps
    xx=x[debut:debut+int(d*fs*longueur_chirps)]; # transmission gateway
    xx=np.fft.fft(xx)
    if t == 1:
        ccy=np.fromfile('ccrisy.bin',dtype=np.complex128)
        print("ccy1")
    else:
        ccy=np.fromfile('ccdecy.bin',dtype=np.complex128)
        print("ccy2")
    y=np.absolute(np.fft.ifft(xx * ccy));
    pos1=np.array((y>(max(y)/2)).nonzero()).reshape(-1);
    #pos2=np.array(pos1>pos1[0]-200+6*1536)
    #pos22=pos2[0]
    try:
        pos11=pos1[0]; # premier chirp
    except:
        pos11 =1
    yy=y[pos11:pos11+int(d*fs)]
    v=np.argmax(yy)
    print("1111111111111")
    print("pos11 ", pos11)
    print("np.max(y) ",np.max(y))
    print("np.max(yy) ",np.max(yy))
    print("v ",v)
    print("yy[v] ",yy[v])

    if v !=1529 :
        v =v + 1/2*((yy[v-1]-yy[v+1])/(yy[v-1]+yy[v+1]-2*yy[v]))
    print("v ",v)
    t1=pos11+v
    print("t1 ", t1)

    debut=pos11+v-1-1+debut
    print(debut)
    pos22=pos11+6*1536
    yy=y[pos22:pos22+int(d*fs)]
    v=np.argmax(yy)
    print("2222222222222")
    print("pos22 ", pos22)
    print("np.max(y) ",np.max(y))
    print("np.max(yy) ",np.max(yy))
    print("v ",v)
    print("yy[v] ",yy[v])

    if v !=1529 :
        v =v + 1/2*((yy[v-1]-yy[v+1])/(yy[v-1]+yy[v+1]-2*yy[v]))
    print("v ",v)
    t2=pos22+v
    print("t2 ", t2)
    tg= t2-t1
    print("tg ", tg)
    if t==1:
        if (ppsgw[0]<=debut):
            indice_pps=ppsgw[(np.array((ppsgw<debut).nonzero()).reshape(-1))[-1]] # indice_pps=ppsgw(find(ppsgw<debut_gw1)(end));
        else:
            indice_pps=0
    debut=debut-indice_pps   # /!\ ecart premiere transmission
    return tg, debut, indice_pps

def TGW():

    x=Data_RTL()
    pps=PPS(x)
    debut1 = Chirp_detect(x,1)
    print(debut1)
    tg1, debut1, indice_pps= Time(x,debut1,pps,1)
    x[0:int(debut1+indice_pps+d*fs*800)]=0
    print(pps)
    print(len(x))
    print(debut1)
    debut2 = Chirp_detect(x,2)
    print(debut2)
    tg2, debut2, indice_pps= Time(x,debut2,pps,2)
    print(debut2)
    #Tgw = debut2-debut1
    Tgw =[debut1,debut2-debut1]
    Tgw=np.array(Tgw)
    return Tgw

def Send(Tgw):

    print("Server lanched")
    sock_T=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock_T.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    sock_T.bind(('127.0.0.1',2222))
    sock_T.listen(1)
    conn,addr=sock_T.accept()
    with conn:
        print("connected from", addr)
        conn.send(Tgw)
        sock_T.close()

while (1):
    fs=1.5e6
    seuilpps=0.08*127*2;
    B=125e3;
    d=1/980;
    freq_int=1e4;
    longueur_chirps=8;
    threading.Thread(target=thread_client, args=()).start()
    arret = 1
    Tgw = TGW()
    print("Tgw = ", Tgw)
    Send(Tgw)
"""
    print("debut_gw1 =",debut_gw1)


    print("debut_gw1_vs_1pps = ", debut_gw1_vs_1pps)
"""
    ############### FIN DE LA PREMIERE MESURE #################

"""
    debut_gw2_vs_1pps=debut_gw2-indice_pps   # /!\ ecart deuxième transmission
    print("debut_gw2_vs_1pps = ", debut_gw2_vs_1pps)
    Tgw= debut_gw2_vs_1pps - debut_gw1_vs_1pps;

    print("fin du cycle")
    print(datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S'))
"""