diff --git a/PaperPlots.py b/PaperPlots.py new file mode 100644 index 0000000000000000000000000000000000000000..41601f0aacd62a8e7a1804d72f2bc9fa46e50076 --- /dev/null +++ b/PaperPlots.py @@ -0,0 +1,94 @@ +import numpy as np +import scipy.signal as signal_power +import scipy as sp +import matplotlib.pyplot as plt +import itertools +from CalibPackage import * + + +N=128 +points=np.arange(N)/N +time=points*2*np.pi +dft_mat=sp.linalg.dft(len(time)) +freq=points/points[1] +im_dft_mat=np.imag(dft_mat) +re_dft_mat=np.real(dft_mat) +data=np.cos(30*time)+1j*np.sin(30*time) + +skewRange=np.arange(-0.3,0.3,0.02) +BpCellRange=[1,2,3] +Optskew=[0,0,0] +Maxbits=12 +ModelNos=np.arange(10) +varRange=np.zeros([len(ModelNos)]) +ModelNos=[3,5,8] +SNR_NoComp=[] +SNR_SWIPE=[] +SNRQuant=[] +BitRange=[] +SNRin=100; +im_dft_mat1=im_dft_mat*1 +re_dft_mat1=re_dft_mat*1 +idealOut=np.matmul(re_dft_mat,data)+1j*np.matmul(im_dft_mat,data) +Testbits=range(Maxbits*10+1) +Testbits=[7] +h=-1 +for BpCell in BpCellRange: + h=h+1 + #NRange=int((Maxbits)/BpCell) + NRange=10 + l=0 + Noise_SWIPE=np.zeros([len(varRange),len(skewRange),NRange]) + Noise_NoComp=np.zeros([len(varRange),len(skewRange),NRange]) + NoiseQuant=np.zeros([len(varRange),len(skewRange),NRange]) + SigPower=np.zeros([len(varRange),len(skewRange),NRange]) + for ModelNo in ModelNos: + k=0 + varRange[l]=np.max(getVarModel(ModelNo,BpCell)) + Var=varRange[l] + for skew in skewRange: + for m in range(1,NRange+1): + Nbits=BpCell*m+1 + if Nbits in Testbits: + for iterations in range(100): + nData=AWGN(data,SNRin) + im_dft_mat=im_dft_mat1*(1) + re_dft_mat=re_dft_mat1*(1) + idealOut=np.matmul(re_dft_mat,data)+1j*np.matmul(im_dft_mat,data) + im_dft_SWIPE=SWIPE(im_dft_mat, Nbits, 0.7, skew=skew, BpCell=BpCell,ModelNo=ModelNo) + re_dft_SWIPE=SWIPE(re_dft_mat, Nbits, 0.7, skew=skew, BpCell=BpCell,ModelNo=ModelNo) + ReRAM_Output_SWIPE=np.matmul(re_dft_SWIPE,nData)+1j*np.matmul(im_dft_SWIPE,nData) + Diff_SWIPE=idealOut-ReRAM_Output_SWIPE + Noise_SWIPE[l,k,m-1]+=np.mean(np.abs(np.power(Diff_SWIPE,2))) + + + im_dft_NoComp=ConvRead(im_dft_mat,Nbits,BpCell=BpCell,ModelNo=ModelNo) + re_dft_NoComp=ConvRead(re_dft_mat,Nbits,BpCell=BpCell,ModelNo=ModelNo) + ReRAM_Output_NoComp=np.matmul(re_dft_NoComp,nData)+1j*np.matmul(im_dft_NoComp,nData) + Diff_NoComp=idealOut-ReRAM_Output_NoComp + Noise_NoComp[l,k,m-1]+=np.mean(np.abs(np.power(Diff_NoComp,2))) + + im_dft_quant=QuantRead(im_dft_mat,Nbits) + re_dft_quant=QuantRead(re_dft_mat,Nbits) + QuantOut=np.matmul(re_dft_quant,nData)+1j*np.matmul(im_dft_quant,nData) + DiffQuant=idealOut-QuantOut + NoiseQuant[l,k,m-1]+=np.mean(np.abs(np.power(DiffQuant,2))) + + SigPower[l,k,m-1]+=np.mean(np.abs(np.power(idealOut,2))) + print('Nbits={}'.format(Nbits)) + print('SNR No Compensation {}'.format(10*np.log10(SigPower[l,k,m-1]/Noise_NoComp[l,k,m-1]))) + print('SNR Quantization {}'.format(10*np.log10(SigPower[l,k,m-1]/NoiseQuant[l,k,m-1]))) + print('SNR Compensation {}'.format(10*np.log10(SigPower[l,k,m-1]/Noise_SWIPE[l,k,m-1]))) + k=k+1 + print('------------ skew={} -----------'.format(skew)) + l=l+1 + print('------------ var={} -----------'.format(Var)) + print('############### BpCell={} ###############'.format(BpCell)) + SNR_NoComp.append(10*np.log10(SigPower/Noise_NoComp)) + SNR_SWIPE.append(10*np.log10(SigPower/Noise_SWIPE)) + SNRQuant.append(10*np.log10(SigPower/NoiseQuant)) + BitRange.append(np.arange(1,NRange+1)) + + +io.savemat('SkewData.mat',{'SNRConv':SNR_NoComp,'SNRSWIPE':SNR_SWIPE,'SNRQuant':SNRQuant,'BitRange':BitRange}) +