Calculate windowed mutual information between two signals.
i = migram(a,b,maxlag,window,noverlap,nbins) [i,l,t] = migram(...) i = migram(a,b) migram(a,b)
i = migram(a,b,maxlag,window,noverlap) calculates the windowed mutual information between the signals in vector a and vector b. migram splits the signals into overlapping segments and forms the columns of i with their mutual information values up to maximum lag specified by scalar maxlag. Each column of i contains the mutual information function between the short-term, time-localized signals a and b. Time increases linearly across the columns of i, from left to right. Lag increases linearly down the rows, starting at maxlag. If lengths of a and b differ, the shorter signal is filled with zeros. If n is the length of the signals, i is a matrix with 2*maxlag+1 rows and k = fix((n-noverlap)/(window-noverlap)) columns.
i = migram(a,b,maxlag,window,noverlap,nbins) calculates the mutual information based on histograms with the number of bins nbins.
i = migram(...,'norm') calculates the renormalised mutual information, which is i/log(nbins) and ensures a value range [0 1].
[i,l,t] = migram(...) returns a column of lag l and one of time t at which the mutual information is computed. l has length equal to the number of rows of i, t has length k.
i = migram(a,b) calculates windowed mutual information using defeault settings; the defeaults are maxlag = floor(0.1*n), window = floor(0.1*n), noverlap = 0 and nbins = 10. You can tell migram to use the defeault for any parameter by leaving it off or using  for that parameter, e.g. migram(a,b,,1000).
migram(a,b) with no output arguments plots the mutual information using the current figure.
x = cos(0:.01:10*pi)'; y = sin(0:.01:10*pi)' + .5 * randn(length(x),1); migram(x,y)
Please note that the mutual information derived with mi slightly differs from the results derived with migram. The reason is that mi also considers estimation errors. A full explanation can be found in this white paper.