20110413

Limit of an infinite chain of first-order exponential smoothers

First-order exponential smoother

The simplest model how the voltage $x$ at a synapse responds to input $u$ is a first-order filter:

$$\tau \dot x = -x + u.$$

This corresponds to convolving signal $u(t)$ with exponential filter $\operatorname H(t) \exp(-t/\tau)$, where $\operatorname H(\cdot)$ is the Heaviside step function:

$$\begin{aligned}x(t) &= h(t) * u(t)\\h(t)&=\operatorname H(t) \exp(-t/\tau).\end{aligned}$$

The alpha function

A first-order filter has a discontinuous jump in response to an abrupt inputs (like spikes). A more realistic response is the "alpha function"  $t\cdot \exp(-t)$. The alpha function can be obtained by convolving two first decay functions (i.e. chaining together two first-order filters):

$$\begin{aligned}\tau \dot x_1 &= -x_1 + u\\\tau \dot x_2 &= -x_2 + x_1.\end{aligned}$$

This is sometimes written in the compact notation

$$ \left(\tau \frac{d }{dt} + 1\right)^2 x = u.$$

Higher orders

You can repeat this operation many times, obtaining responses with increasing smoothness. The family $t^n\cdot \exp(-t)$ reflects $n+1$ feed-forward variables coupled by exponential decay $\dot x_n=x_{n-1}-x_n$. The integral of $t^n \exp(-t)$ grows with $n$. To normalize, divide by $n! = \Gamma(n+1)$: 

$$h(t) = \operatorname H(t)  \frac {t^n}{\Gamma(n+1)}e^{-t}.$$



The response of $t^n\exp(-t)$ peaks at time $t=n$. Rescale time with $t\gets nt$ to get a peak response at $t=1$. To keep the integral of the response normalized when rescaling, multiply by $n$.

$$h(t) = \operatorname H(t) n \frac {(nt)^n}{\Gamma(n+1)}e^{-nt}$$


This is equivalent to choosing a time constant $\tau=1/n$ for each of the $n$ filtering stages. To place the peak response at time $t_0$, set $\tau = t_0/n$. 

This corresponds to a gamma distribution with $k=n+1$ and $\theta=1/n$. For large $n$ this approximates a Gaussian with $\mu=\frac {n+1}{n}$ and $\sigma^2=\frac{n+1}{n^2}$. As $n\to\infty$ this converges to a Dirac delta (impulse) distribution. 

To stabilize the variance instead of time-to-peak, rescale time by $1/\sqrt{n+1}$. This corresponds to a gamma distribution with $k=n+1$ and $\theta=1/\sqrt{k}$. The time-to-peak in this case diverges as $n\to\infty$. 

20110223

ZSH Colored prompt

Just a quick post because this was driving me crazy : how do you get a colored prompt on ZSH on ubuntu ?

Various suggestions online seemed to fail. It seemed like the escape sequences for getting colored varied wildly, and none worked for me.

I followed the instructions here for loading one of the default prompts. eg :
autoload -U promptinit
promptinit
prompt -l
prompt bigfade
Then, I typed
echo $PROMPT
to see what the proper escape sequences were ( they didn't look like anything provided online ). e.g.:
%B%F{blue}█▓▒░%B%F{white}%K{blue}%n@%m%b%k%f%F{blue}%K{black}░▒▓█%b%f%k%F{blue}%K{black}█▓▒░%B%F{white}%K{black} %D{%a %b %d} %D{%I:%M:%S%P}
%}%B%F{yellow}%K{black}/home/mrule>%b%f%k 
So, apparantly %B gives you bold, %F{colorname} sets the foreground color, and %b and %f return these to defaults ? Anyway, this will give a blue prompt:
%B%F{blue}%~$ %b%f

20110205

3D Printed Polyhedral Lamp

These are instructions for building a very bright lamp with 20 bulbs and a truncated icosahedral core. [Thingiverse entry].


Parts :
Materials:
  • electrical tape
  • super-glue ( I used Gorilla brand )
Tools:
  • Pliers
  • 3D printer
  • razor knife
  • wire cutters
  • wire strippers
  • Phillip's head screwdriver
Assembly:

First print out the indicated quantity of all printed parts.

More detailed assembly instructions for the lamp socket brackets can be found on the thingiverse page. Trim the bracket until the black socket rests flush inside. This is important, since we need the hexagonal cover plate to bond to both the bracket and the socket for a good fit.
The orientation of the socket within the bracket will matter later. The socket has a wide ridge. Align this ridge with a side of the bracket for 10 pieces. Align the ridge with a corner of the bracket for the other 10. Aligning randomly also works, as long as you don't align all sockets so that the wide parts face a side.

Print out 12 pentagonal pieces. All pieces have extra plastic to stabilize the hinge while printing. This can be removed easily with a razor knife.

Perform a test assembly with just the hexagonal pieces. Leave out the pentagons for now since they are hard to remove once assembled. Ensure that all light sockets fit properly and don't collide. You may have to experiment, rotating and swapping between pieces, to get everything to fit well. If all else fails you can tap apart one of the brackets and re-orient it.

Carefully unfold your test assembly into an as-linear-as-possible planar arrangement like below. The exact arrangement doesn't really matter, just so long as there isn't too much branching.

The lamp sockets clip onto 12 to 14 gauge electrical wire. The only 12 gauge wire I could find had too thick of insulation to work with these sockets. I used 16 gauge wire instead, which just barely works. Using scissors or a knife, separate one end of the lamp cord. Protect the ends with electrical tape. Starting at the far end, clamp the sockets to the cable in turn. The sockets are difficult to close, so I had to use pliers to get enough force.

Before you get excited and attach the plug to test everything, slide on the pentagonal hook piece over the cable. The top of the printed piece should be facing away from the assembly, toward the plug. I neglected to do this, and had to dis-assemble my plug to add this piece.

To assemble the plug, use needle-nose pliers to remove the orange stopper from the front of the plug. Remove the prongs. Thread the lamp cord through. Split and strip about 13mm from the end of each wire. Wrap the exposed wire around the bolts attached to the prongs, and tighten the bolts well. Replace the prongs and stopper.

Test each of your sockets. Turn everything over and plug in some lightbulbs. I did it the dangerous way by adding and removing bulbs ( I only had 2 at the time ) while the thing was plugged in. People that don't want to die should un-plug the setup while moving the bulbs. Better yet, order the bulbs with the rest of your parts and put them all in at once to test.

The next step is tricky. Unplug the setup and remove the bulbs. Turn over the setup. You are going to need to fold the pieces back into the polyhedral shape. The lamp cord is inflexible and resists folding, but bending each joint beforehand helps. Adding in the pentagons while folding provides more stability. As the polyhedron becomes more complete, it becomes more difficult to add pieces. If you're having trouble getting a hinge to mate, pry up slightly the side that is already in the polyhedron. The hinges come together more easily if pushed together from the side, rather than if pushed down from above.

When it was all done, the compressed cable overpowered the super-glue on a couple brackets, thankfully this mistake is easily fixed with more super-glue and some patience. You should end up with an object that looks more than a little bit like the detonation mechanism for an atomic bomb. The final assembly is very strong and the hinges will hold together without additional glue.

The last piece you'll insert is the one that contains the power cord and the rope or chain for hanging the lamp. I would attach rope or chain before you add this piece. Don't use polypropylene rope like I did, it doesn't hold knots. A chain would look nicer anyway.
Thats it. You're done. Hang the lamp somewhere, insert bulbs, and power up your own miniature sun.

20110104

Subject 3, Trial 4, "Walk on uneven terrain"

CMU motion capture dataset
Subject 3, Trial 4, "Walk on uneven terrain"
100 overlaid walkers
scale : Uniform(0.4,1.0), offset : Gaussian(μ=0,σ = [1 2 3 4 6 8])




20101230

Simulated video feedback test run

This video is a test run of software-simulated video feedback fractals. The feedback transformation is a linear shift+scaling, and there is added reflection for symmetry. Colors are inverted, with contrast enhancement, within the feedback loop, to promote pattern formation.