import csv import matplotlib.pyplot as plt import os import math import sys import numpy as np from matplotlib import animation import cmath from scipy.fft import fft def newtonpplus(f,h,u) : # calcul de k: g = 9.81 kh = 0.5 x = 0.001 u=-u while (abs((kh - x)/x) > 0.00000001) : x = kh fx = x*math.tanh(x) - (h/g)*(2*math.pi*f-(u/h)*x)*(2*math.pi*f-(u/h)*x) fprimx = math.tanh(x) + x*(1- (math.tanh(x))**2)+(2*u/g)*(2*math.pi*f-(u/h)*x) kh = x - (fx/fprimx) k = kh/h return k def newtonpmoins(f,h,u0) : # calcul de k: g = 9.81; kh = 0.5; x = 0.01; x = 6*h; while (np.abs((kh - x)/x) > 0.00000001): x = kh; fx = x*math.tanh(x) - (h/g)*(2*math.pi*f-(u0/h)*x)*(2*math.pi*f-(u0/h)*x); fprimx = math.tanh(x) + x*(1- (math.tanh(x))**2)+(2*u0/g)*(2*math.pi*f-(u0/h)*x); kh = x - (fx/fprimx); k = kh/h return k #Calcul du vecteur d'onde a partir de la frÈquence #kh : vecteur d'onde * profondeur d'eau def newtonpropa(hi,f): # calcul de k: g=9.81; si = (2*math.pi*f)**2/g; kh = 0.5; x = 0.001; while (np.abs((kh - x)/x) > 0.00000001) : x = kh; fx = x*math.tanh(x) - si*hi; fprimx = math.tanh(x) + x*(1- (math.tanh(x))**2); kh = x - (fx/fprimx); kpropa = kh/hi; return kpropa def reflex3S(x1,x2,x3,xs1,xs2,xs3,h,mean_freq,fmin,fmax) : # Analyse avec transformee de fourier d un signal en sinus # calcul du coefficient de reflexion en presence d un courant u # tinit : temps initial # tfinal : temps final # deltat : pas de temps # fech= 1/deltat : frequence d echantillonnage # T : periode de la houle # nbrepoints : nombre de points # fmin : frequence minimale de recherche des maxima du signal de fourier # fmax : frequence maximale de recherche des maxima du signal de fourier # ampliseuil : amplitude minimale des maxima recherches # valeur du courant (u > 0 correspond a un courant dans le sens # des x croissants) #u=0; # h profondeur d'eau #hold on; #fech=16; #fmin=0.1;fmax=4;ampliseuil=0.005; #nbrepoints=fech*T*1000; #deltat=1./fech; #tinit=0;tfinal=tinit+deltat*(nbrepoints-1); #aitheo=1;artheo=0.4; #h=3; #T=1.33; #ftheo=1/T; #fech=16; #fmin=0.1;fmax=4;ampliseuil=0.005; #nbrepoints=fech*T*1000; #deltat=1./fech; #tinit=0;tfinal=tinit+deltat*(nbrepoints-1); #t = [tinit:deltat:tfinal]; #ktheo = newtonpropa(ftheo,h); #Positions respectives sondes amonts entr'elles et sondes aval # entr'elles # xs1=0;xs2=0.80;xs3=1.30; #ENTREES DONNEES DES 3 SONDES AMONT et des 2 SONDES AVAL ampliseuil=0.005; #'check' #pause #PAS DE TEMPS deltat1=1/mean_freq; deltat2=1/mean_freq; deltat3=1/mean_freq; #transformees de Fourier Y1 = fft(x1,len(x1)); N1 = len(Y1); Y2 = fft(x2,len(x2)); N2 = len(Y2); Y3 = fft(x3,len(x3)); N3 = len(Y3); #amplitudes normalisees, soit coef de fourier amplitude1=np.abs(Y1[1:N1//2])/(N1//2); nyquist = 1/2; freq1 = (np.arange(1, (N1//2)+1, 1)-1)/(N1//2)/deltat1*nyquist; amplitude2=np.abs(Y2[1:N2//2])/(N2//2); nyquist = 1/2; freq2 = (np.arange(1, (N2//2)+1, 1)-1)/(N2//2)/deltat2*nyquist; amplitude3=np.abs(Y3[1:N3//2])/(N3//2); nyquist = 1/2; freq3 = (np.arange(1, (N3//2)+1, 1)-1)/(N3//2)/deltat3*nyquist; #recherche de la phase theta1=np.angle(Y1[1:N1//2]); theta2=np.angle(Y2[1:N2//2]); theta3=np.angle(Y3[1:N3//2]); #pas de frequence deltaf deltaf=1/(N1//2)/deltat1*nyquist; nbrefreq=len(freq1); #Caracteristiques fondamentaux,sondes canaux 1 et 3 #distances entre les sondes x12=xs2-xs1; x13=xs3-xs1; x23=xs3-xs2; #Debut calcul des coefficients de reflexion indmin=np.min(np.where(freq1>0.02)); indfmin=np.min(np.where(freq1>fmin)); indfmax=np.max(np.where(freq1