#Operations with integers# import numpy as np from bin16 import * from fft import * import math import cmath import matplotlib.pyplot as plt from basic_parameters_Int import * from basic_parameters import * #This is the number of points used for the FFT N = 256 #These are the limits of our quantization liminfB = -1 limsupB = +1 liminfE = -10000000 limsupE = +10000000 ############################# #Example of signals taken from a simulation a = np.random.rand() b = np.sqrt(1 - a*a) n = [1,1,1] E_para = [0,0,0] f = 1500 fs = 98304 l = 30000 [b1,b2,b3,e1,e2] = SignalsWaveMonochromatic(a,b,n,E_para,f,fs,l) ############################# #We add noise b1 = b1 + np.random.uniform(1.0*liminfB/100,1.0*limsupB/100,len(b1)) b2 = b2 + np.random.uniform(1.0*liminfB/100,1.0*limsupB/100,len(b2)) b3 = b3 + np.random.uniform(1.0*liminfB/100,1.0*limsupB/100,len(b3)) e1 = e1 + np.random.uniform(1.0*liminfE/100,1.0*limsupE/100,len(e1)) e2 = e2 + np.random.uniform(1.0*liminfE/100,1.0*limsupE/100,len(e2)) #This will take our float-number signals and quantize them into integers going from -32768 to 32767 #The liminf and limsup is what decides the maximum and minimum values for our quantizations #quant16 is a function from the bin16 library b1Q = np.zeros(len(b1)) b2Q = np.zeros(len(b2)) b3Q = np.zeros(len(b3)) e1Q = np.zeros(len(e1)) e2Q = np.zeros(len(e2)) for i in range(len(b1)): b1Q[i] = quant16(b1[i],liminfB,limsupB) b2Q[i] = quant16(b2[i],liminfB,limsupB) b3Q[i] = quant16(b3[i],liminfB,limsupB) e1Q[i] = quant16(e1[i],liminfE,limsupE) e2Q[i] = quant16(e2[i],liminfE,limsupE) #We calculate the Spectral Matrices (averaged in time) for the case of float-numbers operations and also for the integer-numbers operations Si,wi = Spectral_MatriceAvgTime_Int(b1Q[::24],b2Q[::24],b3Q[::24],e1Q[::24],e2Q[::24],4096,N) Sf,wf = Spectral_MatriceAvgTime(b1[::24],b2[::24],b3[::24],e1[::24],e2[::24],4096,N) [PBf,PEf,df,ef,nf] = BasicParameters(Sf,wf) [PBi,PEi,di,ei,ni] = BasicParameters_Int(Si,wi) mypath = "plotsFloatVsInt" if not os.path.isdir(mypath): os.makedirs(mypath) fm = 4096 alfa = 1.0 * math.pow(2,30) plt.plot(wf/(2*math.pi),PBf,'g') plt.scatter(wf/(2*math.pi),1.0 * PBi/alfa) plt.title("Power spectrum density of the Magnetic Field (fm = %s Hz)" % fm) plt.xlabel("frequency [Hz]") plt.ylabel("PB(w)") plt.savefig('%s/PB.png' % mypath) plt.close() alfa = 1.0 * math.pow(2,30)/math.pow(10,14) plt.plot(wf/(2*math.pi),PEf,'g') plt.scatter(wf/(2*math.pi),1.0 * PEi/alfa) plt.title("Power spectrum density of the Electric Field (fm = %s Hz)" % fm) plt.xlabel("frequency [Hz]") plt.ylabel("PE(w)") plt.savefig('%s/PE.png' % mypath) plt.close() alfa = 16 plt.plot(wf/(2*math.pi),ef,'g') plt.scatter(wf/(2*math.pi),1.0 * ei/alfa) plt.title("Ellipticity of the electromagnetic wave (fm = %s Hz)" % fm) plt.xlabel("frequency [Hz]") plt.ylabel("e(w)") plt.savefig('%s/e.png' % mypath) plt.close() alfa = 8 plt.plot(wf/(2*math.pi),df, 'g') plt.scatter(wf/(2*math.pi),1.0 * di/alfa) plt.title("Degree of polarization of the electromagnetic wave (fm = %s Hz)" % fm) plt.xlabel("frequency [Hz]") plt.ylabel("d(w)") plt.savefig('%s/d.png' % mypath) plt.close()