**A basic "seed" for plotting csv data files with**

**matplotlib.**

Well, basically all the usage guide and information about the matplotlib library is available online, however I am writing this as an emphasis on how good matplotlib actually is, moreover I can again use this short snippet as a quick "seed/template" in the future without having to write it from scratch. Here's a short example on plotting line charts from a *.csv file.

## Plotting from a csv and writing down a pdf using matplotlib. Look after the transpose function for the column plotting settings. ## ## Initial verison A Deyan Levski - didolevski@gmail.com ## ## from numpy import array import csv import matplotlib.pyplot as plt #def plotit(filename,title): filename='Slew-Rate-Limit-Errors-Capture.csv'; title='OTA residue voltage'; cs=csv.reader(file(filename,"r"),delimiter=",")# seperator of csv data is a tab ("\t") # Have to convert comma decimal to dot decimal delimiter # newlist=[[float(e.replace(".",".")) for e in x] for x in cs] #If no conversion needed paste in: newlist=[[float(e) for e in x] for x in cs] newlist=[[float(e) for e in x] for x in cs] # convert from pairs for [[x1,y1],[x2,y2]...etc] to [x1,x2,..] [y1,y2,..] ar=array(newlist).transpose() fig=plt.figure() ax=fig.add_subplot(1,1,1) ax.plot(ar[0],ar[1]) ax.plot(ar[0],ar[3]) ax.set_xlabel(r"$T_{p}$") ax.set_ylabel(r"Voltage") ax.grid(True) # Default grid settings #ax.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) #ax.axis('tight') # Tight auto axis ax.set_ylim([-0.5, 4]) # Custom Y axis #axes[2].set_xlim([2, 5]) # Custom X axis plt.title(title) # Plot plt.savefig(filename+".pdf") # Save figure

One can also use it for plotting histograms, e.g. if you are running some MonteCarlo simulations directly from the SPICE engine and you do not have any GUI available to use.

## Plotting from a csv and writing down a pdf using matplotlib. Look after the transpose function for the column plotting settings. ## ## Initial verison A Deyan Levski - didolevski@gmail.com ## ## from matplotlib import rc rc('font',**{'family':'sans-serif','sans-serif':['Helvetica']}) ## for Palatino and other serif fonts use: #rc('font',**{'family':'serif','serif':['Palatino']}) rc('text', usetex=True) from numpy import array import csv import math import numpy as np import matplotlib.pyplot as plt import matplotlib.mlab as mlab #def plotit(filename,title): filename='OTA-InputOffset-MC-4000.hash'; title='OTA Input Offset Distribution'; cs=csv.reader(file(filename,"r"),delimiter=",")# seperator of csv data is a tab ("\t") # Have to convert comma decimal to dot decimal delimiter # newlist=[[float(e.replace(".",".")) for e in x] for x in cs] #If no conversion needed paste in: newlist=[[float(e) for e in x] for x in cs] newlist=[[float(e) for e in x] for x in cs] # convert from pairs for [[x1,y1],[x2,y2]...etc] to [x1,x2,..] [y1,y2,..] ar=array(newlist).transpose() fig=plt.figure() ax = fig.add_subplot(111) # the histogram of the data n, bins, patches = ax.hist(ar[1], 30, normed=1, facecolor='green', alpha=0.75) # hist uses np.histogram under the hood to create 'n' and 'bins'. # np.histogram returns the bin edges, so there will be 50 probability # density values in n, 51 bin edges in bins and 50 patches. To get # everything lined up, we'll compute the bin centers bincenters = 0.5*(bins[1:]+bins[:-1]) acc=0 nr=0 for i in ar[1]: acc += i nr += 1 mu=acc/nr print mu acc2=0 nr=0 for i in ar[1]: acc += ((i-mu)**2) nr += 1 sd=acc/nr sd=math.sqrt(abs(sd)) print sd # add a 'best fit' line for the normal PDF y = mlab.normpdf( bincenters, mu, sd) l = ax.plot(bincenters, y, 'r--', linewidth=1) ax.set_xlabel('Input offset voltage') ax.set_ylabel('Run') ax.set_xlim(-0.05,0.05) #ax.set_ylim(0, 0.03) ax.grid(True) plt.title(r'Input offset voltage variation $\mu$=%.3f, $\sigma$=%.3f' %(mu, sd)) plt.savefig(filename+".ps") # Save figure plt.show() #ax=fig.add_subplot(1,1,1) #ax.plot(ar[0],ar[1]) #ax.plot(ar[0],ar[3]) #ax.set_xlabel(r"$T_{p}$") #ax.set_ylabel(r"Voltage") #ax.grid(True) # Default grid settings #ax.grid(color='b', alpha=0.5, linestyle='dashed', linewidth=0.5) #ax.axis('tight') # Tight auto axis #ax.set_ylim([-0.5, 4]) # Custom Y axis #axes[2].set_xlim([2, 5]) # Custom X axis #plt.title(title) # Plot #plt.savefig(filename+".pdf") # Save figure

Here is a link to the "seed" folder. Where generated pdf graps can also be found.

**INL and CFPN image artifact estimation script.**

A short function aiming to give a rough overview of INL and column mismatch effects on images in a column-parallel ADCs in CMOS Image Sensors. For now it works only with 8 bit images. Some bugs in the file read functions, not supporting all image formats could be existent.

Here are some examples of images with various INL and column mismatch:

An attempt to model randomly distributed INL was also made, however in practice ADC INL is correlated and will not necessarily be so random. Basically random INL would appear as random noise on the image. Anyway it is a good example of what would happen if theoretically we have randomly distributed INL.

You can try-out the script it is available here. It is also available at Matlab Central.

**Releasing the C source of the**

**AWS.**

Lately some nostalgy on the old plenty-of-time days has caught me. I was randomly looking through the pages, being in the process of updating and adding-up old work when I came to one of the not-very-latest versions of the source code of the AWS. I realize that I have not posted it, it might be that someone could actually benefit from it...or?

Anyway, you can find it here. You can also find the board and schematics here.