You are not authenticated, login.
text: sort by
tags: modified
type: chronology
Given proper implementation of fixed-point sine and cosine, we present the C portion of our microstepping controller below, hopefully commented to a sufficient extent to make it intelligible and to document the logic behind our design.

#include <msp430x54x.h>
#define INCR 1
#define PI2 (12868) //we use a 11 bit fixed-point representationf of motor angles.  
	// 12867 = 2*pi*2^11.  
#define TIMER_SCL	128
#define SHUTTER_CLOSED 	0 //defines used in the state-machine control of the shutter. 
#define SHUTTER_OPEN	1

	//Start of Stepper Motor Program
	//ME270 Project

short theta1 = 0; //the MSP430 is a 16-bit processor. 
short theta2 = 0; //hence, most datatypes should be 'short' for efficiency.
short theta1_v = 0; //we cannot control the poition of the stepper motors directly, 
short theta2_v = 0; // since we only have 3 bits of control from the parallel port. 
// also, direct position control of postion would cause the stepper to miss steps 
// smooth position change and limited acceleration is guaranteed by controlling the velocity. 

short shutter_state = 0; // none of the steppers have encoders, 
	// so we keep track of the shutter position here.  
short shutter_cmd ;  //this is set in ISR (interupt service routine) 
	// and read, and acted upon, in the main loop. 

short qsin(short i){
	//i goes from  0 pi/2 base 11 or... 
	// 0 to 3217
	short cube, fifth, result; 
	cube = mply_11(i,i);
	cube = mply_11(cube, i); 
	fifth = cube; 
	fifth = mply_11(fifth, i);
	fifth = mply_11(fifth, i); 
	//our approximation to sine based on taylor series: 
	//original: sin(x) = x - x^3/3! + x^5/5!
	//sin(x) = x - x^3/(8+32+128) + x^5/128 
	result = i - 
		((cube >> 3) + (cube >> 5) + (cube >> 7)) + (fifth >> 7);
	//result is base 11.  need it to be base 7. (0 to 127)
	result = result >> 4; 
	if(result > TIMER_SCL) result = TIMER_SCL; 
	return (short)result; 

// this is an even more simplified version of sin - 
// made in an attempt to make the microstepping smoother. 
// it turned out to not matter very much.  to get very smooth stepping , 
// may have to develop an inverse model of the nonlinear stepper motors 
// ** quantitatively **
short qsin2(short i){
	//i goes from  0 pi/2 base 11 or... 
	// 0 to 3217
	short cube, result; 
	cube = mply_11(i,i);
	cube = mply_11(cube, i); 
	//our approximation to sine based on taylor series: 
	//original: sin(x) = x - x^3/3! + x^5/5!
	//sin(x) = x - x^3/(8+32+128) + x^5/128 
	result = i - (cube >> 3) ;
	//result is base 11.  need it to be base 7. 
	result = result >> 4; 
	if(result > TIMER_SCL) result = TIMER_SCL; //maximum..
	return (short)result; 

short isin(short i){
	// i is base 2^11
	//but we accept 0 to 2*pi or 12867
	if(i >= 0 && i < 3217) return qsin(i); 
	else if(i >= 3217 && i < 6434) return qsin(6434 - i); 
	else if(i >= 6434 && i < 9651) return -1*qsin(i - 6434); 
	else if(i >= 9651 && i < 12867) return -1*qsin(12867 - i); 
	else return 0; 

short icos(short i){
	// i is base 2^11
	//but we accept 0 to 2*pi or 12867
	if(i >= 0 && i < 3217) return qsin(3217 - i); 
	else if(i >= 3217 && i < 6434) return -1*qsin(i - 3217); 
	else if(i >= 6434 && i < 9651) return -1*qsin(9651 - i); 
	else if(i >= 9651 && i < 12867) return qsin(i - 9651); 
	else return 0; 

//this interrupt is triggered by the parallel port. 
//because we only have 3 lines and need 8 commands, 
//after triggering (0 to 1 transition on PORT2.0 ), 
//the control program on the PC will either hold the pin up 
// (indicating a velocity step command) or drop it (indicating shutter/stop cmd). 

#pragma vector=PORT2_VECTOR
__interrupt void port2_ISR (void)
	//need to read the two pins to figure out which axis to change.
	short k; 
	for(k=0; k<8; k++){
		P9OUT ^= 0x4;	
	switch(P2IN & 0x7){
		case 1: theta1_v += INCR;  break; 
		case 3: theta1_v -= INCR;  break; 
		case 5: theta2_v += INCR;  break; 
		case 7: theta2_v -= INCR;  break; 
		case 0: shutter_cmd = SHUTTER_CLOSED; break; 
		case 2: shutter_cmd = SHUTTER_SMALL; break; 
		case 6: shutter_cmd = SHUTTER_OPEN; break; 
		case 4: theta1_v = 0; theta2_v = 0; break;
	P2IFG = 0; //clear the interupt. 

#pragma vector=TIMER1_A0_VECTOR 
__interrupt void timera1_ISR (void)
	return; //if this vector is not here and the interupt is enabled, then the proc will crash! 
// have to integrate the velocity at a consistent rate, 
// hence we pushed integration as well as the sine/cosine computation 
// into this timer interrupt. 
#pragma vector=TIMER1_A1_VECTOR 
__interrupt void timera11_ISR (void)
	short ps, pc; 
	P1OUT ^= 0xFF; //toggle P1 to indicate the update rate. (the led is there)
	TA1CTL = 0x0004; //reset counter
	TA1CTL = 0x0112; //turn back in interrupts.	

	theta1 += theta1_v; 
	theta2 += theta2_v;
	if(theta1 > PI2) theta1 -= PI2; 
	if(theta1 < 0) theta1 += PI2; 

	if(theta2 > PI2) theta2 -= PI2; 
	if(theta2 < 0) theta2 += PI2; 

	ps = isin(theta1)+TIMER_SCL;
	pc = icos(theta1)+TIMER_SCL;

	TA0CCR1 = ps; //update the counter (PWM output) registers. 
	TA0CCR4 = pc;

	ps = isin(theta2)+TIMER_SCL;
	pc = icos(theta2)+TIMER_SCL;
	TA0CCR2 = ps; 
	TA0CCR3 = pc;
	P1OUT ^= 0xFF; //toggle P1 to indicate the update rate. (the led is there)

//delay is used in moving the shutter. 
// too short, and the stepper motor controlling the shutter will skip steps! 
void delay(short time){
	short k; 
	short j = 0; 
	for(k=0; k<time; k++){

void delay_long(short time){
	short k,j,f; 
	for(k=0; k<time; k++){
		f = 0; 
		for(j=0; j<100; j++){

// ideally, we would ramp the shutter velocity up and down to maximize speed 
// and minimize time - constant velocity works fine and fast. 
#define SHUTDLY	1600
void shutter_ccw(void){
	P9OUT = 0x1; 
	P9OUT = 0x3; 
	P9OUT = 0x2; 
	P9OUT = 0x0; 

void shutter_cw(void){
	P9OUT = 0x2; 
	P9OUT = 0x3; 
	P9OUT = 0x1; 
	P9OUT = 0x0; 

void shutter_open(void){
	short i; 
	if(shutter_state == SHUTTER_CLOSED){
		//I was quite pleased to discover that the three shutters states
		// are exactly 5 full steps apart! 
		for(i=0; i<5; i++){ 

	if(shutter_state == SHUTTER_SMALL){
		for(i=0; i<5; i++){
	shutter_state = SHUTTER_OPEN; 
void shutter_close(void){
	short i; 
	if(shutter_state == SHUTTER_OPEN){
		for(i=0; i<5; i++){
	if(shutter_state == SHUTTER_SMALL){
		for(i=0; i<10; i++){
	shutter_state = SHUTTER_CLOSED; 
void shutter_small(void){
	short i; 
	if(shutter_state == SHUTTER_OPEN){
		for(i=0; i<5; i++){
	if(shutter_state == SHUTTER_CLOSED){
		for(i=0; i<10; i++){
	shutter_state = SHUTTER_SMALL; 

void main (void){
	//SR = 0x02;
	short t1, t2, ps, pc; 
	short k; 
	WDTCTL = WDTPW + WDTHOLD; //stop the watchdog timer.
	// UCSCTL = Universal clock system control (registers). 
	// sets the core clock of the device. 
	//SR = SR | 0x40 ;
	// setup the digitally controlled oscillator. 
	UCSCTL0 = 0x0700; //DCO = 5, MOD = 0
	UCSCTL1 = 0x0060; //DCORSEL = 3, middle freq. 
	UCSCTL2 = 0x101F; //FLL (frequency locked loop); doesnt matter here.
	UCSCTL4 = 0x0333; //select DCOCLK for all clock sources 
	UCSCTL0 = 0x0900; //DCO = 9, MOD = 0
		// DCO = internal high-frequency oscillator). 
	//UCSCTL5 = 0x0000; 

	// setup timer A (for controlling PWM outputs)
	TA0CCR0 = TIMER_SCL*2+1; //Timer A end pulse
	TA0CCR1 = TIMER_SCL; //Timer A start pulse
	TA0CCR2 = TIMER_SCL; //Timer A start pulse
	TA0CCR3 = TIMER_SCL; //Timer A start pulse
	TA0CCR4 = TIMER_SCL; //Timer A start pulse
	TA0CTL = 0x0110; //TASSEL = ACLK; input divider=1; MCx = count up mode; 
	TA0CCTL0 = 0x0040; //sets the mode of the output: here=2, toggle/reset.
		// (produces pulses at 8Khz). 
	TA0CCTL1 = 0x00C0; //output mode: toggle/set. 
	TA0CCTL2 = 0x00C0; // same
	TA0CCTL3 = 0x00C0; // same
	TA0CCTL4 = 0x00C0; // same

	//setup timer B (for controlling theta & velocity updates). 
	TA1CCR0 = 10000; //Timer A end pulse
	TA1CCR1 = 5000; //Timer A start pulse
	TA1CCR2 = 5000; //Timer A start pulse	
	TA1CTL = 0x0004;
	TA1CTL = 0x0112; //TASSEL = ACLK; input divider=1; MCx = count up mode; 
	TA1CCTL0 = 0x0050; //sets the mode of the output: here=2, toggle/reset.
		// (produces pulses at 8Khz). 
	TA1CCTL1 = 0x00C0; //output mode: toggle/set. 
	TA1CCTL2 = 0x00C0; // same
	P1DIR = 0x03; //P1.0 and P1.1 to output. (the LED)
	P1SEL = 0x00;
	P1OUT = 0; 
	P8DIR = 0xFF; //for some reason Port 1 does not work for the dev board --  
	P8SEL = 0x7F; //hence, we switched over to Port 8, which also is connected 
	// to the timers. 
	// the P8SEL register selects the timer output as opposed to general purpose IO. 
	//setup port2 (computer command via parallel port) interrupt. 
	P2DIR = 0; //all inputs. 
	P2IFG = 0;
	P2IE = 0x01; //enable interupts on P2.0
	P2IES = 0; // low to high edge detect. 
	_bis_SR_register(GIE | SCG0 );  //enable interrupts, dont go to sleep.
	P9DIR = 0x07; 
	//test the shutter. first move all the way to the limit.
	// since we do not know the initial position.
	for(k=0; k<30; k++){
	shutter_ccw();  //step one out so we don't hit the limits later.
	shutter_state = SHUTTER_CLOSED; //this is where the init will leave it
		//now just sit here waiting for a shutter command from the 
		// parallel port ISR.  
		if(shutter_state != shutter_cmd){
				case SHUTTER_OPEN: shutter_open(); break; 
				case SHUTTER_CLOSED: shutter_close(); break; 
				case SHUTTER_SMALL: shutter_small(); break;

We has some problem getting Port1 to work, hence had to use Port8 to get the PWM signals out -- see below. Note the shutter does not need to be microstepped and instead can be controlled as per a conventional stepper motor. The pins used are marked in yellow; pin 57 is a simple pulse output.

Note that each PWM signal is generated from the same timer counter, hence they are synchronous (this is of course not necessary). Below are some examples of two phases of one motor output; in real life, of course, the PWM ratio continually changes.

Below is the development board being probed to produce the plots above.

We then used the pinouts of the NXP microcontrollers, intuited last time by probing their on-line function (specifically the auto-calibration sequence upon startup), to wire up a harness for external control of the H-bridges. Below is a picture of that (we removed the original microcontrollers to prevent contention), and the associated wiring labels.

The next task was to make a 5V to 3.2V regulator (the MSP430 only runs at 3.2V, max), nothing major just a LM317. See below.

Finally, everything was wired together. The 3.2 V supply was jumpered, as the MSP430 USB programmer provided its own power. (Amazingly, the ultra low power MSP430 could run on power from the parallel port, too!)

A level translator is needed to properly interface the 3.2V MSP430 to the 5V parallel port - we canibalized a spare JTAG adapter for this purpose. It was this that limited us to only 3 bits of control.

And that, minus the difficulty we had getting the compiler working properly, is the entirety of the microcontroller part of the project.

[0] Buonomano DV, Merzenich MM, Cortical plasticity: from synapses to maps.Annu Rev Neurosci 21no Issue 149-86 (1998)

[0] Vyssotski AL, Serkov AN, Itskov PM, Dell'Omo G, Latanov AV, Wolfer DP, Lipp HP, Miniature neurologgers for flying pigeons: multichannel EEG and action and field potentials in combination with GPS recording.J Neurophysiol 95:2, 1263-73 (2006 Feb)[1] Otto KJ, Johnson MD, Kipke DR, Voltage pulses change neural interface properties and improve unit recordings with chronically implanted microelectrodes.IEEE Trans Biomed Eng 53:2, 333-40 (2006 Feb)

[0] Kilgard MP, Merzenich MM, Cortical map reorganization enabled by nucleus basalis activity.Science 279:5357, 1714-8 (1998 Mar 13)

hide / / print
ref: -0 tags: ocaml application functional programming date: 10-11-2022 21:36 gmt revision:2 [1] [0] [head]


From this I learned that in ocaml you can return not just functions (e.g. currying) but appliations of yet-to-be named functions.

let sum f = f 0 ;;
let arg a b c = c ( b + a ) ;;
let z a = a ;;


sum (arg 1) ;; 

is well-typed as (int -> `a) -> `a = <fun> e.g. an application of a function that converts int to `a. Think of it as the application of Xa to argument ( 0 + 1 ), where Xa is the argument (per type signature). Zero is supplied by the definition of 'sum'.

 sum (arg 1) (arg 2);; 

can be parsed as

(sum (arg 1)) (arg 2) ;; 

'(arg 2)' outputs an application of an int & a yet-to be determined function to 'a,

E.g. it's typed as int -> (int -> `a) -> `a = <fun>. So, you can call it Xa passed to above.

Or, Xa = Xb( ( 0 + 1 ) + 2)

where, again, Xb is a yet-to-be defined function that is supplied as an argument.

Therefore, you can collapse the whole chain with the identity function z. But, of course, it could be anything else -- square root perhaps for MSE?

All very clever.

hide / / print
ref: -0 tags: Balduzzi backprop biologically plausible red-tape date: 05-31-2022 20:48 gmt revision:1 [0] [head]

Kickback cuts Backprop's red-tape: Biologically plausible credit assignment in neural networks

Bit of a meh -- idea is, rather than propagating error signals backwards through a hierarchy, you propagate only one layer + use a signed global reward signal. This works by keeping the network ‘coherent’ -- positive neurons have positive input weights, and negative neurons have negative weights, such that the overall effect of a weight change does not change sign when propagated forward through the network.

This is kind of a lame shortcut, imho, as it limits the types of functions that the network can model & the computational structure of the network. This is already quite limited by the dot-product-rectifier common structure (as is used here). Much more interesting and possibly necessary (given much deeper architectures now) is to allow units to change sign. (Open question as to whether they actually frequently do!). As such, the model is in the vein of "how do we make backprop biologically plausible by removing features / communication" rather than "what sorts of signals and changes does the brain use perceive and generate behavior".

This is also related to the literature on what ResNets do; what are the skip connections for? Amthropic has some interesting analyses for Transformer architectures, but checking the literature on other resnets is for another time.

hide / / print
ref: -2021 tags: burst bio plausible gradient learning credit assignment richards apical dendrites date: 05-05-2022 15:44 gmt revision:2 [1] [0] [head]

Burst-dependent synaptic plasticity can coordinate learning in hierarchical circuits

  • Roughly, single-events indicate the normal feature responses of neurons, while multiple-spike bursts indicate error signals.
  • Bursts are triggered by depolarizing currents to the apical dendrites, which can be uncoupled from bottom-up event rate, which arises from perisomatic inputs / basal dendrites.
  • The fact that the two are imperfectly multiplexed is OK, as in backprop the magnitude of the error signal is modulated by the activity of the feature detector.
  • "For credit assignment in hierarchical networks, connections should obey four constraints:
    • Feedback must steer the magnitude and sign of plasticity
    • Feedback signals from higher-order areas must be multipleed with feedforward signals from lower-order areas so that credit assignment can percolate down the hierarch with minimal effect on sensory information
    • There should be some form of alignment between feedforward and feedback connections
    • Integration of credit-carrying signals should be nearly linear to avoid saturation
      • Seems it's easy to saturate the burst probability within a window of background event rate, e.g. the window is all bursts to no bursts.
  • Perisomatic inputs were short-term depressing, whereas apical dendrite synapses were short-term facilitating.
    • This is a form of filtering on burst rates? E.g. the propagate better down than up?
  • They experiment with a series of models, one for solving the XOR task, and subsequent for MNIST and CIFAR.
  • The later, larger models are mean-field models, rather than biophysical neuron models, and have a few extra features:
    • Interneurons, presumably SOM neurons, are used to keep bursting within a linear regime via a 'simple' (supplementary) learning rule.
    • Feedback alignment occurs by adjusting both the feedforward and feedback weights with the same propagated error signal + weight decay.
  • The credit assignment problem, or in the case of unsupervised learning, the coordination problem, is very real: how do you change a middle-feature to improve representations in higher (and lower) levels of the hierarchy?
    • They mention that using REINFORCE on the same network was unable to find a solution.
    • Put another way: usually you need to coordinate the weight changes in a network; changing weights individually based on a global error signal (or objective function) does not readily work...
      • Though evolution seems to be quite productive at getting the settings of (very) large sets of interdependent coefficients all to be 'correct' and (sometimes) beautiful.
      • How? Why? Friston's free energy principle? Lol.

hide / / print
ref: -2011 tags: government polyicy observability submerged state America date: 09-23-2021 22:06 gmt revision:0 [head]

The Submerged State -- How Invisible Government Policies Undermine American Democracy. By Suzanne Mettler

(I've not read this book, just the blurb, but it looks like a defensible thesis) : Government polyicy, rather than distributing resources (money, infrastructure, services) as directly as possible to voters, have recently opted to distribute indirectly, through private companies. This gives the market & private organizations more perceived clout, perpetuates a level of corruption, and undermines American's faith in their government.

So, we need a better 'debugger' for policy in america? Something like a discrete chain rule to help people figure out what policies (and who) are responsible for the good / bad things in their life? Sure seems that the bureaucracy is could use some cleanup / is failing under burgeoning complexity. This is probably not dissimilar to cruddy technical systems.

hide / / print
ref: -0 tags: cortical computation learning predictive coding reviews date: 02-23-2021 20:15 gmt revision:2 [1] [0] [head]

PMID-30359606 Predictive Processing: A Canonical Cortical Computation

  • Georg B Keller, Thomas D Mrsic-Flogel
  • Their model includes on two error signals: positive and negative for reconciling the sensory experience with the top-down predictions. I haven't read the full article, and disagree that such errors are explicit to the form of neurons, but the model is plausible. Hence worth recording the paper here.

PMID-23177956 Canonical microcircuits for predictive coding

  • Andre M Bastos, W Martin Usrey, Rick A Adams, George R Mangun, Pascal Fries, Karl J Friston
  • We revisit the established idea that message passing among hierarchical cortical areas implements a form of Bayesian inference-paying careful attention to the implications for intrinsic connections among neuronal populations.
  • Have these algorithms been put to practical use? I don't know...

Control of synaptic plasticity in deep cortical networks

  • Pieter R. Roelfsema & Anthony Holtmaat
  • Basically argue for a many-factor learning rule at the feedforward and feedback synapses, taking into account pre, post, attention, and reinforcement signals.
  • See comment by Tim Lillicrap and Blake Richards.

hide / / print
ref: -2017 tags: schema networks reinforcement learning atari breakout vicarious date: 09-29-2020 02:32 gmt revision:2 [1] [0] [head]

Schema networks: zero-shot transfer with a generative causal model of intuitive physics

  • Like a lot of papers, the title has more flash than the actual results.
  • Results which would be state of the art (as of 2017) in playing Atari breakout, then transferring performance to modifications of the game (paddle moved up a bit, wall added in the middle of the bricks, brick respawning, juggling).
  • Schema network is based on 'entities' (objects) which have binary 'attributes'. These attributes can include continuous-valued signals, in which case each binary variable is like a place fields (i think).
    • This is clever an interesting -- rather than just low-level features pointing to high-level features, this means that high-level entities can have records of low-level features -- an arrow pointing in the opposite direction, one which can (also) be learned.
    • The same idea is present in other Vicarious work, including the CAPTCHA paper and more-recent (and less good) Bio-RNN paper.
  • Entities and attributes are propagated forward in time based on 'ungrounded schemas' -- basically free-floating transition matrices. The grounded schemas are entities and action groups that have evidence in observation.
    • There doesn't seem to be much math describing exactly how this works; only exposition. Or maybe it's all hand-waving over the actual, much simpler math.
      • Get the impression that the authors are reaching to a level of formalism when in fact they just made something that works for the breakout task... I infer Dileep prefers the empirical for the formal, so this is likely primarily the first author.
  • There are no perceptual modules here -- game state is fed to the network directly as entities and attributes (and, to be fair, to the A3C model).
  • Entity-attributes vectors are concatenated into a column vector length NTNT , where NN are the number of entities, and TT are time slices.
    • For each entity of N over time T, a row-vector is made of length MRMR , where MM are the number of attributes (fixed per task) and R1R-1 are the number of neighbors in a fixed radius. That is, each entity is related to its neighbors attributes over time.
    • This is a (large, sparse) binary matrix, XX .
  • yy is the vector of actions; task is to predict actions from XX .
    • How is X learned?? Very unclear in the paper vs. figure 2.
  • The solution is approximated as y=XW1¯y = X W \bar{1 } where WW is a binary weight matrix.
    • Minimize the solution based on an objective function on the error and the complexity of ww .
    • This is found via linear programming relaxation. "This procedure monotonically decreases the prediction error of the overall schema network, while increasing its complexity".
      • As it's a issue of binary conjunctions, this seems like a SAT problem!
    • Note that it's not probabilistic: "For this algorithm to work, no contradictions can exist in the input data" -- they instead remove them!
  • Actual behavior includes maximum-product belief propagation, to look for series of transitions that set the reward variable without setting the fail variable.
    • Because the network is loopy, this has to occur several times to set entity variables eg & includes backtracking.

  • Have there been any further papers exploring schema networks? What happened to this?
  • The later paper from Vicarious on zero-shot task transfer are rather less interesting (to me) than this.

hide / / print
ref: -0 tags: VARNUM GEVI genetically encoded voltage indicators FRET Ace date: 03-18-2020 17:12 gmt revision:5 [4] [3] [2] [1] [0] [head]

PMID-30420685 Fast in-vivo voltage imaging using a red fluorescent indicator

  • Kannan M, Vasan G, Huang C, Haziza S, Li JZ, Inan H, Schnitzer MJ, Pieribone VA.
  • Other genetically encoded voltage indicators (GEVI):
    • PMID-22958819 ArcLight (Peribone also last author) ; sign of ΔF/F\Delta F / F negative, but large, 35%! Slow tho? improvement in speed
    • ASAP3 ΔF/F\Delta F / F large, τ=3ms.\tau = 3 ms.
    • PMID-26586188 Ace-mNeon FRET based, Acetabularia opsin, fast kinetics + brightness of mNeonGreen.
    • Archon1 -- fast and sensitive, found (like VARNUM) using a robotic directed evolution or direct search strategy.
  • VARNAM is based on Acetabularia (Ace) + mRuby3, also FRET based, found via high-throughput voltage screen.
  • Archaerhodopsin require 1-12 W/mm^2 of illumination, vs. 50 mw/mm^2 for GFP based probes. Lots of light!
  • Systematic optimization of voltage sensor function: both the linker region (288 mutants), which affects FRET efficiency, as well as the opsin fluorophore region (768 mutants), which affects the wavelength of absorption / emission.
  • Some intracellular clumping (which will negatively affect sensitivity), but mostly localized to the membrane.
  • Sensitivity is still imperfect -- 4% in-vivo cortical neurons, though it’s fast enough to resolve 100 Hz spiking.
  • Can resolve post-synaptic EPSCs, but < 1 % ΔF/F\Delta F/F .
  • Tested all-optical ephys using VARNAM + blueshifted channelrhodopsin, CheRiff, both sparsely, and in PV targeted transgenetic model. Both work, but this is a technique paper; no real results.
  • Tested TEMPO fiber-optic recording in freely behaving mice (ish) -- induced ketamine waves, 0.5-4Hz.
  • And odor-induced activity in flies, using split-Gal4 expression tools. So many experiments.

hide / / print
ref: -2019 tags: non degenerate two photon excitation fluorophores fluorescence OPO optical parametric oscillator date: 10-31-2019 20:53 gmt revision:0 [head]

Efficient non-degenerate two-photon excitation for fluorescence microscopy

  • Used an OPO + delay line to show that non-degenerate (e.g. photons of two different energies) can induce greater fluorescence, normalized to input energy, than normal same-energy excitation.

hide / / print
ref: -2019 tags: neuromorphic optical computing date: 06-19-2019 14:47 gmt revision:1 [0] [head]

Large-Scale Optical Neural Networks based on Photoelectric Multiplication

  • Critical idea: use coherent homodyne detection, and quantum photoelectric multiplication for the MACs.
    • That is, E-fields from coherent light multiplies rather than adds within a (logarithmic) photodiode detector.
    • Other lit suggests rather limited SNR for this effect -- 11db.
  • Hence need EO modulators and OE detectors followed by nonlinearity etc.
  • Pure theory, suggests that you can compute with as few as 10's of photons per MAC -- or less! Near Landauer's limit.

hide / / print
ref: -2017 tags: neuromorphic optical computing nanophotonics date: 06-17-2019 14:46 gmt revision:5 [4] [3] [2] [1] [0] [head]

Progress in neuromorphic photonics

  • Similar idea as what I had -- use lasers as the optical nonlinearity.
    • They add to this the idea of WDM and 'MRR' (micro-ring resonator) weight bank -- they don't talk about the ability to change the weihts, just specify them with some precision.
  • Definitely makes the case that III-V semiconductor integrated photonic systems have the capability, in MMACs/mm^2/pj, to exceed silicon.

See also :

hide / / print
ref: -0 tags: optical gain media lasers cross section dye date: 06-13-2019 15:13 gmt revision:2 [1] [0] [head]

Eminently useful. Source: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-974-fundamentals-of-photonics-quantum-electronics-spring-2006/lecture-notes/chapter7.pdf

Laser Dye technology by Peter Hammond

  • This paper is another great resource!
  • Lists the stimulated emission cross-section for Rhodamine-6G as 4e-16 @ 550nm, consistent with the table above.
  • At a (high) concentration of 2mMol (1 g/l), 1/e penetration depth is 20um.
    • Depending on the solvent, there may be aggregation and stacking / quenching.
  • Tumbling time of Rhodamine 6G in ethanol is 20 to 300ps; fluorescence lifetime in oscillators is 10's of ps, so there is definitely polarization sensitive amplification.
  • Generally in dye lasers, the emission cross-section must be higher than the excited state absorption, σ eσ \sigma_e - \sigma^\star most important.
  • Bacteria can actually subsist on rhodamine-similar sulfonated dyes in aqueous solutions! Wow.

hide / / print
ref: -0 tags: lenslet optical processor date: 06-10-2019 04:26 gmt revision:0 [head]

Small gathering of links on Lenslet Labs / Lenslet inc. Founded in 1999.

  • Lenslet funding $26M 3rd round. November 2000.
  • vector-matrix optical multiplier Sept 2002
  • Patent on optical processor core. Idea includes 288 modulated VCSELs, 256x256 Multi-quantum-well modulators, photodiods, and lenses for splitting the light field or performing Fourier transforms.
  • Press release on the MQW SLM. 8 terra-ops. Jan 2004.
  • EnLight 64 press release, 240 billion ops/sec. Talks about having an actual software development platform, starting in Matlab. Photo of the device. Jan 1 2005.
  • Lenslet closes Lays off its last 30 employees; CEO is trying to liquidate IP, assets. March 2006.

hide / / print
ref: -2019 tags: optical neural networks spiking phase change material learning date: 06-01-2019 19:00 gmt revision:4 [3] [2] [1] [0] [head]

All-optical spiking neurosynaptic networks with self-learning capabilities

  • J. Feldmann, N. Youngblood, C. D. Wright, H. Bhaskaran & W. H. P. Pernice
  • Idea: use phase-change material to either block or pass the light in waveguides.
    • In this case, they used GST -- germanium-antimony-tellurium. This material is less reflective in the amorphous phase, which can be reached by heating to ~150C and rapidly quenching. It is more reflective in the crystalline phase, which occurs on annealing.
  • This is used for both plastic synapses (phase change driven by the intensity of the light) and the nonlinear output of optical neurons (via a ring resonator).
  • Uses optical resonators with very high Q factors to couple different wavelengths of light into the 'dendrite'.
  • Ring resonator on the output: to match the polarity of the phase-change material. Is this for reset? Storing light until trigger?
  • Were able to get correlative-like or hebbian learning (which I suppose is not dissimilar from really slow photographic film, just re-branded, and most importantly with nonlinear feedback.)
  • Issue: every weight needs a different source wavelength! Hence they have not demonstrated a multi-layer network.
  • Previous paper: All-optical nonlinear activation function for photonic neural networks
    • Only 3db and 7db extinction ratios for induced transparency and inverse saturation

hide / / print
ref: -2018 tags: biologically inspired deep learning feedback alignment direct difference target propagation date: 03-15-2019 05:51 gmt revision:5 [4] [3] [2] [1] [0] [head]

Assessing the Scalability of Biologically-Motivated Deep Learning Algorithms and Architectures

  • Sergey Bartunov, Adam Santoro, Blake A. Richards, Luke Marris, Geoffrey E. Hinton, Timothy Lillicrap
  • As is known, many algorithms work well on MNIST, but fail on more complicated tasks, like CIFAR and ImageNet.
  • In their experiments, backprop still fares better than any of the biologically inspired / biologically plausible learning rules. This includes:
    • Feedback alignment {1432} {1423}
    • Vanilla target propagation
      • Problem: with convergent networks, layer inverses (top-down) will map all items of the same class to one target vector in each layer, which is very limiting.
      • Hence this algorithm was not directly investigated.
    • Difference target propagation (2015)
      • Uses the per-layer target as h^ l=g(h^ l+1;λ l+1)+[h lg(h l+1;λ l+1)]\hat{h}_l = g(\hat{h}_{l+1}; \lambda_{l+1}) + [h_l - g(h_{l+1};\lambda_{l+1})]
      • Or: h^ l=h l+g(h^ l+1;λ l+1)g(h l+1;λ l+1)\hat{h}_l = h_l + g(\hat{h}_{l+1}; \lambda_{l+1}) - g(h_{l+1};\lambda_{l+1}) where λ l\lambda_{l} are the parameters for the inverse model; g()g() is the sum and nonlinearity.
      • That is, the target is modified ala delta rule by the difference between inverse-propagated higher layer target and inverse-propagated higher level activity.
        • Why? h lh_{l} should approach h^ l\hat{h}_{l} as h l+1h_{l+1} approaches h^ l+1\hat{h}_{l+1} .
        • Otherwise, the parameters in lower layers continue to be updated even when low loss is reached in the upper layers. (from original paper).
      • The last to penultimate layer weights is trained via backprop to prevent template impoverishment as noted above.
    • Simplified difference target propagation
      • The substitute a biologically plausible learning rule for the penultimate layer,
      • h^ L1=h L1+g(h^ L;λ L)g(h L;λ L)\hat{h}_{L-1} = h_{L-1} + g(\hat{h}_L;\lambda_L) - g(h_L;\lambda_L) where there are LL layers.
      • It's the same rule as the other layers.
      • Hence subject to impoverishment problem with low-entropy labels.
    • Auxiliary output simplified difference target propagation
      • Add a vector zz to the last layer activation, which carries information about the input vector.
      • zz is just a set of random features from the activation h L1h_{L-1} .
  • Used both fully connected and locally-connected (e.g. convolution without weight sharing) MLP.
  • It's not so great:
  • Target propagation seems like a weak learner, worse than feedback alignment; not only is the feedback limited, but it does not take advantage of the statistics of the input.
    • Hence, some of these schemes may work better when combined with unsupervised learning rules.
    • Still, in the original paper they use difference-target propagation with autoencoders, and get reasonable stroke features..
  • Their general result that networks and learning rules need to be tested on more difficult tasks rings true, and might well be the main point of this otherwise meh paper.

hide / / print
ref: -2012 tags: DiCarlo Visual object recognition inferior temporal cortex dorsal ventral stream V1 date: 03-13-2019 22:24 gmt revision:1 [0] [head]

PMID-22325196 How Does the Brain Solve Visual Object Recognition

  • James DiCarlo, Davide Zoccolan, Nicole C Rust.
  • Infero-temporal cortex is organized into behaviorally relevant categories, not necessarily retinotopically, as demonstrated with TMS studies in humans, and lesion studies in other primates.
    • Synaptic transmission takes 1-2ms; dendritic propagation ?, axonal propagation ~1ms (e.g. pyramidal antidromic activation latency 1.2-1.3ms), so each layer can use several synapses for computation.
  • Results from the ventral stream computation can be well described by a firing rate code binned at ~ 50ms. Such a code can reliably describe and predict behavior
    • Though: this does not rule out codes with finer temporal resolution.
    • Though anyway: it may be inferential issue, as behavior operates at this timescale.
  • IT neurons' responses are sparse, but still contain information about position and size.
    • They are not narrowly tuned detectors, not grandmother cells; they are selective and complex but not narrow.
    • Indeed, IT neurons with the highest shape selectivities are the least tolerate to changes in position, scale, contrast, and visual clutter. (Zoccolan et al 2007)
    • Position information avoids the need to re-bind attributes with perceptual categories -- no need for syncrhony binding.
  • Decoded IT population activity of ~100 neurons exceeds artificial vision systems (Pinto et al 2010).
  • As in {1448}, there is a ~ 30x expansion of the number of neurons (axons?) in V1 vs the optic tract; serves to allow controlled sparsity.
  • Dispute in the field over primarily hierarchical & feed-forward vs. highly structured feedback being essential for performance (and learning?) of the system.
    • One could hypothesize that feedback signals help lower levels perform inference with noisy inputs; or feedback from higher layers, which is prevalent and manifest (and must be important; all that membrane is not wasted..)
    • DiCarlo questions if the re-entrant intra-area and inter-area communication is necessary for building object representations.
      • This could be tested with optogenetic approaches; since the publication, it may have been..
      • Feedback-type active perception may be evinced in binocular rivalry, or in visual illusions;
      • Yet 150ms immediate object recognition probably does not require it.
  • Authors propose thinking about neurons/local circuits as having 'job descriptions', an metaphor that couples neuroscience to human organization: who is providing feedback to the workers? Who is providing feeback as to job function? (Hinton 1995).
  • Propose local subspace untangling; when this is tacked and tiled, this is sufficient for object perception.
    • Indeed, modern deep convolutional networks behave this way; yet they still can't match human performance (perhaps not sparse enough, not enough representational capability)
    • Cite Hinton & Salakhutdinov 2006.
  • The AND-OR or conv-pooling architecture was proposed by Hubbel and Weisel back in 1962! In their paper's formulatin, they call it a Normalized non-linear model, NLN.
  1. Nonlinearities tend to flatten object manifolds; even with random weights, NLN models tend to produce easier to decode object identities, based on strength of normalization. See also {714}.
  2. NLNs are tuned / become tuned to the statistics of real images. But they do not get into discrimination / perception thereof..
  3. NLNs learn temporally: inputs that occur temporally adjacent lead to similar responses.
    1. But: scaades? Humans saccade 100 million times per year!
      1. This could be seen as a continuity prior: the world is unlikely to change between saccades, so one can infer the identity and positions of objects on the retina, which say can be used to tune different retinotopic IT neurons..
    2. See Li & DiCarlo -- manipulation of image statistics changing visual responses.
  • Regarding (3) above, perhaps attention is a modifier / learning gate?

hide / / print
ref: -2017 tags: vicarious dileep george captcha message passing inference heuristic network date: 03-06-2019 04:31 gmt revision:2 [1] [0] [head]

PMID-29074582 A generative vision model that trains with high data efficiency and breaks text-based CAPTCHAs

  • Vicarious supplementary materials on their RCN (recursive cortical network).
  • Factor scene into shape and appearance, which CNN or DCNN do not do -- they conflate (ish? what about the style networks?)
    • They call this the coloring book approach -- extract shape then attach appearance.
  • Hierarchy of feature layers F frcF_{f r c} (binary) and pooling layer H frcH_{f r c} (multinomial), where f is feature, r is row, c is column (e.g. over image space).
  • Each layer is exclusively conditional on the layer above it, and all features in a layer are conditionally independent given the layer above.
  • Pool variables H frcH_{f r c} is multinomial, and each value associated with a feature, plus one off feature.
    • These features form a ‘pool’, which can/does have translation invariance.
  • If any of the pool variables are set to enable FF , then that feature is set (or-operation). Many pools can contain a given feature.
  • One can think of members of a pool as different alternatives of similar features.
  • Pools can be connected laterally, so each is dependent on the activity of its neighbors. This can be used to enforce edge continuity.
  • Each bottom-level feature corresponds to an edge, which defines ‘in’ and ‘out’ to define shape, YY .
  • These variables YY are also interconnected, and form a conditional random field, a ‘Potts model’. YY is generated by gibbs sampling given the F-H hierarchy above it.
  • Below Y, the per-pixel model X specifies texture with some conditional radial dependence.
  • The model amounts to a probabalistic model for which exact inference is impossible -- hence you must do approximate, where a bottom up pass estimates the category (with lateral connections turned off), and a top down estimates the object mask. Multiple passes can be done for multiple objects.
  • Model has a hard time moving from rgb pixels to edge ‘in’ and ‘out’; they use edge detection pre-processing stage, e.g. Gabor filter.
  • Training follows a very intuitive, hierarchical feature building heuristic, where if some object or collection of lower level features is not present, it’s added to the feature-pool tree.
    • This includes some winner-take-all heuristic for sparsification.
    • Also greedily learn some sort of feature ‘’dictionary’’ from individual unlabeled images.
  • Lateral connections are learned similarly, with a quasi-hebbian heuristic.
  • Neuroscience inspiration: see refs 9, 98 for message-passing based Bayesian inference.

  • Overall, a very heuristic, detail-centric, iteratively generated model and set of algorithms. You get the sense that this was really the work of Dileep George or only a few people; that it was generated by successively patching and improving the model/algo to make up for observed failures and problems.
    • As such, it offers little long-term vision for what is possible, or how perception and cognition occurs.
    • Instead, proof is shown that, well, engineering works, and the space of possible solutions -- including relatively simple elements like dictionaries and WTA -- is large and fecund.
      • Unclear how this will scale to even more complex real-world problems, where one would desire a solution that does not have to have each level carefully engineered.
      • Modern DCNN, at least, do not seem to have this property -- the structure is learned from the (alas, labeled) data.
  • This extends to the fact that yes, their purpose-built system achieves state of the art performance on the designated CAPATCHA tasks.
  • Check: B. M. Lake, R. Salakhutdinov, J. B. Tenenbaum, Human-level concept learning through probabilistic program induction. Science 350, 1332–1338 (2015). doi:10.1126/science.aab3050 Medline

hide / / print
ref: -2018 tags: cortex layer martinotti interneuron somatostatin S1 V1 morphology cell type morphological recovery patch seq date: 03-06-2019 02:51 gmt revision:3 [2] [1] [0] [head]

Neocortical layer 4 in adult mouse differs in major cell types and circuit organization between primary sensory areas

  • Using whole-cell recordings with morphological recovery, we identified one major excitatory and seven inhibitory types of neurons in L4 of adult mouse visual cortex (V1).
  • Nearly all excitatory neurons were pyramidal and almost all Somatostatin-positive (SOM+) neurons were Martinotti cells.
  • In contrast, in somatosensory cortex (S1), excitatory cells were mostly stellate and SOM+ cells were non-Martinotti.
  • These morphologically distinct SOM+ interneurons correspond to different transcriptomic cell types and are differentially integrated into the local circuit with only S1 cells receiving local excitatory input.
  • Our results challenge the classical view of a canonical microcircuit repeated through the neocortex.
  • Instead we propose that cell-type specific circuit motifs, such as the Martinotti/pyramidal pair, are optionally used across the cortex as building blocks to assemble cortical circuits.
  • Note preponderance of axons.
  • Classifications:
    • Pyr pyramidal cells
    • BC Basket cells
    • MC Martinotti cells
    • BPC bipolar cells
    • NFC neurogliaform cells
    • SC shrub cells
    • DBC double bouquet cells
    • HEC horizontally elongated cells.
  • Using Patch-seq

hide / / print
ref: -2015 tags: CWEETS amplified Fourier imaging raman amplification date: 02-19-2019 06:46 gmt revision:1 [0] [head]

Amplified dispersive Fourier-Transform Imaging for Ultrafast Displacement sensing and Barcode Reading

hide / / print
ref: -2011 tags: HiLo speckle imaging confocal boston university optical sectioning date: 02-19-2019 06:18 gmt revision:2 [1] [0] [head]

PMID-21280920 Optically sectioned in vivo imaging with speckle illumination HiLo microscopy

  • Ah, brilliant! Illuminate a sample with a speckle pattern from a laser, and use this to optically section the data -- the contrast of the speckle pattern shows how in focus the sample is.
    • Hanece, the contrast indicates the in-focus vs out-of-focus ratio in a region.
  • The speckle statistics are invariant even in a scattering media, as scattering only further randomizes an already random laser phase front. (Within some limits.)
  • HiLo microscopy involves illuminating with a speckle pattern, then illuminating with standard uniform illumination, resulting in a diffraction-limited optically sectioned image. PMID-18709098
  • Algorithm is :
    • Take the speckle image and subtract the uniform image δI\delta I
    • Bandpass δI\delta I
    • Measure the standard deviation of the δI\delta I to get a weighting function C δs 2C^2_{\delta s}
    • Debias this estimate based on sensor..
    • Generate low-passed image from the weighted uniform image, LP[C δsI u] LP[C_{\delta s} I_u] , and high-pass from the difference HP=1LPHP = 1 - LP
    • Resultand image is a weighted sum of highpassed and lowpassed images.
  • Looks about as good as confocal.
  • Cited by...

hide / / print
ref: -0 tags: diffraction terahertz 3d print ucla deep learning optical neural networks date: 02-13-2019 23:16 gmt revision:1 [0] [head]

All-optical machine learning using diffractive deep neural networks

  • Pretty clever: use 3D printed plastic as diffractive media in a 0.4 THz all-optical all-interference (some attenuation) linear convolutional multi-layer 'neural network'.
  • In the arxive publication there are few details on how they calculated or optimized given diffractive layers.
  • Absence of nonlinearity will limit things greatly.
  • Actual observed performance (where thy had to print out the handwritten digits) rather poor, ~ 60%.

hide / / print
ref: -0 tags: cutting plane manifold learning classification date: 10-31-2018 23:49 gmt revision:0 [head]

Learning data manifolds with a Cutting Plane method

  • Looks approximately like SVM: perform binary classification on a high-dimensional manifold (or sets of manifolds in this case).
  • The general idea behind Mcp_simple is to start with a finite number of training examples, find the maximum margin solution for that training set, augment the draining set by finiding a poing on the manifolds that violates the constraints, iterating the process until a tolerance criteria is met.
  • The more complicated cutting plane SVM uses slack variables to allow solution where classification is not linearly separable.
    • Propose using one slack variable per manifold, plus a manifold center, which strictly obeys the margin (classification) constraint.
  • Much effort put to proving the convergence properties of these algorithms; admittedly I couldn't be bothered to read...

hide / / print
ref: -0 tags: recurrent cortical model adaptation gain V1 LTD date: 03-27-2018 17:48 gmt revision:1 [0] [head]

PMID-18336081 Adaptive integration in the visual cortex by depressing recurrent cortical circuits.

  • Mainly focused on the experimental observation that decreasing contrast increases latency to both behavioral and neural response (latter in the later visual areas..)
  • Idea is that synaptic depression in recurrent cortical connections mediates this 'adaptive integration' time-constant to maintain reliability.
  • Model also explains persistent activity after a flashed stimulus.
  • No plasticity or learning, though.
  • Rather elegant and well explained.

hide / / print
ref: -0 tags: NET probes SU-8 microfabrication sewing machine carbon fiber electrode insertion mice histology 2p date: 12-29-2017 04:38 gmt revision:1 [0] [head]

PMID-28246640 Ultraflexible nanoelectronic probes form reliable, glial scar–free neural integration

  • SU-8 asymptotic H2O absorption is 3.3% in PBS -- quite a bit higher than I expected, and higher than PI.
  • Faced yield problems with contact litho at 2-3um trace/space.
  • Good recordings out to 4 months!
  • 3 minutes / probe insertion.
  • Fab:
    • Ni release layer, Su-8 2000.5. "excellent tensile strength" --
      • Tensile strength 60 MPa
      • Youngs modulus 2.0 GPa
      • Elongation at break 6.5%
      • Water absorption, per spec sheet, 0.65% (but not PBS)
    • 500nm dielectric; < 1% crosstalk; see figure S12.
    • Pt or Au rec sites, 10um x 20um or 30 x 30um.
    • FFC connector, with Si substrate remaining.
  • Used transgenic mice, YFP expressed in neurons.
  • CA glue used before metabond, followed by Kwik-sil silicone.
  • Neuron yield not so great -- they need to plate the electrodes down to acceptable impedance. (figure S5)
    • Measured impedance ~ 1M at 1khz.
  • Unclear if 50um x 1um is really that much worse than 10um x 1.5um.
  • Histology looks realyl great, (figure S10).
  • Manuscript did not mention (though the did at the poster) problems with electrode pull-out; they deal with it in the same way, application of ACSF.

hide / / print
ref: -1977 tags: polyethylene surface treatment plasma electron irradiation mechanical testing saline seawater accelerated lifetime date: 04-15-2017 06:06 gmt revision:0 [head]

Enhancement of resistance of polyethylene to seawater-promoted degradation by surface modification

  • Polyethylene, when repeatedly stressed and exposed to seawater (e.g. ships' ropes), undergoes mechanical and chemical degradation.
  • Surface treatments of the polyethlyene can improve resistance to this degradation.
  • The author studied two methods of surface treatment:
    • Plasma (glow discharge, air) followed by diacid (adipic acid) or triisocyanate (DM100, = ?) co-polymerization
    • Electron irradiation with 500 kEV electrons.
  • Also mention CASING (crosslinking by activated species of inert gasses) as a popular method of surface treatment.
    • Diffuse-in crosslinkers is a third, popular these days ...
    • Others diffuse in at temperature e.g. a fatty acid - derived molecule, which is then bonded to e.g. heparin to reduce the thrombogenicity of a plastic.
  • Measured surface modifications via ATR IR (attenuated total reflectance, IR) and ESCA (aka XPS)
    • Expected results, carbonyl following the air glow discharge ...
  • Results:
    • Triisocyanate, ~ 6x improvement
    • diacid, ~ 50 x improvement.
    • electron irradiation, no apparent degradation!
      • Author's opinion that this is due to carbon-carbon crosslink leading to mechanical toughening (hmm, evidence?)
  • Quote: since the PE formulation studied here was low-weight, it was expected to lose crystallinity upon cyclic flexing; high density PE's have in fact been observed to become more crystalline with working.
    • Very interesting, kinda like copper. This could definitely be put to good use.
  • Low density polyethylene has greater chain branching and entanglement than high-density resins; when stressed the crystallites are diminished in total bulk, degrading tensile properties ... for high-density resins, mechanical working loosens up the structure enough to allow new crystallization to exceed stress-induced shrinkage of crystallites; hence, the crystallinity increases.

hide / / print
ref: -0 tags: carbon nanotube densification conductivity strength date: 02-23-2017 02:52 gmt revision:2 [1] [0] [head]

Super-strong and highly conductive carbon nanotube ribbons from post-treatment methods

  • Conductivity of 1.2e6 S/m, about that of stainless steel.
    • 500 x 500nm wire, length 1cm will have a resistance of 40k.
  • Aerogel method: methane + ferrocene + thiophene + hydrogen.
    • Resulting in ~ 18% Fe, multi-walled carbon nanotubes, diameter 15nm, 15-20 walls.
  • Densified with a stainless-steel spatula on regular paper.
    • Resulting in ribbons 22um wide, 650nm thick.
  • Very high tensile strength, up to 5.2 GPa; moduls ~ 266 GPa.

High-strength carbon nanotube fibre-like ribbon with high ductility and high electrical conductivity

  • Slightly higher conductivity, 1.82 - 2.24e6 S/m.
  • Rolled until it was 500nm thick!
  • Spun from an aerogel (!!) using ethanol + ferrocent + thiophene.

hide / / print
ref: -0 tags: vertical nanowire juxtacellular recording date: 02-01-2017 00:50 gmt revision:2 [1] [0] [head]

PMID-22231664 Vertical nanowire electrode arrays as a scalable platform for intracellular interfacing to neuronal circuits.

  • Note actual coupling is low, 0.002, compared to patch-clamp (400uV vs 200mV). Signal is rather noisy.
  • Dissociated cultures of rat cortical neurons
  • Stimulation current 200 pa enough to change membrane potential, but not initiate a spike.
    • This is 200e-12 / 20e-6 = 5 orders of magnitude lower current than typical ICMS.

hide / / print
ref: -0 tags: direct electrical stimulation neural mapping review date: 01-26-2017 02:28 gmt revision:0 [head]

PMID-22127300 Direct electrical stimulation of human cortex -- the gold standard for mapping brain functions?

  • Fairly straightforward review, shows the strengths and weaknesses / caveats of cortical surface stimulation.
  • Axon initial segment and nodes of Ranvier (which has a high concentration of Na channels) are the most excitable.
  • Stimulation of a site in the LGN of the thalamus increased the BOLD signal in the regions of V1 that received input from that site, but strongly suppressed it in the retinotopicaly matched regions of extrastriate cortex.
  • To test the hypothesis that the deactivation of extrastriate cortex might be due to synaptic inhibition of V1 projection neurons, GABA antagonists were microinjected into V1 in monkeys in experiments that combined fMRI, ephys, and microstim.
    • Ref 25. PMID-20818384
    • These findings suggest that the stimulation of cortical neurons disrupts the propagation of cortico-cortico signals after the first synapse.
    • Likely due to feedforward and recurrent inhibition.
  • Revisit the hypothesis of tight control of excitation and inhibition (e.g. in-vivo patch clamping + drugs). "The interactions between excitation and inhibition within cortical microcircuits as well as between inter-regional connections haper the predicability of stimulation."
  • The average size of a fMRI voxel:
    • 55ul, 55mm^2
    • 5.5e6 neurons,
    • 22 - 55e9 billion synapses,
    • 22km dendrites (??)
    • 220km axons.
  • In the 1970s, Daniel Pollen conducted a series of studies stimulating the visual cortex of cats and humans.
    • Observed long intra-stim responses, and post-stim afterdischarges.
    • Importantly, he also observed inhibitory effects of DES on cortical responses at the stimulation site.
      • The inhibitory effect depended on the state of the neuron before stimulation.
      • High spontaneous activity + low stim strengths = inhibition;
      • low spontaneous activity + high stim strengths = excitation.
  • In the author's opinion, there is an equal or greater number of inhibitory responses to electrical microstimulation as excitatory. Only, there is a reporting bias toward the positive.
  • Many locations for paresthesias:
    • postcentral sulcus (duh)
    • opercular area inferior postcentral gyrus (e.g. superior to and facing the temporal lobe)[60]
    • posterior cingulate gyrus
    • supramarginal gyrus
    • temporal lobe, limbic and isocortical structures.

hide / / print
ref: -0 tags: David Kleinfeld cortical vasculature laser surgery network occlusion flow date: 09-23-2016 06:35 gmt revision:1 [0] [head]

Heller Lecture - Prof. David Kleinfeld

  • Also mentions the use of LIBS + q-switched laser for precisely drilling holes in the scull. Seems to work!
    • Use 20ns delay .. seems like there is still spectral broadening.
    • "Turn neuroscience into an industrial process, not an art form" After doing many surgeries, agreed!
  • Vasodiliation & vasoconstriction is very highly regulated; there is not enough blood to go around.
    • Vessels distant from a energetic / stimulated site will (net) constrict.
  • Vascular network is most entirely closed-loop, and not tree-like at all -- you can occlude one artery, or one capillary, and the network will route around the occlusion.
    • The density of the angio-architecture in the brain is unique in this.
  • Tested micro-occlusions by injecting rose bengal, which releases free radicals on light exposure (532nm, 0.5mw), causing coagulation.
  • "Blood flow on the surface arteriole network is insensitive to single occlusions"
  • Penetrating arterioles and venules are largely stubs -- single unbranching vessels, which again renders some immunity to blockage.
  • However! Occlusion of a penetrating arteriole retards flow within a 400 - 600um cylinder (larger than a cortical column!)
  • Occulsion of many penetrating vessels, unsurprisingly, leads to large swaths of dead cortex, "UBOS" in MRI parlance (unidentified bright objects).
  • Death and depolarizing depression can be effectively prevented by excitotoxicity inhibitors -- MK801 in the slides (NMDA blocker, systemically)

hide / / print
ref: Gradinaru-2009.04 tags: Deisseroth DBS STN optical stimulation 6-OHDA optogenetics date: 05-10-2016 23:48 gmt revision:8 [7] [6] [5] [4] [3] [2] [head]

PMID-19299587[0] Optical Deconstruction of Parkinsonian Neural Circuitry.

  • Viviana Gradinaru, Murtaza Mogri, Kimberly R. Thompson, Jaimie M. Henderson, Karl Deisseroth
  • DA depletion of the SN leads to abnormal activity in the BG ; HFS (>90Hz) of the STN has been found to be therapeutic, but the mechanism is imperfectly understood.
    • lesions of the BG can also be therapeutic.
  • Used chanelrhodopsin (light activated cation channel (+)) which are expressed by cell type specific promoters. (transgenic animals). Also used halorhodopsins, which are light activated chloride pumps (inhibition).
    • optogenetics allows simultaneous optical stimulation and electrical recording without artifact.
  • Made PD rats by 6-hydroxydopamine unilaterally into the medial forebrain bundle of rats.
  • Then they injected eNpHr (inhibitory) opsin vector targeting excitatory neurons (under control of the CaMKIIa receptor) to the STN as identified stereotaxically & by firing pattern.
    • Electrical stimulation of this area alleviated rotational behavior (they were hemiparkinsonian rats), but not optical inhibition of STN.
  • Alternately, the glia in STN may be secreting molecules that modulate local circuit activity; it has been shown that glial-derived factor adenosine accumulates during DBS & seems to help with attenuation of tremor.
    • Tested this by activating glia with ChR2, which can pass small Ca+2 currents.
    • This worked: blue light halted firing in the STN; but, again, no behavioral trace of the silencing was found.
  • PD is characterized by pathological levels of beta oscillations in the BG, and synchronizing STN with the BG at gamma frequencies may ameliorate PD symptoms; while sync. at beta will worsen -- see [1][2]
  • Therefore, they tried excitatory optical stimulation of excitatory STN neurons at the high frequencies used in DBS (90-130Hz).
    • HFS to STN failed, again, to produce any therapeutic effect!
  • Next expressed channel rhodopsin in only projection neurons Thy1::ChR2 (not excitatory cells in STN), again did optotrode (optical stim, eletrical record) recordings.
    • HFS of afferent fibers to STN shut down most of the local circuitry there, with some residual low-amplitude high frequency burstiness.
    • Observed marked effects with this treatment! Afferent HFS alleviated Parkinsonian symptoms, profoundly, with immediate reversal once the laser was turned off.
    • LFS worsened PD symptoms, in accord with electrical stimulation.
    • The Thy1::ChR2 only affected excitatory projections; GABAergic projections from GPe were absent. Dopamine projections from SNr were not affected by the virus either. However, M1 layer V projection neurons were strongly labeled by the retrovirus.
      • M1 layer V neurons could be antidromically recruited by optical stimulation in the STN.
  • Selective M1 layer V HFS also alleviated PD symptoms ; LFS had no effect; M2 (Pmd/Pmv?) LFS causes motor behavior.
  • Remind us that DBS can treat tremor, rigidity, and bradykinesia, but is ineffective at treating speech impairment, depression, and dementia.
  • Suggest that axon tract modulation could be a common theme in DBS (all the different types..), as activity in white matter represents the activity of larger regions compactly.
  • The result that the excitatory fibers of projections, mainly from the motor cortex, matter most in producing therapeutic effects of DBS is counterintuitive but important.
    • What do these neurons do normally, anyway? give a 'copy' of an action plan to the STN? What is their role in M1 / the BG? They should test with normal mice.


[0] Gradinaru V, Mogri M, Thompson KR, Henderson JM, Deisseroth K, Optical Deconstruction of Parkinsonian Neural Circuitry.Science no Volume no Issue no Pages (2009 Mar 19)
[1] Eusebio A, Brown P, Synchronisation in the beta frequency-band - The bad boy of parkinsonism or an innocent bystander?Exp Neurol no Volume no Issue no Pages (2009 Feb 20)
[2] Wingeier B, Tcheng T, Koop MM, Hill BC, Heit G, Bronte-Stewart HM, Intra-operative STN DBS attenuates the prominent beta rhythm in the STN in Parkinson's disease.Exp Neurol 197:1, 244-51 (2006 Jan)

hide / / print
ref: -0 tags: standard enthalpy chemicals list pdf date: 06-25-2015 00:09 gmt revision:1 [0] [head]

Standard thermodynamic properties of chemical substances

hide / / print
ref: -0 tags: polyimide polyamide basic reduction salt surface modification date: 02-27-2015 19:45 gmt revision:0 [head]

Kinetics of Alkaline Hydrolysis of a Polyimide Surface

  • The alkaline hydrolysis of a polyimide (PMDA-ODA) surface was studied as a function of time, temperature and hydroxide ion concentration.
  • Quantification of the number of carboxylic acid groups formed on the modified polyimide surface was accomplished by analysis of data from contact angle titration experiments.
  • Using a large excess of base, pseudo-first-order kinetics were found, yielding kobs ≈ 0.1−0.9 min-1 for conversion of polyimide to poly(amic acid) depending on [OH-].
  • From the dependence of kobs on [OH-], a rate equation is proposed.
  • Conversion of the polyimide surface to one of poly(amic acid) was found to reach a limiting value with a formation constant, K, in the range 2−10 L·mol-1.

hide / / print
ref: -0 tags: Peter Ledochowitsch ECoG parylene fabrication MEMS date: 09-25-2014 16:54 gmt revision:0 [head]

IEEE-5734604 (pdf) Fabrication and testing of a large area, high density, parylene MEMS µECoG array

  • Details 5-layer platinum parylene process for high density ECoG arrays.

hide / / print
ref: -0 tags: physical principles of scalable neural recording marblestone date: 08-25-2014 20:21 gmt revision:0 [head]

PMID-24187539 Physical principles for scalable neural recording.

  • Marblestone AH1, Zamft BM, Maguire YG, Shapiro MG, Cybulski TR, Glaser JI, Amodei D, Stranges PB, Kalhor R, Dalrymple DA, Seo D, Alon E, Maharbiz MM, Carmena JM, Rabaey JM, Boyden ES, Church GM, Kording KP.

hide / / print
ref: -0 tags: intracortical utah array fabrication MEMS Normann date: 08-14-2014 01:35 gmt revision:5 [4] [3] [2] [1] [0] [head]

PMID-1937509 A silicon-based, three-dimensional neural interface: manufacturing processes for an intracortical electrode array.

  • Campbell PK1, Jones KE, Huber RJ, Horch KW, Normann RA. (1991)
  • One of (but not the) first papers describing their methods / idea (I think).
  • First conf paper: {1294} (1988)
  • later adopted glass frit insulator --

hide / / print
ref: car-0 tags: saab modifications convertible 900 SE date: 04-29-2013 18:09 gmt revision:12 [11] [10] [9] [8] [7] [6] [head]

So, a year and a half ago I bought a green 1995 900 SE convertible for $600. At that time, it didn't move or go in reverse. Since then, I've been fixing up random things here an there (or just straight modifying / breaking the car by other standards) and recently realized that I had better start keeping track of everything that's been done, in case my memory lapses or i need to know where some random part came from. I doubt this will be useful to anyone else - next time, pictures!

Things that I've done to the green convertible, in approximate chronological order:

  1. replaced the clutch cable. previous owner says that the clutch was relatively new; verified when i swapped the transmission.
  2. replaced the turbo transmission with one from a 900 S n/a; new transmission has slightly shorter final drive ratio, which is fun. Both transmissions have approximately the same number of miles on them (again, the original tranny had no reverse).
    1. The subframe brace bolts were seized on this car - it took several weeks off and on + heat + rust solvent to remove both large 18mm bolts. I recommend replacing them with new ones if possible (these look fine, they are very heavy bolts).
    2. In the process of doing this, I stripped one captive nut used for the transmission mount, and had to drill it out & replace it with a 3/8" grade 8 bolt & double nut affair from home cheapo. Be careful when threading these bolts in, or you'll have to do the same!
  3. replaced the rubber boots on the control-arm ball joints, and in turn repacked the ball joints with grease. This takes a lot of patience.
  4. installed a new gas filler hose from the plastic filler line to the gas tank. Previous one was held on with zip-ties. (yes, zip-ties: after i filled the damn thing up, i noticed that it was leaking excessively, and had to drive it around until the gas was burned through & unlikely to drip all over the ground once the car was parked.)
  5. removed turbo silencer prior intercooler.
  6. installed a new passenger side headlamp assembly.
  7. replaced the thermostat.
  8. replaced and gapped all 4 spark plugs.
  9. reflashed the ECU to stage 2.5 or so - 1.4 bar peak boost @ 3k rpm, 1.2 bar above 4k rpm, no boost limit in 2nd gear. This was done via Trionic5 suite, available from http://ecuproject.com/
  10. replaced both front struts & shocks with parts from a junkyard 1997 900 SE; previous ones had a loose / faulty wheel bearing. Very worthy upgrade.
  11. replaced all brake pads + front brake rotors to fit the struts/shocks/bearing hubs from the 97 900 SE. (the hubs are incompatible with 1995 disc rotors - different internal flange diameter.)
  12. replaced both front brake calipers. The previous 1995-version calipers did not mate well with '97 struts and '97 discs. Initially bought used calipers off of ebay, but the damn bleeder valve was sheared off at the nut, so I took the pads off them and installed remaned ones. Brake feel is much, much better now.
  13. added internal bracing / roll cage, though without the top hoop. removed most of the upholstery & seats in the back to fit this.
  14. oil and filter changed at 161k.
  15. adjusted some of the window seals - but they still need to be replaced eventually.
  16. removed condenser and AC compressor.
  17. replaced / changed the serpentine belt to a 71" / 1805mm 6-tooth duralast belt - aka AC delete belt ref. Water pump is only 25% engaged with the belt now, but seems to work just fine (and the internet verifies this.)
  18. repainted some rust spots on the trunk lid.
  19. installed plenty of grease on the upholstery -- oops :P
  20. Got two used tires from America's discount tires; rear tires still shady. Will get around to replacing them; have already gotten around to destroying the front ones with second-gear burnouts to 60 :)
  21. Resurfaced flywheel, replaced clutch disc with one from a Jeep Wagoneer (though not the pressure plate -- it looked fine, no signs of cracking).
  22. Replaced drivers side main crankcase seal.
  23. Replaced drivers side transaxle output bushing + drivers and passengers transaxle output seals
  24. Removed oil pan, cleaned pickup, and re-did oil pan seal.
  25. Welded a new stud on the turbo, applied with anti-seize this time! always use anti-seize on exhaust parts, they get hot!
  26. Removed head, had it ground to fix a minor valve leak and milled flat (increasing the compression ratio a bit). Cleaned the block top surface, intake manifold, fuel injectors, piston heads, and cylinders as best I could. Removed & replaced the broken stud underneath the power steering pump. In the course of having the head out, replaced the relevant seals:
    1. Valve stem seals
    2. Head gasket
    3. Intake gasket
    4. Exhaust gasket
  27. Replaced upper and lower radiator hoses.
  28. As of May 1 2012, I no longer own the car -- I'm off to California, and can't take it with me. May the new owner enjoy it as much as I have!

Things that need to be done to the 'vert:

  1. There is still a click in the rear drivers-side brake, should inspect it; likely brake pads.
  2. New rear tires (!!).
  3. hood gas springs are shot. Meh.

Now, wonders of wonders, I have another of these cars - though a sedan, not a convertible. It cost much more (about 8x as much), and is hence in much better shape. That said, I've had to do the following:

  1. Replaced the rear drivers side brake caliper. In the rain; should have waited for a sunny day, as this took longer than expected. (Everything does.)
  2. New front disc rotors & pads Dec 2008. As of July 2010, they should be replaced soon.
  3. Replaced the clutch + throwout bearing. The latter was making terrible noises back when I drove to Atlanta fall 2008; I nearly didn't make it back.
  4. Removed a "Saab saver" steering rack brace installed by a previous owner. To install this brace, you need to drill through the wheel well, which allows (possibly salty) water to touch the bare metal. As a result of this + stress upon metal that was not engineered to bear it, the wheel well cracked almost to the point where the shock mount was about to go through the hood! I'm glad I caught this while the car was parked, and not while i was going 70!
  5. welded the wheel well back together with 2x1/4" steel strap. I tried to weld to the major braces of the unibody, and later covered everything with plenty of paint and spray-on rubber soundproofing compound. Still, I worry about the opposite side of the metal, where the heat from the welding undoubtably removed rust-preventing paint. Seems reliable so far.
  6. replaced drivers side inner CV joint boot & of course repacked the CV joint grease. You need to take the CV joint completely apart to fit the thing - it won't stretch!
  7. Built a tool for removing the differential output bushing from the transmission. As the output of the differential is only a bushing, and it's put under a lot of stress during hard acceleration (especially peel outs - one wheel spinning much faster than the other = lots of strain on diff), the bushing wears out quickly. It is a pressure fit sleeve, so I reasoned that it could be removed by pressure - not quite. It must be cut out, very tediously, using a single-ended hacksaw. To keep metal debris out of the diff housing, insert a rag into where the CV axle was, and flush the tranny throughly after installing a new bushing.
    1. This is all rather difficult, so don't peel out!
    2. The passengers side half-axle is supported by a bearing by the alternator, so it does not have the same levels of stress & does not wear as quickly.
  8. Four new tires. $560 - beh.
  9. Replaced front brake discs Nov 2010
  10. New front strut inserts + reground front brakes May 2012 -- in Albuquerque.
  11. Flushed transmission oil in the desert outside of Lake Powell; the heat of Phoenix did it in & shifting was starting to be very sticky. Also adjusted the clutch cable, which later snapped while driving in SF. (Fortunately, was able to first gear it to a parking garage, where I fixed it on the spot).
  12. Fan control relay went out in the desert of Utah; ended up shorting it closed with a bit of wire. Said wire must be removed after turning off the car, otherwise the fan will run indefinitely!
  13. Sold car February 2013. May the next owner enjoy her well!

And now the blue 1998 saab 900, sold to Adam:

  1. Replaced front oxygen sensor
  2. Replaced rear transmission mount (had to take off the subframe for this, yuck)
  3. Fixed front passengers side window regulator (ish).
  4. Adjusted clutch master cylinder. The linkage between the pedal and the master cylinder was plastic and badly worn, which was causing the clutch to never fully disengage, in turn gradually leading to third gear synchro wearing out. Adjusted the stop on the pedal to compensate for this; it should ultimately be replaced, though works fine now.
  5. Replaced front drivers side headlight.

Next, the saab 9000 aero:

  1. Swapped wastegate / APC control valve with one from my 900 to remedy overboost issues.
  2. Replaced alternator brushes. Thing was a bear to remove -- had to jack up the engine a bit to get it out!
  3. Re-soldered alternater to battery charging and starting wire
  4. Re-soldered engine-to-chassis grounding wire; transmission to battery wire seemed fine.
  5. Replaced tubing from blow-off valve, PCV, and fuel pressure regulator to intake manifold with aftermarket silicone tubing.
  6. Installed new radio.
  7. Replaced headlight relay.
  8. Replaced turn signal relay.
  9. Replaced thermostat.
  10. Replaced rear lower panhard rod bushing; was falling out and rubbing against the rear axle.
    1. All of the other rear-end suspension bushings looked fine!
  11. Gapped all 4 spark plugs.
  12. New tires @ 120k miles; will need to rotate them.
  13. Cut wire from glass break sensor to security / immobilizer module, as passing buses were setting off the car alarm.
  14. Bought new IAC valve off ebay, put it in (difficult compared to a NG900!), but it idled too high (perhaps I needed to reset the ECU?). Therefore I took the new one out, cleaned and lubricated the old one, and re-installed it. The car still idles high for ~10 seconds when put in neutral, but it comes down, and I suppose I'll live with that for now.
  15. Blocked off the evap & PCV & instrument boost gauge intake manifold barbs in the process of debugging the high idle (figured that there were vacuum leaks).
  16. Replaced central lock relay with a used one from ePartsLand.
  17. Installed new drivers-side wheel bearing. Note you need to take the axle out to get access to the hex-head bolts which hold the hub in. Thankfully, it's not hard once this is done.
  18. New front/rear brakes/rotors.
    1. Front brakes were easy; rear brakes have a hidden retraction allen key.
      1. Follow the directions here. To fit a new rotor and pads, the whole brake caliper needs to be taken apart!
  19. Removed A/C and installed a short belt 2325 mm length.
    1. Note: tensioner pully is threaded backwards to prevent pulley rotation from loosening it.
    2. Note: to disengage the tensioner, you don't need a special tool - just put a breaker bar on a 19mm socket & use that as a lever.
  20. Rear shocks were replaced with Bilstein HD types from thesaabsite.com
  21. Installed new heater core, and all but one of the hoses leading to it.
  22. New fuel filter 121k
  23. Headgasket job April 21-25:
    1. New headgasket + new headbolts. One of them did not torque up to the right 'feel' following the saab-specificed procedure (33ft-lbs, 44ft-lbs, 90deg torque-to-yield. I'm going to replace that one with a M12 12.9 grade bolt from Mcmaster; have ordered 110, 120, and 130mm length & will see which fits best. Original stretch bolts are grade 10.9.
    2. New radiator
    3. New idler pulley
    4. New head gasket + head bolts; only cleaned the block and head, did not have them ground. Seems OK so far!
    5. Flushed oil, though it still took a few hours at temperature to boil off the remaining antifreeze that had leaked into the engine oil.
    6. Kept the timing chain + guides, though it's stretched near the limit; will have to replace next time I have the thing disassembled.
    7. New exhaust manifold. Pain to install, as I didn't remove the turbo when removing the head. Still quite possible.
    8. New urethane engine torque mount. Just cut out the old rubber inserts with a hacksaw -- not too hard. Be careful which way you put in the new blue inserts -- they are asymmetrical.
    9. One new hood gas strut = enough.
    10. New plugs. Old ones were filthy.
  24. Todo
    1. Windshield & Por-15 the frame around it; I bet the previous installer scratched the paint.
    2. Camber bolts to help the tires last longer.

hide / / print
ref: -0 tags: histology optical coherence tomography vasculature avoidance date: 01-29-2013 06:46 gmt revision:0 [head]

PMID-9766311 Optical coherence tomography for neurosurgical imaging of human intracortical melanoma.

  • Relevant for our interests: Subsurface cerebral vascular structures could be identified and were therefore avoided.
  • more broadly, could identify subsurface metastatic melanoma due to reflectance changes. nice.

hide / / print
ref: Stevenson-2011.02 tags: Kording neural recording doubling northwestern chicago date: 01-28-2013 00:12 gmt revision:1 [0] [head]

PMID-21270781[0] How advances in neural recording affect data analysis.

  • Number of recorded channels doubles about every 7 years (slowish).
  • "Emerging data analysis techniques should consider both the computational costs and the potential for more accurate models associated with this exponential growth of the number of recorded neurons."


[0] Stevenson IH, Kording KP, How advances in neural recording affect data analysis.Nat Neurosci 14:2, 139-42 (2011 Feb)

hide / / print
ref: Harris-2011.12 tags: mechanically adaptive electrodes implants case western dissolving flexible histology Harris date: 01-25-2013 01:39 gmt revision:5 [4] [3] [2] [1] [0] [head]

PMID-22049097[0] Mechanically adaptive intracortical implants improve the proximity of neuronal cell bodies.

  • See also [1]
  • Initial tensile modulus of 5GPa dropped to 12MPa. (almost 500-fold!)
    • Their polymer nanocomposite (NC) still swells 65-70% (with water?)
    • Implant size 100 x 200um.
  • Controlled with tungsten of identical size and coating.
  • Tethered to skull.
  • Interesting:
    • The neuronal nuclei density within 100 µm of the device at four weeks post-implantation was greater for the compliant nanocomposite compared to the stiff wire.
    • At eight weeks post-implantation, the neuronal nuclei density around the nanocomposite was maintained, but the density around the wire recovered to match that of the nanocomposite.
    • Hypothesis, in discussion: softer implants are affecting the time-course of the response rather that final results
  • The glial scar response to the compliant nanocomposite was less vigorous than it was to the stiffer wire
  • Cultured astrocytes have been shown to respond to mechanical stimuli via calcium signaling (Ostrow and Sachs, 2005).
  • Substrate stiffness is also known to shift cell differentiation in mesenchymal stem cells to be neurogenic, myogenic, or osteogenic (Engler et al., 2006).
  • In vivo studies which focus on the effects of electrode tethering have shown that untethered implants reduce the extent of the glial scar (Biran et al., 2007; Kim et al., 2004; Subbaroyan, 2007)
  • Parylene, polymide, and PDMS still each have moduli 6 orders of mangitude larger than that of the brain.
  • In some of their plots, immune response is higher around the nanocomposites!
    • Could be that their implant is still too large / stiff?
  • Note that recent research shows that vitemin may have neuroprotective effects --
    • Research has linked vimentin expression to rapid neurite extension in response to damage (Levin et al., 2009)
    • NG2+ cells that express vimentin have been proposed to support repair of central nervous system (CNS) damage, and stabilize axons in response to dieback from ED1+ cells (Alonso, 2005; Nishiyama, 2007; Busch et al., 2010)
  • Prior work (Frampton et al., 2010 PMID-20336824[2]) hypothesizes that a more compact GFAP response increases the impedance of an electrode which may decrease the quality of electrode recordings.


[0] Harris JP, Capadona JR, Miller RH, Healy BC, Shanmuganathan K, Rowan SJ, Weder C, Tyler DJ, Mechanically adaptive intracortical implants improve the proximity of neuronal cell bodies.J Neural Eng 8:6, 066011 (2011 Dec)
[1] Harris JP, Hess AE, Rowan SJ, Weder C, Zorman CA, Tyler DJ, Capadona JR, In vivo deployment of mechanically adaptive nanocomposites for intracortical microelectrodes.J Neural Eng 8:4, 046010 (2011 Aug)
[2] Frampton JP, Hynd MR, Shuler ML, Shain W, Effects of glial cells on electrode impedance recorded from neuralprosthetic devices in vitro.Ann Biomed Eng 38:3, 1031-47 (2010 Mar)

hide / / print
ref: Rennaker-2005.03 tags: electrode recording longevity mechanical insertion Oklahoma MEA date: 01-25-2013 01:21 gmt revision:3 [2] [1] [0] [head]

PMID-15698656[0] A comparison of chronic multi-channel cortical implantation techniques: manual versus mechanical insertion.

  • Over 60% of the animals implanted with the mechanical insertion device had driven activity at week 6
    • whereas none of the animals with manually inserted arrays exhibited functional responses after 3 weeks.
      • Roughly identical responses immediately following surgery.
      • Could be that the manual inserter had horizontal movement / shear. (This is solveable with a stereotax).
      • Other research showed little difference in tissue response at 10um/s or 100um/s PMID-21896383[1]
  • Multi-wire electrodes.
  • Mechanical insertion device was capable of rapidly inserting the electrode without visible compression of the brain.
  • Response measured relative to auditory stimulus.
  • Their insertion device looks like a pen.


[0] Rennaker RL, Street S, Ruyle AM, Sloan AM, A comparison of chronic multi-channel cortical implantation techniques: manual versus mechanical insertion.J Neurosci Methods 142:2, 169-76 (2005 Mar 30)
[1] Welkenhuysen M, Andrei A, Ameye L, Eberle W, Nuttin B, Effect of insertion speed on tissue response and insertion mechanics of a chronically implanted silicon-based neural probe.IEEE Trans Biomed Eng 58:11, 3250-9 (2011 Nov)

hide / / print
ref: Ganguly-2011.05 tags: Carmena 2011 reversible cortical networks learning indirect BMI date: 01-23-2013 18:54 gmt revision:6 [5] [4] [3] [2] [1] [0] [head]

PMID-21499255[0] Reversible large-scale modification of cortical networks during neuroprosthetic control.

  • Split the group of recorded motor neurons into direct (decoded and controls the BMI) and indirect (passive) neurons.
  • Both groups showed changes in neuronal tuning / PD.
    • More PD. Is there no better metric?
  • Monkeys performed manual control before (MC1) and after (MC2) BMI training.
    • The majority of neurons reverted back to original tuning after BC; c.f. [1]
  • Monkeys were trained to rapidly switch between manual and brain control; still showed substantial changes in PD.
  • 'Near' (on same electrode as direct neurons) and 'far' neurons (different electrode) showed similar changes in PD.
    • Modulation Depth in indirect neurons was less in BC than manual control.
  • Prove (pretty well) that motor cortex neuronal spiking can be dissociated from movement.
  • Indirect neurons showed decreased modulation depth (MD) -> perhaps this is to decrease interference with direct neurons.
  • Quote "Studies of operant conditioning of single neurons found that conconditioned adjacent neurons were largely correlated with the conditioned neurons".
    • Well, also: Fetz and Baker showed that you can condition neurons recorded on the same electrode to covary or inversely vary.
  • Contrast with studies of motor learning in different force fields, where there is a dramatic memory trace.
    • Possibly this is from proprioception activating the cerebellum?

Other notes:

  • Scale bars on the waveforms are incorrect for figure 1.
  • Same monkeys as [2]


[0] Ganguly K, Dimitrov DF, Wallis JD, Carmena JM, Reversible large-scale modification of cortical networks during neuroprosthetic control.Nat Neurosci 14:5, 662-7 (2011 May)
[1] Gandolfo F, Li C, Benda BJ, Schioppa CP, Bizzi E, Cortical correlates of learning in monkeys adapting to a new dynamical environment.Proc Natl Acad Sci U S A 97:5, 2259-63 (2000 Feb 29)
[2] Ganguly K, Carmena JM, Emergence of a stable cortical map for neuroprosthetic control.PLoS Biol 7:7, e1000153 (2009 Jul)

hide / / print
ref: -0 tags: optical neural recording photon induced electron transfer date: 01-02-2013 04:25 gmt revision:2 [1] [0] [head]

PMID-22308458 Optically monitoring voltage in neurons by photo-induced electron transfer through molecular wires.

  • Photoinduced electron transfer.
    • About what you would think -- a photon bumps an electron into a higher orbital, and this electron can be donated to another group or drop back down & fluoresce a photon.
  • Good sensitivity: ΔF/F\Delta F/F of 20-27% per 100mV, fast kinetics.
  • Not presently genetically targetable.
  • Makes sense in terms of energy: "A 100-mV depolarization changes the PeT driving force by 0.05 eV (one electron × half of 100-mV potential, or 0.05 V). Because PeT is a thermally controlled process, the value of 0.05 eV is large relative to the value of kT at 300 K (0.026 eV), yielding a large dynamic range between the rates of PeT at resting and depolarized potentials.
  • Why electrochromic dyes have plateaued:
    • "In contrast, electrochromic dyes have smaller delta G values, 0.003 (46) to 0.02 (47) eV, and larger comparison energies. Because the interaction is a photochemically controlled process, the energy of the exciting photon is the comparison energy, which is 1.5–2 eV for dyes in the blue-to-green region of the spectrum. Therefore, PeT and FRET dyes have large changes in energy versus their comparison energy (0.05 eV vs. 0.026 eV), giving high sensitivities; electrochromic dyes have small changes compared with the excitation photon (0.003–0.02 eV vs. 2 eV), producing low voltage sensitivity."

hide / / print
ref: -0 tags: optical imaging neural recording diamond magnetic date: 01-02-2013 03:44 gmt revision:0 [head]

PMID-22574249 High spatial and temporal resolution wide-field imaging of neuron activity using quantum NV-diamond.

  • yikes: In this work we consider a fundamentally new form of wide-field imaging for neuronal networks based on the nanoscale magnetic field sensing properties of optically active spins in a diamond substrate.
  • Cultured neurons.
  • NV = nitrogen-vacancy defect centers.
    • "The NV centre is a remarkable optical defect in diamond which allows discrimination of its magnetic sublevels through its fluorescence under illumination. "
    • We show that the NV detection system is able to non-invasively capture the transmembrane potential activity in a series of near real-time images, with spatial resolution at the level of the individual neural compartments.
  • Did not actually perform neural measurements -- used a 10um microwire with mA of current running through it.
    • I would imagine that actual neurons have far less current!

hide / / print
ref: -0 tags: optical recording voltage sensitive dyes redshirt date: 01-02-2013 03:17 gmt revision:3 [2] [1] [0] [head]

PMID-16050036 Imaging brain activity with voltage- and calcium-sensitive dyes.

  • Voltage-sensitive dyes are well suited for measuring synaptic integration, as:
    • Electrodes are too blunt to effectively record these fine, < 1um diameter structures.
    • The surface area to volume ratio is highest in the dendrites
    • Voltage-sensitive dyes also permeate internal membranes not subject to voltage gradients, hence this does not contribute to the signal, leading to a decreased ΔF/F\Delta F / F .
  • Dominant experimental noise is shot noise, statistical -- see {1181}.
  • modern dyes and imagers can reliably record single action potentials; spatial averaging yields similar resolution as electrical recording.
  • They performed optical recording of Aplysia sensory ganglia, and discovered following light tail touch: "It is almost as if the Aplysia nervous system is designed such that every cell in the abdominal ganglion cares about this (and perhaps every) sensory stimulus. In addition, more than 1000 neurons in other ganglia are activated by this touch..."
      • These results force a more pessimistic view of the present understanding of the neuronal basis of apparently simple behaviors in relatively simple nervous systems.
  • Used calcium imaging on olfactory glomeruli of mice and turtles; measurements were limited by either shot-noise or heart/breathing artifacts.
  • Confocal and two-photon microscopes, due to their exchange of spatial resolution for sensitivity, are not useful with voltage-sensitive dyes.
    • The generation of fluorescent photons in the 2-photon confocal microscope is not efficient. We compared the signals from Calcium Green-1 in the mouse olfactory bulb using 2-photon and ordinary microscopy. In this comparison the number of photons contributing to the intensity measurement in the 2-photon confocal microscope was about 1000 times smaller than the number measured with the conventional microscope and a CCD camera.
  • By the numbers, quote: Because only a small fraction of the 10e16 photons/ms emitted by a tungsten filament source will be measured, a signal-to-noise ratio of 10e8 (see above) cannot be achieved. A partial listing of the light losses follows. A 0.9-NA lamp collector lens would collect 0.1 of the light emitted by the source. Only 0.2 of that light is in the visible wavelength range; the remainder is infrared (heat). Limiting the incident wavelengths to those, which have the signal means, that only 0.1 of the visible light is used. Thus, the light reaching the
preparation might typically be reduced to 1013 photons/ms. If the light-collecting system that forms the image has high efficiency e.g., in an absorption measurement, about 1013 photons/ms will reach the image plane. (In a fluorescence measurement there will be much less light measured because 1. only a fraction of the incident photons are absorbed by the fluorophores, 2. only a fraction of the absorbed photons appear as emitted photons, and 3. only a fraction of the emitted photons are collected by the objective.) If the camera has a quantum efficiency of 1.0, then, in absorption, a total of 10e13 photoelectrons/ms will be measured. With a camera of 1000 pixels, there will be 10e10 photoelectrons/ms/pixel. The shot noise will be 10e5 photoelectrons/ms/pixel; thus the very best that can be expected is a noise that is 10e−5 of the resting light (a signal-to-noise ratio of 100 db). The extra light losses in a fluorescence measurement will further reduce the maximum obtainable signal-to-noise ratio.

hide / / print
ref: -0 tags: optical coherence tomography neural recording squid voltage sensitive dyes review date: 12-23-2012 21:00 gmt revision:4 [3] [2] [1] [0] [head]

PMID-20844600 Detection of Neural Action Potentials Using Optical Coherence Tomography: Intensity and Phase Measurements with and without Dyes.

  • Optical methods of recording have been investigated since the 1940's:
    • During action potential (AP) propagation in neural tissue light scattering, absorption, birefringence, fluorescence, and volume changes have been reported (Cohen, 1973).
  • OCT is reflection-based, not transmission: illuminate and measure from the same side.
    • Here they use spectral domain OCT, where the mirror is not scanned; rather SD-OCT uses a spectrometer to record interference of back-scattered light from all depth points simultaneously (Fercher et al., 1995).
    • Use of a spectrometer allows imaging of an axial line within 10-50us, sufficient for imaging action potentials.
    • SD-OCT, due to some underlying mathematics which I can't quite grok atm, can resolve/annul common-mode phase noise for high temporal and Δphase\Delta phase measurement (high sensitivity).
      • This equates to "microsecond temporal resolution and sub-nanometer optical path length resolution".
  • OCT is generally (intially?) used for in-vivo imaging of retinas, in humans and other animals.
  • They present new data for depth-localization of neural activity in squid giant axons (SGA) stained with a voltage-sensitive near-infrared dye.
    • Note: averaged over 250 sweeps.
  • ΔPhase>>ΔIntensity\Delta Phase &gt;&gt; \Delta Intensity -- figure 4 in the paper.
  • Use of voltage-sensitive dyes improves the resolution of ΔI\Delta I , but not dramatically --
    • And Δphase\Delta phase is still a bit delayed.
    • Electrical recording is the control.
      • It will take significant technology development before optical methods exceed electrical methods...
  • Looks pretty preliminary. However, OCT can image 1-2mm deep in transparent tissue, which is exceptional.
  • Will have to read their explanation of OCT.
  • Used in a squid giant axon prep. 2010, wonder if anything new has been done (in vivo?).
  • Claim that progress is hampered by limited understanding of how these Δphase\Delta phase signals arise.

hide / / print
ref: -0 tags: optical coherence tomography neural recording aplysia date: 12-23-2012 09:12 gmt revision:2 [1] [0] [head]

PMID-19654752 Detecting intrinsic scattering changes correlated to neuron action potentials using optical coherence imaging.

  • Aplysia, intrinsic imaging of scattering change following electrical stimulation.
    • Why did it take so long for them to get this paper out.. ?
  • Nicolelis first cited author.
  • Quality of recording not necessarily high.
  • quote: "Typical transverse resolutions in OCT (10-20um) are likely insufficient to identify smaller mamallian neurons that are often studied in neuroscience."
    • Solution: optical coherence microscopy (OCM), where a higher NA lens focuses the light to a smaller spot.
    • Expense: shorter depth-of-field.
  • Why does this work? "One mechanism of these optical signals is believed to be a realignment of charged membrane proteins in response to voltage change [6].
  • A delay of roughly 70ms was observed between the change in membrane voltage and the change in scattering intensity.
    • That's slow! Might be due to conduction velocity in Aplysia.
  • SNR of scattering measurement not too high -- the neurons are alive, afterall, and their normal biological processes cause scattering changes.
    • Killing the neurons with KCl dramatically decreased the variance of scattering, consistent with this hpothesis.
  • Birefringence: "Changes in the birefringence of nerves due to electrical activity have been shown to be an order of magnitude larger than scattering intensity changes" PMID-5649693

hide / / print
ref: -0 tags: debian linux github persistent ssh authentication date: 07-27-2012 01:40 gmt revision:1 [0] [head]

If you don't want to repeatedly enter in your username/password for github when commiting, you'll want to enable an RSA authetication key.

-- http://www.debian.org/devel/passwordlessssh run

(with no options).

-- then https://help.github.com/articles/working-with-ssh-key-passphrases

 ssh-keygen -p 
with your github passphrase (I'm not totally sure this is essential).

For me, pull and push aftwerard worked without needing to supply my password. Easy!

hide / / print
ref: Benabid-2009.01 tags: DBS historical perspective date: 02-22-2012 14:54 gmt revision:2 [1] [0] [head]

PMID-19660668[0] Functional neurosurgery for movement disorders: a historical perspective.

  • Spinal cord LFS (30 Hz) has been used to treat intractible pain for decades.
  • Based on experimental data obtained in MPTP-treated parkinsonian monkeys, the pedunculopontine nucleus has been used as a new target, and as suggested by the animal research results, its use indeed improves walking and stability when stimulation is performed at low frequency (25 Hz).
    • But donesn't it induce feelings of well-being {1074}
  • On freezing gait, which is non-dopamergic and not treated via STN DBS:
    • Based on experimental data obtained in MPTP-treated parkinsonian monkeys, the pedunculopontine nucleus has been used as a new target, and as suggested by the animal research results, its use indeed improves walking and stability when stimulation is performed at low frequency (25 Hz)
  • Many channel IPGS can target multiple structures with multiple frequencies; author thinks this is the future in terms of efficiency.
  • Suggests brain-machine interfaces (?)


[0] Benabid AL, Chabardes S, Torres N, Piallat B, Krack P, Fraix V, Pollak P, Functional neurosurgery for movement disorders: a historical perspective.Prog Brain Res 175no Issue 379-91 (2009)

hide / / print
ref: Gubellini-2009.09 tags: DBS PD 2009 review historical microstimulation ICMS chronaxie rheobase date: 02-22-2012 14:33 gmt revision:11 [10] [9] [8] [7] [6] [5] [head]

PMID-19559747[0] Deep brain stimulation in neurological diseases and experimental models: from molecule to complex behavior.

  • Wow, DBS has been used since the 1950s for localization of lesion targets; in the 1960's was discovered to alleviate tremor; 70s and 80s targeted at the cerebellum for treatimng movement disorders or epilepsy.
  • Extensive list of all the other studies & their stimulation protocols.
  • Large mylenated fibers have chronaxies ranging aruond 30-200 us, while cell bodies and dendrites this value is around 1-10ms. (Rank, 1975).
    • Lapique: minimum energy is a/b, where b is the rhreobase (the minimal electric current of infinite duration that results in an action potential), and chronaxie is the minimum time over which an electric current double the strength of the rheobase needs to be applied in order ti stimulate a nerve cell.
    • Q(t)t=U rh(1+t cht) \frac{Q(t)}{t} = U_{rh}(1 + \frac{t_ch}{t}) where U rhU_{rh} is the rheobase and t cht_{ch} is the chronaxie.
    • you can simplify this to: I th=I rh(1+t cht) I_{th} = I_{rh} (1 + \frac{t_{ch}}{t}) where I rhI_{rh} is the rheobase current and I thI_{th} is the threshold current (Irnich, 2002).
  • Measurements of chronaxie in VIM and GPi found values of 60-75us, hence DBS effects are likely mediated through the activation of afferent and efferent axons. (Holsheimer et al 2000a, 2000b)
    • In line with these findings, cortical stimulation also results in the activation of afferent and efferent axons (Nowak and Bullier, 1998a, 1998b PMID-9504844).
    • Ustim can result in cell body hyperpolarization coupled with action potential initiation in the axon (McIntyre and Grill, 1999; Nowak and Bullier 1998a b).
  • Stimulation depends on the direction of the electric field, obviously. When the axons and E\vec{E} are ||.
  • Acute stimulation is different from chronic DBS (as used in patients); it may be a mistake to extrapolate conclusions.
    • DBS electrodes become encapsulated, and current delivered hence decreases.
  • Strong placebo effect of just the DBS surgery.
    • Implantation of electrodes alone had therapeutic benefit in 6-mo trial. (Mann et al 2009).
  • mean lead impedance is 400-120 ohms in clinical DBS leads, PT-IR.
    • platinum is relatively non-toxic to the brain when compared to metals such as gold or rhodium.
  • If stimulation exceeds 30 uC/cm^2/phase, there is a risk of tissue damage. This equates to 30ma.
  • Stainless steel electrodes are damadged by days of in vivo stimulation -- metal ions are lost.
  • STN neurons spontaneously oscillate due to leak Ca currents and C-activated K channels.
  • STN DBS seems to disrupt abnormal synchronized activity recorded in the BG-thalamocortical loops in PD. (meta-analysis of several studies).
  • STN DBS seems to reduce FR in the SNr.
  • STN excitotoxic leasion in rats causes increased impulsivity, impaired accuracy, premature responses, and more attention to food reward location in rats.
    • There is a hyperdirect pathway from the medial prefrontal cortex to the STN; breaking this decreases attention and perseverance.
    • STN HFS sometimes induces impulsive behavior in humans, with which this is consistent. (This may be sequelae from levodopa treatment).
    • STN HFS often causes weight gain in patients. But it might be because they can eat more or are more 'motivated at life'.
    • Controlled studies in rats show that STN lesion does not effect quantity consumed, either food, ehanol, or cocaine.
      • Differential effect when the reward was food vs. cocaine -- the STN may modulate the reward system based on the nature of the reward.
  • Huh: HFS of the ZI (zona incerta) has been reported to be superior to STN HFS for improving contralateral parkinsonism in PD patients.
    • Could be current diffusion into the STN, however, as lesioning this structure in rats has less effect than lesioning STN.
    • See also {1098}.
  • Chronic GPi DBS does not allow reducing L-DOPA dosage, unlike STN stimulation, but it is a good treatment for dyskinesia.
  • VIM treatment is very effective for tremor, but it does not treat the other motor symptoms of PD. Furthermore, it wears off after a few years.
    • CM/Pf seems like an even better target (Center median / parafasicular complex of the thalamus -- see {1119}.
  • DBS in the PPN (pedunculo pontine nucleus, brainstem target of the BG) at 10 HZ induces a feeling of well-being , concomitant with a modest improvement in motor function; no effect at 80 Hz.
  • Dystonia: GPi is a efficacious target for DBS.
    • Full effect takes a year (!), suggesting that the effect is through reorganization of the BG / neuroplascticity.
  • ET : lesions of the VIM, STN, or cerebellum can reduce symptoms. DBS of the VIM, STN, or ZI all have been found effective.
  • Huntington's disease involves degeneration of the projection neurons from the caudate and putamen.
    • HD affects motor, cognitive, and psychiatric functioning.
  • Drug addiction: inactivating the Nucelus accumbens (NAc) may reduce motivation to obtain the drug, but it may also reduce the motivation to do anything (apathy).
  • GPi DBS also a target for reducing chorea.
  • STN DBS may worsen treatment-resistant-depression; this seen in an animal model, and anecdotally in humans with PD.
  • OCD can be treated with DBS through the internal capsule extending toward the NAc / ventral striatum.
    • side effects include hypomania or anxiety.
    • Alas there is no satisfactory animal model of OCD, which hampers research.


[0] Gubellini P, Salin P, Kerkerian-Le Goff L, Baunez C, Deep brain stimulation in neurological diseases and experimental models: from molecule to complex behavior.Prog Neurobiol 89:1, 79-123 (2009 Sep)

hide / / print
ref: -0 tags: DBS basal ganglia paradoxical kinesis reaction time date: 02-21-2012 19:52 gmt revision:1 [0] [head]

PMID-16758482 "Paradoxical kinesis" is not a hallmark of Parkinson's disease but a general property of the motor system.

  • Paradoxical kinesis is the idea that PD patients will suddenly spring to movement when propted by an extreme situation.
  • "Results showed that external cues and urgent conditions decreased movement duration (Urgent External Cue < External Cue < Self Generated) and reaction time (Urgent External Cue < External Cue)"
  • Results indicate that there is no difference in speed or reaction time improvement between controls and PD patients; it is a general property of the motor system.

hide / / print
ref: -0 tags: Seymour thesis electrode lithography fabrication date: 02-05-2012 17:35 gmt revision:4 [3] [2] [1] [0] [head]

Advanced polymer-based microfabricated neural probes using biologically driven designs.

  • References {1109}
  • Thermal noise from 280 um^2 or 170 um^2 gold recording sites much higher than PEDOT coated sites.
  • Used an interdigitated contact-free probe for measuring insulation impedance change. Very smart!
    • Water molecules will diffuse 15 um / minute in parylene (Yasuda, Yu et. al 2010).
    • In the frequency range critical for neural recording and stimulation, 500-5k, impedance moculus decline was small.
    • 1 hr soak at 60C.
  • Chapter 3 details 60-day soak of Parylene-C + reactive parylene insulation performance testing.
    • Regular parylene seems to work perfectly fine, no better than the PPX heat-treated devices.
    • Heat treatment does improve quality -- 200C in a vacuum oven for 2 days. (Li, Rodger et al 2005)
      • However -- this increases the brittleness.

hide / / print
ref: Song-2009.08 tags: wireless neural recording RF Brown laser optical Donoghue date: 01-15-2012 00:58 gmt revision:6 [5] [4] [3] [2] [1] [0] [head]

IEEE-5067358 (pdf) Wireless, Ultra Low Power, Broadband Neural Recording Microsystem

  • 16 channels.
  • Use a VCSEL (vertical cavity surface emission laser) to transmit data through the skin.
  • Nice design, and they claim to have made recordings for 1 month already.
  • One PCB, kapton substrate reinforced with alumina where needed.
  • Custom 12mW neural amplifier.


Song, Y.-K. and Borton, D.A. and Park, S. and Patterson, W.R. and Bull, C.W. and Laiwalla, F. and Mislow, J. and Simeral, J.D. and Donoghue, J.P. and Nurmikko, A.V. Active Microelectronic Neurosensor Arrays for Implantable Brain Communication Interfaces Neural Systems and Rehabilitation Engineering, IEEE Transactions on 17 4 339 -345 (2009)

hide / / print
ref: Zacksenhouse-2007.07 tags: Zacksenhouse 2007 Odoherty Nicolelis cortical adaptation BMI date: 01-06-2012 03:10 gmt revision:3 [2] [1] [0] [head]

PMID-17637835[0] Cortical modulations increase in early sessions with brain-machine interface.

  • "we demonstrate that the modulations of the firing-rates of cortical neurons increased abruptly after the monkeys started operating the BMI"
    • My hypothesis: is this like LMAN? Injection of noise for the purpose of exploration?
    • Their hypothesis: we are listening to the noise or effect of increased processing / congnitive load.
    • Alternative: decreased feedback / scrabled feedback makes the individual control signals themselves less controlled.
  • Describes spikes as inhomogeneous poisson processes, and breaks things down thusly.
  • Also develop a parametric model of neuronal firing based on tuning to movement, including velocity and acceleration.
  • Fano factor of recorded neurons increased during BCWH & BCWOH.
  • Percent overall modulation (POM) higher in brain control. That is, the variance explained not by the inhomogeneous poisson process, but rather by firing rate variations.
    • "[T]he ensemble-POM increased mainly due to an increase in the variance of the spike-count, which was not matched by the change in the mean spike-count."
  • Figure 6 is pretty convincing, actually.
  • PVM (percent velocity modulation) correlates strongly with POM, but with a fractional slope, indicating that veolocity tuning accounts for only a fraction of the variance.
    • "Since the increase in POM was not matched by increasing PVM or PKM, the higher neuronal rate modulations observed during brain control cannot be explained only by increased modulations due to the kinematics of the movement."


[0] Zacksenhouse M, Lebedev MA, Carmena JM, O'Doherty JE, Henriquez C, Nicolelis MA, Cortical modulations increase in early sessions with brain-machine interface.PLoS One 2:7, e619 (2007 Jul 18)

hide / / print
ref: Goldstein-1973.07 tags: Salcman microelectrodes bucking analysis stiffness youngs modulus mechanical MEA date: 01-04-2012 01:22 gmt revision:4 [3] [2] [1] [0] [head]

IEEE-4120642 (pdf) Mechanical Factors in the Design of Chronic Recording Intracortical Microelectrodes


Goldstein, Seth R. and Salcman, Michael Mechanical Factors in the Design of Chronic Recording Intracortical Microelectrodes Biomedical Engineering, IEEE Transactions on BME-20 4 260 -269 (1973)

hide / / print
ref: Fritsch-1870 tags: Fritsch Hitzig 1870 electrical stimulation date: 01-03-2012 23:31 gmt revision:2 [1] [0] [head]

PMID-19457461[0] Electric excitability of the cerebrum (Uber die elektrische Erregbarkeit des Grosshirns).

  • Seemingly the first successful demonstration of ICMS (or just ICS). A step forward from the vivisectionists and the people who cauterized the cortex with potash.
  • Obtained contralateral movements by bipolar stimulation to the anterior half of a dogs cerebral cortex.
  • Used quite primitive technology (e.g. cardboard cell battery), but not at all primitive reasoning and care with the experiment.
  • may have been inducing small seizures with their DC stimulation: "Frequently tonic contractions of the muscle masses involved appear, which only subside in their intensity after a long time." The translator later calls this 'tetanization'.
  • On brain death: 'It is the fact that with exsanguination the excitability of the brain sinks with enormous rapidity, and is almost extinguished even before death.' meanwhile, muscles and (peripheral) nerves react fine after death.
  • Were not able to stimulate the striatum with insulated electrodes.
  • Survival surgeries -- after extirpation of forelim M1, the dogs recovered, though exhibited weakness in contralateral side. This weakness eventually went away, though "... they clearly had only a deficient consciousness of the conditions of this limb. "


[0] Fritsch G, Hitzig E, Electric excitability of the cerebrum (Uber die elektrische Erregbarkeit des Grosshirns).Epilepsy Behav 15:2, 123-30 (2009 Jun)

hide / / print
ref: MolinaLuna-2007.03 tags: ICMS microstimulation cortical thin-film electrodes histology MEA date: 01-03-2012 22:54 gmt revision:2 [1] [0] [head]

PMID-17178423[0] Cortical stimulation mapping using epidurally implanted thin-film microelectrode arrays.

  • they claim that thin-film electrodes are better than microelectrode arrays, as they show less evidence of cortical damage.
    • thin-film electrodes show higher reproducability
    • more accurate spatial arrangement.
  • epidural stimulation (they were implanted between the dura and skull)


[0] Molina-Luna K, Buitrago MM, Hertler B, Schubring M, Haiss F, Nisch W, Schulz JB, Luft AR, Cortical stimulation mapping using epidurally implanted thin-film microelectrode arrays.J Neurosci Methods 161:1, 118-25 (2007 Mar 30)

hide / / print
ref: Bures-1968 tags: inferior colliculus stimulation classical conditioning plasticity hebb Bures date: 01-03-2012 07:08 gmt revision:5 [4] [3] [2] [1] [0] [head]

bibtex:Bures-1968 Plastic changes of unit activity based on reinforcing properties of extracellular stimulation of single neurons

  • images/972_1.pdf
  • Trained neurons to respond to auditory stimuli throughout the brain (though mostly the IC) to a auditory tone.
    • Hebb's rule, verified.
  • Yoshii & Ogura (22): Reticular units, originally not responding to sciatic nerve US, started to respond to the CS after a few tens of trials, however the conditioned reactions disappeared with continued training.
    • This must be regarded as response to arousal at the initial stages of classical aversive (sciatic nerve pain?) conditioning.
  • Used capilary electrodes 1um in diameter, filled with KCl or sodium glutamate
  • Stimulation current 10-50nA DC, 0.3-1 sec.
  • Were able to record and stimulate at the same time using these glass microelectrodes.
  • The majority of units (cortex, reticular formation, thalamus) showed no response, though some did. These responses tended to fade with overtraining.
  • Quote: "The rather low incidence of positive results int he above experiment might be due to the fact that many examined neurons lack even an indirect acoustic input and cannot, therefore, be activated by acoustic stimuli."
  • Neurons in the IC show the strongest plastic change.
  • Their study is more specific than Loucks (15), Olds and Milner (17) Delgaso (6) Doty(7) which used less specific ICMS.
  • That said, there is no behavior .. so we don't know if the stimuli is being reacted to or attended to (might explain the low # of responses in areas).
  • They also think that the response can be credited to nonspecific phenomena like dominant focus, reflex sensitization, or heterosynaptic facilitation.
    • That said, the IC did show strong responses.

hide / / print
ref: Kennedy-1989.09 tags: Kennedy neurotrophic electrode recording fabrication 1989 electrophysiology date: 01-03-2012 03:21 gmt revision:2 [1] [0] [head]

PMID-2796391[0] The cone electrode: a long-term electrode that records from neurites grown onto its recording surface.

  • A piece of the sciatic nerve is placed in the glass cone before implantation in the cortex of a rat.
  • A neurite can be an axon or dendrite.


[0] Kennedy PR, The cone electrode: a long-term electrode that records from neurites grown onto its recording surface.J Neurosci Methods 29:3, 181-93 (1989 Sep)

hide / / print
ref: -0 tags: LDA myopen linear discriminant analysis classification date: 01-03-2012 02:36 gmt revision:2 [1] [0] [head]

How does LDA (Linear discriminant analysis) work?

It works by projecting data points onto a series of planes, one per class of output, and then deciding based which projection plane is the largest.

Below, to the left is a top-view of this projection with 9 different classes of 2D data each in a different color. Right is a size 3D view of the projection - note the surfaces seem to form a parabola.

Here is the matlab code that computes the LDA (from myopen's ceven

% TrainData and TrainClass are inputs, column major here.
% (observations on columns)
N = size(TrainData,1);
Ptrain = size(TrainData,2);
Ptest = size(TestData,2);

% add a bit of interpolating noise to the data.
sc = std(TrainData(:)); 
TrainData =  TrainData + sc./1000.*randn(size(TrainData));

K = max(TrainClass); % number of classes.

%%-- Compute the means and the pooled covariance matrix --%%
C = zeros(N,N);
for l = 1:K;
	idx = find(TrainClass==l);
		% measure the mean per class
	Mi(:,l) = mean(TrainData(:,idx)')';
		% sum all covariance matrices per class
	C = C + cov((TrainData(:,idx)-Mi(:,l)*ones(1,length(idx)))');

C = C./K; % turn sum into average covariance matrix
Pphi = 1/K;
Cinv = inv(C);

%%-- Compute the LDA weights --%%
for i = 1:K
	Wg(:,i) = Cinv*Mi(:,i);
		% this is the slope of the plane
	Cg(:,i) = -1/2*Mi(:,i)'*Cinv*Mi(:,i) + log(Pphi)';
		% and this, the origin-intersect.

%%-- Compute the decision functions --%%
Atr = TrainData'*Wg + ones(Ptrain,1)*Cg;
	% see - just a simple linear function! 
Ate = TestData'*Wg + ones(Ptest,1)*Cg;

errtr = 0;
AAtr = compet(Atr');
	% this compet function returns a sparse matrix with a 1
	% in the position of the largest element per row. 
	% convert to indices with vec2ind, below. 
TrainPredict = vec2ind(AAtr);
errtr = errtr + sum(sum(abs(AAtr-ind2vec(TrainClass))))/2;
netr = errtr/Ptrain;
PeTrain = 1-netr;

hide / / print
ref: OLDS-1954.12 tags: Olds Milner operant conditioning electrical reinforcement wireheading BMI date: 12-29-2011 05:09 gmt revision:5 [4] [3] [2] [1] [0] [head]

PMID-13233369[0] Positive reinforcement produced by electrical stimulation of septal area and other regions of rat brain.

  • The original electrical reinforcement experiment!
  • tested out various areas for reinforcement; septal forebrain area was the best.
  • later work: 1956 Olds, J. Runway and maze behavior controlled by basomedial forebrain stimulation in the rat. J. Comp. Physiol. Psychol. 49:507-12.


[0] OLDS J, MILNER P, Positive reinforcement produced by electrical stimulation of septal area and other regions of rat brain.J Comp Physiol Psychol 47:6, 419-27 (1954 Dec)

hide / / print
ref: Tehovnik-2006.08 tags: ICMS cortical microstimulation pyramidal neurons date: 12-20-2011 06:08 gmt revision:1 [0] [head]

PMID-16835359[0] Direct and indirect activation of cortical neurons by electrical microstimulation.

  • looked at ICMS via single-cell recording, behavior, and fMRI.
  • These properties suggested that microstimulation activates the most excitable elements in cortex, that is, by and large the fibers of the pyramidal cells.
    • this is a useful result to perhaps reference..


[0] Tehovnik EJ, Tolias AS, Sultan F, Slocum WM, Logothetis NK, Direct and indirect activation of cortical neurons by electrical microstimulation.J Neurophysiol 96:2, 512-21 (2006 Aug)

hide / / print
ref: -0 tags: optical illusion date: 12-04-2011 16:54 gmt revision:1 [0] [head]

-- So cool! How do you come up with something like this?

hide / / print
ref: -0 tags: story falls lake journal mexican coincidence date: 08-18-2011 17:32 gmt revision:2 [1] [0] [head]

I'm an avid open-water swimmer, and other than the quarry and beach, I spend many fridays hoping the water in Falls lake is not too choppy. If it's glassy and smooth (and even sometimes when it's not), I can fall into the hypnotic 4/4 chug of stroke-stroke-stroke-breathe, stroke-str ... not hard, since the brown water is featureless, and the above-water scenery doesn't change much either.

Several years ago I was out on Falls lake doing my thing, comfortably clear in the middle of the lake, heading back to the beach. In my unawareness I failed to notice that a thunderstorm had grown in the hot summer afternoon. Normally I'm rather debonaire about these things, but have been in places just before they were struck by lightning, and this felt a little like that.

So, SOL Tim starts considering the rather limited options (god) (hold breath for as long as possible) (are they the same?). Just then, some Mexican guy on a kayak comes paddling out of ... nowhere ... and asks me if I need help. I bearhug the back of his boat and we get back to shore before the storm breaks. .... Another friday, another season and I set off with a friend clear across Falls lake, which is far, like 3mi round trip. I chat with a Mexican dude before we launch the ships; i guess he seems a bit familiar, but I'm too nervous, eager, and worrying about the thoughts/abilities of my friend to think much. That swim goes fine, minus all the damned speadboats and the ravenous hunger that sets in afterward.

Yesterday I had intended to swim at a pool, but some toddling kid chose to contaminate it, and so back to Falls Lake. It's choppy and hard to swim, and I don't make it as far as intended; again before launching, I meet a Mexican dude, and he asks me if I'm crossing the lake again. I tell him no, not enough time; the water envelops, and I'm back in the swim coma, gone to the point when I get back the sun is down and the moon has risen.

Surprisingly, when I get back the Mexican guy and his family are still there, slowly cleaning up BBQ debris by the light of highbeams and one crappy flashlight. It's cool and peaceful on the lake, but they probably should have left half an hour ago; as I go to the restroom to change, I wave to the guy and realize two things simultaneously: (1) fuck, it's been the same guy, (2) he may have delayed departure, gracefully and surreptitiously, until I was back. Curiosity makes me want to ask if he had, to see if coincidence licked me again, but that's not right; I did't.

hide / / print
ref: work-0 tags: kicadocaml zbuffer comparison picture screenshot date: 03-03-2010 16:38 gmt revision:4 [3] [2] [1] [0] [head]

Simple illustration of Kicadocaml with Z buffering enabled:

and disabled:

I normally use it with Z buffering enabled, but turn it off if, say, I want to clearly see all the track intersections, especially co-linear tracks or zero length tracks. (Probably I should write something to merge and remove these automatically.) Note that in either case, tracks and modules are rendered back-to-front, which effects a Z-sorting of sorts; it is the GPUs Z buffer that is enabled/disabled here.

hide / / print
ref: -0 tags: kicadocaml screenshot picture date: 03-03-2010 05:53 gmt revision:2 [1] [0] [head]

Aint she pretty?

More shots of the completed board (click for full resolution image):

  • whole thing, all layers.

  • Just the headstage, top and inner layer 2 only

  • Just the headstage, bottom and inner layers 2, 3 and 4.

hide / / print
ref: -0 tags: Vanity Fair American dream control theory in politics and society date: 05-03-2009 17:11 gmt revision:3 [2] [1] [0] [head]

Rethinking the American Dream by David Kamp

  • check out the lights in the frame at the bottom, and the kid taking a picture center-right (image courtesy of Kodak, hence.)

  • (quote:) "Still, we need to challenge some of the middle-class orthodoxies that have brought us to this point—not least the notion, widely promulgated throughout popular culture, that the middle class itself is a soul-suffocating dead end."
    • Perhaps they should teach expectations management in school? Sure, middle class should never die - I hope it will grow.
  • And yet, this is still rather depressive - we all want things to continuously, exponentially get better. I actually think this is almost possible, we just need to reason carefully about how this could happen: what changes in manufacturing, consumption, energy generation, transportation, and social organization would gradually effect widespread improvement.
    • Some time in individual lives (my own included!) is squandered in pursuit of the small pleasures which would be better used for purposeful endeavor. Seems we need to resurrect the idea of sacrifice towards the future (and it seems this meme itself is increasingly popular).
  • Realistically: nothing is for free; we are probably only enjoying this more recent economic boom because energy (and i mean oil, gas, coal, hydro, nuclear etc), which drives almost everything in society, is really cheap. If we can keep it this cheap, or make it cheaper through judicious investment in new technologies (and perhaps serendipity), then our standard of living can increase. That is not to say that it will - we need to put the caloric input to the economy to good use.
    • Currently our best system for enacting a general goal of efficiency is market-based capitalism. Now, the problem is that this is an inherently unstable system: there will be cheaters e.g. people who repackage crap mortgages as safe securities, companies who put lead paint on children's toys, companies who make unsafe products - and the capitalistic system, in and of itself, is imperfect at regulating these cheaters (*). Bureaucracy may not be the most efficient use of money or people's lives, but again it seems to be the best system for regulating/auditing cheaters. Examined from a control feedback point-of-view, bureaucracy 'tries' to control axes which pure capitalism does not directly address.
    • (*) Or is it? The largest problem with using consumer (or, more generally, individual) choice as the path to audit & evaluate production is that there is a large information gradient or knowledge difference between producers and consumers. It is the great (white?) hope of the internet generation that we can reduce this gradient, democratize information, and have everyone making better choices.
      • In this way, I'm very optimistic that things will get continuously better. (But recall that optimality-seeking requires time/money/energy - it ain't going to be free, and it certainly is not going to be 'natural'. Alternately, unstable-equilibrium-maintaining (servoing! auditing!) requires energy; democracy's big trick is that it takes advantage of a normal human behavior, bitching, as the feedstock. )
  • Finally (quote:) "I’m no champion of downward mobility, but the time has come to consider the idea of simple continuity: the perpetuation of a contented, sustainable middle-class way of life, where the standard of living remains happily constant from one generation to the next. "
    • Uh, you've had this coming: stick it. You can enjoy 'simple continuity'. My life is going to get better (or at least my life is going to change and be interesting/fun), and I expect the same for everybody else that I know. See logic above, and homoiconic's optimism

hide / / print
ref: Oskoei-2008.08 tags: EMG pattern analysis classification neural network date: 04-07-2009 21:10 gmt revision:2 [1] [0] [head]

  • EMG pattern analysis and classification by Neural Network
    • 1989!
    • short, simple paper. showed that 20 patterns can accurately be decoded with a backprop-trained neural network.
  • PMID-18632358 Support vector machine-based classification scheme for myoelectric control applied to upper limb.
    • myoelectric discrimination with SVM running on features in both the time and frequency domain.
    • a survace MES (myoelectric sensor) is formed via the superposition of individual action potentials generated by irregular discharges of active motor units in a muscle fiber. It's amplitude, variance, energy, and frequency vary depending on contration level.
    • Time domain features:
      • Mean absolute value (MAV)
      • root mean square (RMS)
      • waveform length (WL)
      • variance
      • zero crossings (ZC)
      • slope sign changes (SSC)
      • William amplitude.
    • Frequency domain features:
      • power spectrum
      • autoregressive coefficients order 2 and 6
      • mean signal frequency
      • median signal frequency
      • good performance with just RMS + AR2 for 50 or 100ms segments. Used a SVM with a RBF kernel.
      • looks like you can just get away with time-domain metrics!!

hide / / print
ref: notes-0 tags: triangulation kicadocaml date: 02-04-2009 21:40 gmt revision:7 [6] [5] [4] [3] [2] [1] [head]

PCB copper zones using triangle meshes


Many tasks in computer-assisted design involve the removal of polygons from other polygons. Particularly, this problem is found when filling a region of a printed circuit board (PCB) with a polygonal zone or 'pour' of copper. This zone is attached to a net, perhaps ground, and hence other tracks, vias, and segments of copper not on the same net but within its region must be avoided by a clearance distance. This clearance can be observed by subtraction of expanded polygons from the original zone's outline polygon, as is done in two open-source PCB design softwares, Kicad and gEDA. Here we present a fast and scalable algorithm that works with triangles instead of polygons. The algorithm is able to mesh, add edges, and remove conflicting triangles within a few seconds for problems involving 10,000 points.


I have contributed, infrequently, to the open-source electronic design automation (EDA) suite Kicad for the past year or so. November/December of 2007 I added duplicated hierarchal support to Kicad's schematic editor, eeschema, which allows, like many commercial packages, duplicate instances of sub-schematics. This feature is used when a segment of circuitry is duplicated multiple times in a design, perhaps when there are multiple identical channels, e.g. in an audio mixer.

However pcbnew (the layout editor in Kicad) is unaware of the duplication, hence for each sub-schematic the layout had to be duplicated. This involved a lot of work for the 8-channel microstimulator board that I was working on at the time, so I decided to implement a small application to help layout an array of duplicated circuitry. Ocaml was chosen to implement the software, as I wanted to learn the language. In the course of working on PCBs, learning Ocaml, and basically scratching a series of itches, the software, tentatively named "Kicadocaml", has become progressively more feature-rich, useful, and tested. It has ratsnest, DRC online and offline checking, push routing, schematic hierarchy comprehension (of course), connectivity testing, bill-of-materials generation, and a responsive OpenGL-based GUI.

In my last board, pcbnew failed to fill all the zones; I'm not sure why. I tried to fix the bug, but got lazy/overwhelmed after a while, and decided to just write a zone-filling algorithm from scratch myself (to scratch the itch, so to speak). Sure it's reinventing the wheel, but reinventing is fun. In the interest of documenting the algorithm a bit for posterity, the algorithm is described below.


A list is made of all points and segments that may be involved in the zone-fill. This includes, of course, the edges of the zone, as well as the outline of any track/via/pad cutout within the zone (and not of the same net number), expanded to allow for zone clearance and zone-edge stroking. The list of points also must include any intersections between segments. For efficiency, the lists of points and segments are culled by checking each polygon to be subtracted to make sure that at least one of it's points is within the zone polygon; this is done via the standard inside/outside polygon test.

The list of points is then incrementally inserted into a linked triangle mesh via a very simple, very effective method of triangle splitting and edge-flipping. Linked triangle mesh means that each triangle stores a index (or pointer) to the triangle off each of its three edges. This is to facilitate the insertion of points: to find the triangle that a point is in, you walk over the linked mesh, crossing the edge between triangles that intersects a ray from the center of the present triangle to the target point. (Given the ordering of points within the list, this can be nearly a constant-time operation). See below.

  • Figure 1: Method of finding the triangle which contains a point. The highlighted triangle indicates the working triangle (in practice, this is an index to an array), and n is a point within that triangle (in my implementation, I chose to simply average the 3 corners of the triangle to get an interior point). p is the target point. In each iteration, each segment of the working triangle is checked to see if it intersects with the line np ; if it does, then the working triangle index is updated with the index of the triangle off the intersected edge. This continues until p is within the working triangle. The working triangle index is cached between calls of this iterative algorithm, as usually sequential calls involve points that are close.

Once a triangle is found, it is split into three triangles by the addition of the point. Then, each pair of triangles, one new and one old (bordering the triangle that was split) is checked to see if flipping the interior segment would increase the smallest angle. Remarkably, this reliably takes care of edge insertion - no specialized edge insertion routine was required (however, loops in the find triangle algorithm (figure 1) must be eliminated for a triangle to be found when a point is on an edge). I decided to simply maximize the minimum angle in each triangle, rather than observe the Delaunay criteria which doesn't matter for this application.

  • Figure 2: Point insertion method. After triangle ABC is split into ABP, BCP, and CAP, each pair (BFC & BCP ; CDA & CAP ; AEB & ABP) is check to see if flipping the internal segment would make the minimum internal angle between the two larger. For example, here the minimum internal angle of triangles BFP & FCP was found to be less than BFC & BCP. Indeed, all new triangles were 'flipped' in this example. Care must be taken to maintain the integrity of the linked mesh when inserting and flipping triangles - with extra caution to the fact that it is dual-linked (to and from a given triangle).

This algorithm only deals with finding containing triangles and inserting points; hence, it must be seeded with at least one triangle which will contain all others. I chose to use two triangles defined by a slightly-enlarged bounding box of all points to be inserted.

The algorithm does not insure that all polygon segments are in the list of edges of a mesh; hence, after all points are inserted, every edge is checked to make sure if it is in the mesh -- see figure 3.

  • Figure 3: Adding segment AB to the mesh. First, the segment is checked to see if it - or a sub-segment (via a parallel test), is already in the mesh. If not, a working triangle index is found that has endpoint B as a vertex. The angle between the associated edges and AB are measured; if the angle is greater, the triangle off the CCW edge becomes the working triangle (e.g. 1); if less, the triangle off the CW edge becomes the working triangle; if AB is between the two associated triangle edges, then the intersection point with the far edge is found (2). These calculations are simplified by the fact that all triangles are CCW. The intersection point is inserted into the mesh, and the segment is made shorter - the newly inserted point becomes end B of the segment, and the algorithm recurses. Note, as in 5, when inserting points the flipping rule still holds; as a result of this, all edges must be checked twice, the second time without flipping, to be certain that all edges are in the mesh. As with the triangle finding algorithm, segment checking/adding is relatively efficient with the linked-mesh data structure.

Once all points and all edges from the original list are in the mesh, then each triangle may be tested to see if it should be kept or removed. In kicadocaml this is done with DRC (design rule check) testing.

  • Figure 4: Final result, after conflicting triangles are removed. Original polygon edges are shown in light gray.


The algorithm runs well; it takes ~ 2 seconds to mesh, edge check, and filter 10,000 points on my Core2 2.4Ghz desktop computer. Though it was written in a higher-level language (about 600 lines of Ocaml), I do not think that it would be hard to port to C++ for inclusion in other PCB layout packages. Great effort was not necessarily put into the design of the algorithm, but rather the numerical stability of it's sub-components, such as the triangle inside-outside check (computed with the cross product), and the segment intersection test. For these, please see the source, or {661}.

hide / / print
ref: -0 tags: computational geometry triangulation ocaml kicadocaml zone fill edge date: 01-26-2009 01:47 gmt revision:3 [2] [1] [0] [head]

I have been working hard to add zone support to kicadocaml since the implementation in kicad's PCBnew is somewhat borken (at least for my boards). It is not a very easy task!

Roughly, the task is this: given a zone of copper pour, perhaps attached to the ground net, and a series of tracks, vias, and pads also on that layer of the PCB but not on the same net, form cutouts in the zone so that there is an even spacing between the tracks/vias and zone.

Currently I'm attacking the problem using triangles (not polygons like the other PCB softwares). I chose triangles since I'm using OpenGL to display the PCB, and triangles are a very native mode of drawing in OpenGL. Points are added to the triangle mesh with an incremental algorithm, where the triangles are stored as a linked-mesh : each triangle has a pointer (index#) to the triangle off edge ab,bc,ca. This allows finding the containing triangle when inserting a point a matter of jumping between triangles; since many of the points to be inserted are close to eachother, this is a relatively efficient algorithm. Once the triangle containing a point to be inserted is found, the triangle is split into three, the pointers are updated appropriately, and each triangle is tested to see if flipping with it's pair would result in a net larger smallest interior angle between the two. (This is not the same as Delaunay's criteria, but it is simpler, and it produces equally beautiful pictures.)

The problem is when two triangles are allowed to overlap or a gap is allowed - this makes the search algorithm die or get into a loop, and is a major major problem of the approach. In Guibas and Stolfi's paper, "Primitives for the manipulation of general subdivisions and the computation of Voronoi diagrams", they use an edge data structure, rather than a triangle data structure, which I suppose avoids this problem. I was lazy when starting this project, and chose the more obvious triangle-centric way of storing the data.

The insertion of points is actually not so hard; the big problem is making sure the edges in the original list of polygons are represented in the list of edges in the triangle mesh. Otherwise, triangles will span edges, which will result in DRC violations (e.g.g copper too close to vias). My inefficient way of doing this is to calculate, for all triangles, their intersections with the polygon segments, then adding this to the mesh until all segments are represented in the list. This process, too, is prone to numerical instability.

Perhaps the solution is to move back to an edge-centric data representation, so that certain edges can be 'pinned' or frozen, and hence they are guaranteed to be in the triangle mesh's edge list. I don't know; need to think about this more.

Update: I got most of it working; at least the triangulation & making sure the edges are in the triangle mesh are working. Mostly there were issues with numerical precision with narrow / small triangles; I rewrote the inside triangle function to use the cross product, which helped (this seems like the simplest way, and it avoids divisions!):

let insidetri a b c d = 
	cross (sub b a) (sub d a) > 0.0 &&
	cross (sub c b) (sub d b) > 0.0 &&
	cross (sub a c) (sub d c) > 0.0 

as well as the segment-segment intersection algorithm:

let intersect a b c d = 
	(* see if two line segments intersect *)
	(* return the point of intersection too *)
	let ab = sub b a in
	(* a prime is the origin *)
	let bp = length ab in
	let xx = norm ab in
	let yy = (-1.) *. (snd xx) , (fst xx) in
	let project e = 
		(dot (sub e a) xx) , (dot (sub e a) yy)
	let cp = project c in
	let dp = project d in
	let cd = sub dp cp in
	let m = (fst cd) /. (snd cd) in
	let o = (fst cp) -. m *. (snd cp) in
	let e = add (scl ab (o /. bp)) a in
	(* cp and dp must span the x-axis *)
	if ((snd cp) <= 0. && (snd dp) >= 0.) || ((snd cp) >= 0. && (snd dp) <= 0.) then (
		if o >= 0. && o <= bp then ( true, e )
		else ( false, e )
	) else ( false, e )

Everything was very sensitive to ">" vs. ">=" -- all must be correct. All triangles must be CCW, too, for the inside algorithm to work - this requires that points to be inserted close to a triangle edge must be snapped to that edge to avoid any possible CW triangles. (Determining if a triangle is CW or CCW is as simple as measuring the sign of the smallest cross product between two segments). I tried, for a day or so, to include a specialized function to insert points along a triangle's edge, but that turned out not to matter; the normal flipping routine works fine. I also tried inserting auxiliary points to try to break up very small triangles, but that really didn't affect the stability of the algorithm much. It is either correct, or it is not, and my large board was a good test suite. I have, however, seeded the triangularization with a grid of (up to) 20x20 points (this depends on the aspect ratio of the region to be filled - the points are equally spaced in x and y). This adds (max) 800 triangles, but it makes the algorithm more stable - fewer very narrow triangles - and we are working with sets of 10,000 triangles anyway for the large zones of copper.

Some corrections remain to be done regarding removing triangles based on DRC violation and using the linked-mesh of triangles when calculating edge-triangle edge intersection, but that should be relatively minor. Now I have to figure out how to store it in Kicad's ".brd" file format. Kicad uses "Kbool" library for intersection polygons - much faster than my triangle methods (well, it's in C not ocaml) - and generates concave polygons not triangles. Would prefer to do this so that I don't have to re-implement gerber export. (Of course, look at how much I have re-implemented! This was originally a project just to learn ocaml - Well, gotta have some fun :-)

hide / / print
ref: -0 tags: ME270 optical power date: 12-03-2008 22:25 gmt revision:17 [16] [15] [14] [13] [12] [11] [head]

Section 2: Microcontroller & microstepping

As mentioned before, we chose MSP430F5438 100-pin 16 bit microcontroller because it offers sufficient timers and speed for our problem and because we were both familiar with the architecture. Four 16-bit timers are used to control microstepping mirror tilt and pan, since the stepper motors have two phases. The microcontroller only needs to provide digital signals; current is provided through H-bridge drivers in the control board of the mm-150 - the DIPs with heat sinks below.

Opposite sides of the H-bridge are driven via hex inverters; hence, we only have to supply two PWM signals per motor, one per phase. Setting the PWM duty cycle to 50% will set the motor phase current to zero; by vectoring the duty cycle proportional to the sine and cosine of theta, where theta is the orientation of the motor * number of poles of the stepper, you can control microstepping. That, of course, is simplified; in practice, there are many details to contend with, namely:

  • The MSP430 is a 16 bit integer processor; hence, fractional values must be represented as fixed-point numbers. We chose 11-bit fixed point to optimize resolution and prevent overflow.
  • There is no divide. Division can be accomblished via bit-shifts (which is equivalent to dividing by 2), and addition.
  • There is one 16*16 -> 32 bit multiplier used as a peripheral in the MSP430 architecture, but the standard C library does not access it properly for our fixed-point math.
  • We have to approximate sine and cosine using fixed-point math, since the standard C library Sin and cos each take more than 2500 cycles -- too long when the microcontroller is only running at 12Mhz, and we want to update 4 microstepping phases at ~ 40Khz.

{646} hide/ /

We approximated sine and cosine, needed to vector the stepper motor phase currents, in fixed-point arithmetic first in C on linux - where the results could be plotted in matlab - before converting to MSP430 code. Since the trigonometric functions are repeating, we only need a polynomial approximation of sine from 0 to pi/2. The taylor series for sine is

 sin(x) = x - x^3/3! + x^5/5! - x^7/7! ...
; a quick check in matlab showed that the first three terms are enough to get an accurate approximation in the domain of interest. The MSP430 does not have division, however, so we approximated 1/3! = 1/6 as (1/8 + 1/32 + 1/128) and 1/5! = 1/120 as 1/128; division by powers of two is possible with right bit-shift operations. We chose base 11 (5 bits whole, 11 bits fractional) representation to avoid overflow: if 2^11 -> 1, we need to represent (pi/2)^5 -> 9.5 ; ceil(log_2(9.5)) = 4 (plus one bit for safety). The C program below shows this test.

#include <stdio.h>

char qsin(short i){
       //i goes from  0 pi/2 base 11 or...
       // 0 to 3217
       unsigned int cube, fifth, result;
       cube = (i*i) >> 11;
       cube = (cube*i) >> 11; //max = 7937
       fifth = (cube*i) >> 11;
       fifth = (fifth*i) >> 11; // max = 19585
       //our approximation to sine based on taylor series:
       //original: sin(x) = x - x^3/3! + x^5/5!
       //sin(x) = x - x^3*(1/8+1/32+1/128) + x^5*(1/128)
       result = (unsigned int)i -
               ((cube >> 3) + (cube >> 5) + (cube >> 7)) + (fifth >> 7);
       //result is base 11.  need it to be base 7.
       result = result >> 4;
       if(result > 127) result = 127;
       return (char)result;
//this is tricky, as it involves shifts, x-inversions, and y-inversions. 
//but it all makes sense if you plot out the respective functions. 
char isin(short i){
       // i is base 2^11
       //but we accept 0 to 2*pi or 12867
       if(i >= 0 && i < 3217) return qsin(i);
       else if(i >= 3217 && i < 6434) return qsin(6434 - i);
       else if(i >= 6434 && i < 9651) return -1*qsin(i - 6434);
       else if(i >= 9651 && i < 12867) return -1*qsin(12867 - i);
       else return 0;
char icos(short i){
       // i is base 2^11
       //but we accept 0 to 2*pi or 12867
       if(i >= 0 && i < 3217) return qsin(3217 - i);
       else if(i >= 3217 && i < 6434) return -1*qsin(i - 3217);
       else if(i >= 6434 && i < 9651) return -1*qsin(9651 - i);
       else if(i >= 9651 && i < 12867) return qsin(i - 9651);
       else return 0;

int main(void){
	short i; 
	for(i=0; i<12867; i++){
		printf("%d\t%f\t%d\t%d\n", i, ((float)i)/2048.0, (int)(isin(i)), (int)(icos(i))); 
	return 0; 

We compiled and ran this program on the command line:

 gcc integer_trig.c 
 ./a.out > test.txt

Then we imported the data into matlab and plotted (Actual double floating-point sine and cosine are plotted on the same axis as thin black and magenta lines, respectively)

Later, we had to change the naive standard implementation of multiply to assembly to properly implement the fixed-point arithmetic - the MSP430's standard library did not implement the 16x16 multiply followed by shift correctly (it only keeps the bottom 16 bits). Note: this assembly function is for use with Code-Composer Studio, available from the Texas Instruments website. It seems that the IAR compiler uses different assembly syntax.

            .cdecls C,LIST,"msp430x54x.h"  ; Include device header file

            .text                           ; Progam Start
          ;;.sect "mply_11"
          ;;.asmfunc "mply_11"
                        .global mply_11 ;; this MUST BE PRECEDED BY TABS !!!!!

        PUSH	SR	; 
         DINT		; turn off interrupts here. 
         NOP			; required after DINT
         MOV.W	R12, &MPY ; load the first operand. 
         MOV.W	R13, &OP2 ; load the second operand & start multiplication. 
         MOV.W	&RESLO, R12 ; low to R12 (this is the return value)
         MOV.W	&RESHI, R13 ; high to R13
         RRA.W R12 ; 1
         RRA.W R12 ; 2
         RRA.W R12 ; 3
         RRA.W R12 ; 4 
         RRA.W R12 ; 5
         RRA.W R12 ; 6
         RRA.W R12 ; 7
         RRA.W R12 ; 8
         RRA.W R12 ; 9
         RRA.W R12 ; 10
         RRA.W R12 ; 11
         RLA.W R13 ; 1
         RLA.W R13 ; 2
         RLA.W R13 ; 3
         RLA.W R13 ; 4
         RLA.W R13 ; 5
        ;; r14 can be clobbered across a function call, according to the msp430 ABI
        MOV.W	#0x001f, R14
        AND.W	R14, R12 ; mask off all but the bottom 5 bits from RESLO
         ADD.W	R13, R12 ; add (logical OR) the results. R12 is the 11-bit fixed point result.
         POP.W 	SR	;
         RETA		; return from subroutine.


Note the MSP430 does not have an opcode for multiple arithmetic shifts, nor does it have code for logical shifts - hence the need for repeated shifts and bitmasks!

hide / / print
ref: notes-0 tags: elektralite mm150 optical power light ME270 project date: 12-03-2008 20:39 gmt revision:5 [4] [3] [2] [1] [0] [head]

Section 1 : Reverse-engineering the light, part selection

Rather than engineering our own articulated spotlight, we elected to buy a moving-mirror DJ light; creating our own light source would simply have taken too much time, and demanded optical experience that we lack. After a brief survey, we bought an Elekralite mm150 (moving mirror, 150W bulb) DJ light, one of the cheapest on the market ($650); despite this, it is very well constructed, as you will see below. The light was originally controlled through the stage-specific DMX bus, but the possibility of directly controlling the light through this was discarded after we learned that the resolution on each axis is only 8 bits (+- 127); given the large range of the pan mirror, this is insufficient for tracking. Hence we decided to reverse engineer the light to determine the best way to directly control the mirror and shutter.
  • Overview, with dichroic color filter wheel and globos removed. We ended up putting these back in, as without them the unit does not initialize properly.
  • Another view with the shell taken off. The white ballast on the bottom powers the 150W HMI metal-halide bulb, along with a stabilization capacitor (to the left of the ballast) and starter (below the capacitor). The starter produces 2kV to initially ionize the gas in the bulb; there is no third starter electrode as in mercury vapor bulbs, as this would be a point of stress in the high-pressure (90atm) fused quartz arc tube. The bulb is on whenever the unit is plugged in, and the light output is controlled via the shutter. The top large transformer (+20V, +12V) is used to drive the display/control unit (left center) and the 6 stepper motors in the lamp, which are:
    • mirror tilt
    • mirror pan
    • shutter
    • globo selection
    • globo rotate
    • colorwheel
    • Detail of the breakout board for the 6 stepper motors, with the colorwheel stepper above it. The stepper motors are two-phase, permanent-magnet rotor types; we're not sure of the steps/revolution yet, though they all seem different. The breakout board also has attachments for the hall-effect sensors to detect orientation of the globo and color wheels.
    • The dichroic mirror color wheel. Regular filters would undoubtedly melt here - a pencil put into the beam of the HMI lamp will light on fire!
    • The globo wheel. Each globo is mounted to a gear which engages a center gear on the same axis as this plate. This center gear is driven by the globo rotate stepper motor.
    • Dichroic IR filter. Note that since it is viewed at an angle, the reflective wavelength goes up, and so you can see a slight red tint in the reflections off this. Removed this, since silicon photovoltaic cells respond to near IR energy.
    • Stepper motor controller. The three chips at the bottom are NXP 87LPC768 OTP microcontroller. Each can control two stepper motors, and each has an internal program for self-calibration using either the hall-effect sensors or hard mechanical limits on motor range. Upper chip is for the mirror (U3). These chips are controlled via one high-speed serial bus from the upper control board (the one with the LED display). The six upper chips, with heat-sinks on them, contain dual H-bridges, probably similar to the Allegro A3955 PWM microstepping motor driver. Between them are two standard 74HC04 hex inverters to drive the opposite leg of the h-bridges (each 87LPC768 has four outputs, two per motor, whereas each motor requires four inputs, two per phase. In this way, you can switch the direction of current flow through each motor phase with a single +20v supply rail.)
    • The Elekralite mm150 without the two control boards, globo wheel, or filter wheel. You can see the lamp, focus adjustment screws and reflector. Below the lamp is a 24V radial fan.
    • The Elektralite powered on, with globo and filter wheel back in place. The lamp is very, very bright!
    • Close-up of filter and globo wheels. The shutter has been removed; it fits on the shaft just above the long hex spacer. Just above that is the mechanical hard stop for the shutter.
    • The pin on the main controller that is used to control the 6 stepper axes. We tried probing it for some time, but could not directly figure out the serial protocol without a good logic analyzer (which is at home), so decided to implement our own microstepping PWM controller, and drive the inverters / H-bridges driectly.
    • The shutter, after being used for a good bit. The UV and IR from the lamp (mostly the IR, I think - the shutter gets really hot!) bleaches the black anodization on this bit of aluminum. We've drilled a 1/4" hole in one side to try to get a more tightly-collated beam.
    • The PWM waveform at the motor for the two phases (the glare at the left is from the light, which was of course on!). The other leads in the motor are simply the inverse of these via the 74HC04. For vector control like this, a 50% on/50% off PWM effectively sets the phase current to zero (the motor has sufficient leakage inductance at the 16kHz PWM frequency to keep di/dt low over multiple PWM periods). Hence, to control the motors we need something like:
      phase1 = 0.5*sin(theta) + 0.5 ; phase2 = 0.5*cos(theta) + 0.5
      , where theta is changed based on the control algorithm, and phase is scaled and used to set the PWM counter compare register. See below.
    • Microstepping control scheme based on vector control of current in the two phases of these stepper motors. As before, current will be regulated via PWM @ 16kHz, as the Elektralite engineers do, as opposed to linear current control. To generate the appropriate 6 PWM signals (mirror pan, mirror tilt, and shutter), we used a MSP430 microcontroller with 3 16-bit counters and 5+ capture-compare registers.
    • We used a MSP430F5xxx development board from TI -- see the next section. The device features sufficient timers and PWM outputs to control the stepper motors in the Elekralite. We will control motion of each using a simple up-down toggling via the parallel port to increment/decrement the motor theta variable. The microcontroller will need a look-up table or algorithm for calculating the sines and cosines of rotor angles.
    • small solar cell from Spark Fun Electronics. When placed in the beam of the light, it is possible to generate 500ma short-circuit current and 5V open-circuit voltage, but not at the same time. In a solar cell composed of a series of junctions, such as this, the total current at full voltage is limited by the minimum current from each of the junctions (they are in series!). Therefore to get maximum current you need very uniform illumination, something that is normally not difficult with the sun, but which will be difficult in this application. To avoid this problem we will try to procure higher efficiency single-junction GaAs concentrator cells, which can be up to ~40% efficient (as compared to this one, which is ~15% efficient).

hide / / print
ref: -0 tags: perl xml duplicate entries james date: 11-03-2008 21:48 gmt revision:2 [1] [0] [head]

A friend has many Excel files that he converts to labels for affixing to packages to be shipped. To print the proper number of labels (rather than one label with Qty=20), he needs to duplicate rows in the source excel file based on the Qty column. If you export the excel file to XML, this script should do the trick (you'll have to import the resultant XML):

$narg = $#ARGV + 1; 
if( $narg ne 2 ){
	print "please specify the file to read followed by the file to write on the command line\n"; 
	$source = $ARGV[0]; 
	$dest = $ARGV[1]; 
	local( $/) ;
	$/ = ""; 
	open(FH, "< $source"); 
	open(FHO, "> $dest"); 
	$j = <FH>; #slurp the entire file into one string. 
	# look for the header - 
	if( $j =~ s/(.*?)<Sheet1>/<Sheet1>/s){
		print FHO $1 ; 
	while ($j =~ /(<Sheet1>.*?<\/Sheet1>)/gs ){
		$newl = $1; 
		if( $newl =~ /<Qty>(\d+)<\/Qty>/ ){
			$qty = $1; 
			$newl =~ s/<Qty>\d+<\/Qty>/<Qty>1<\/Qty>/ ; 
			for( $g=0; $g<$qty; $g++){
				print FHO $newl ; 
	print FHO "</dataroot>" ; # assume that the footer is always this 
	close FH; 
	close FHO; 
not very complicated, but worth posting, I guess. More examples on the internet = better ;-) Note that I hard-coded to split on <Sheet1> -- check your XML files!!

hide / / print
ref: Buonomano-1998.01 tags: cortical plasticity learning review LTD LTP date: 10-07-2008 03:27 gmt revision:1 [0] [head]

PMID-9530495[0] Cortical plasticity: from synapses to maps

  • focuses on synaptic plasticity as the underlying mechanism of behavior-dependent cortical maps/representations.
  • "within limits, the cortex can allocate cortical area in a use-dependent manner"
  • synaptic plasticity -> STDP via NMDA, etc.
    • demonstrated with intracellular recordings of cat M1 & simultaneous stimulation of the ventrolateral thalamus & intracellular depolarization. Facilitation was short lasting and not present in all neurons.
    • demonstrated in rat auditory cortex / recording in layer 2/3 , stimulate layer 2/3 & White matter/6.
    • review of Ca+ hypothesis of LTP/LTD balance: if the Ca+ influc is below a threshold, LTD occurs; if it is above a certain threshold, LTP.
      • not sure how long LTD has been demonstrated -- 15 min?
  • cellular conditioning = direct induction of plastic changes in the selective responses of individual neurons in vivo as a result of short-term conditioning protocols. this is what we are interested in, for now.
    • this review does not explicitly deal with BG-DA / ACh reinforcement, only timing dependent plasticity, in visual and auditory cortex.
  • cortical plasticity:
    • talk about the revealing/unmasking of hidden responses when sections of cortex are deafferented or digits were amputated.
    • talk about training-based approaches: training increases cortical representation of a sensory modality / skill/ etc. The cortex can differentially 'allocate' area in a use-dependent manner throughout life.
    • cortical map changes are not reflected by changes in thalamic somatotopy.


hide / / print
ref: Kapogiannis-2008.04 tags: clinical trials PD DBS TMS date: 09-18-2008 02:20 gmt revision:2 [1] [0] [head]

http://www.clinicaltrials.gov/ct2/show/NCT00558766?cond=Parkinson+Disease&rank=4 Salient points:

  • Neurons in the mesencephalon : "Their role in reward processing is thought to be dual: i) they show sustained activity with the expectation of a future reward and ii) a phasic response after reward."
  • Synapse on interneurons and cortical cells (e.g. from the substantia nigra), where they produce primary inhibition.
    • That's interesting .. why would reward cause inhibition?? what models suggest this?
    • Our hypothesis has been that a dopamine reward-related signal would increase the evocable inhibition in primary motor cortex and our findings support this.
  • Check the first exclusion criteria: Pre-menopausal status in women: Preliminary data in healthy, cycling women suggests that the variation in paired-pulse inhibition caused by the menstrual cycle may obscure the change in the response induced by the behavioral task. What? Why?
  • Others have found the same effect: PMID-18371077

hide / / print
ref: notes-0 tags: software debian xpaint maxima math mathematica date: 07-02-2008 14:37 gmt revision:3 [2] [1] [0] [head]

oldies but goodies:

  • Maxima a computer algebra system, almost like a free version of Mathematica!
    • be sure to install maxima-emacs to get LaTeX prettyprinting.
  • [xpaint] Has a cool spring-mass-friction system where the length of the spring (the distance between cursor and paint brush) controls the width of the paint brush. see below!

Both are in Debian of course :)

hide / / print
ref: notes-0 tags: telecommunications FCC wireless regulation government date: 02-26-2008 04:18 gmt revision:2 [1] [0] [head]


  • quote: Further loosening of the regulatory grip would stimulate investment and innovation in high-tech market segments, providing a long-term, sustainable boost for the American economy.
  • exactly! 2.4 Ghz, the 'junk' band, is TOO CROWDED. more open spectrum => more products and services => greater tax revenue (which would be >> revenue gained from stupid, greedy FCC auctions).
    • This revenue is passed onto the consumers. Think about it .. companies pay $20B for wireless, which they must pass on to the consumers, say 100M => an implicit $200 governmental 'tax' on something that should be free and clear. The government should just tax corporations & consumers directly, and not force companies to shoulder huge debts and risks. These debts put a very high bar for entering the competitive field .. which limits competition & technological advance.
  • however ... The author does not want to impose net neutrality. WHAT???? That means that corporations can effectively regulate information consumption. We are not just consumers, Mr. Randolph May.
    • eh.. I guess they already do this, e.g. Fox News. All the more reason to change the system.
    • Provided there is some choice in the marketplace, consumers will be able to reject any offensive limitation imposed by one 'provider', so perhaps it will work.

hide / / print
ref: notes-0 tags: kicad C++ design hierarchy date: 01-18-2008 22:06 gmt revision:1 [0] [head]

hide / / print
ref: bookmark-0 tags: internet communication tax broadband election? date: 11-21-2007 22:18 gmt revision:6 [5] [4] [3] [2] [1] [0] [head]


Consumers also pay high taxes for telecommunication services, averaging about 13 percent on some telecom services, similar to the tax rate on tobacco and alcohol, Mehlman said. One tax on telecom service has remained in place since the 1898 Spanish-American War, when few U.S. residents had telephones, he noted.

"We think it's a mistake to treat telecom like a luxury and tax it like a sin," he said.

from: The internet could run out of capacity in two years


  • I bet this will turn into a great excuse for your next president not to invest on health, but rather on internet. --ana
  • Humm.. I think it is meant to be more of a wake-up call to the backhaul and ISP companies, which own most of the networking capacity (not the government). I imagine there will be some problems, people complain, it gets fixed.. hopefully soon. What is really amazing is the total amount of data the internet is expected to produce - 161 exabytes!! -- tlh
  • They won't upgrade their capacity. After all, the telcos spent a lot of money doing just that in the dot-bomb days. No, instead they will spend their money on technologies and laws that allow them to charge more for certain types of packets or for delivering some packets faster than others. You think it's a coincidence that Google is buying up dark fiber? --jeo

hide / / print
ref: bookmark-0 tags: RonPaul American presidential candidate libertarian date: 10-30-2007 22:38 gmt revision:0 [head]


  • claims that the solution to our problems is to deregulate environmental control - e.g. disempower the EPA, maybe even dissolve it, and allow litigation and property rights to regulate pollution. That is, if a polluter destroys some resource say a river, then another user of same resource will sue them for damages & polluting.
    • This is retarded because it replaces one system (hopefully transparent laws) with another system (wasteful litigation), the latter which will be codified anyway within the legal system. I would argue that it is more efficient to simply fix the original system directly, and eliminate this bureaucracy which he complains. Otherwise, it will take some time for the 'bugs' in the legal, litigation based regulatory system to be eliminated.
      • a centralized authority is arguably more efficient & direct in deciding say which compounds are pollutants and which are not, whereas an iterative, litigation based system may be eventually more accurate but possibly more abstruse & opaque (e.g. you have to look up many many cases to figure out the 'law') and may possibly take more time.
    • Perhaps, though, he is correct on one thing: by making the end users (people subject to pollution) more directly involved, they will have more power, hence 'law' will more directly represent collective interest.
    • My conclusion: the present system includes some end-user litigation; it makes not sense to overhaul it. It only makes sense to tweak the 'coefficients' on the control paths, or possibly add other control paths.
      • however, has anyone proved that collective interest is sufficiently far-sighted, pragmatic, and free from spurious manipulation by the media. This is why we have a republic, I guess.
  • He does not support the Kyoto protocol. not the 'free-market'. well, he is a libertarian after all.
  • He thinks it is a good idea to de-regulate large polluters like coal fired electricity plants; he claims that in a free market economy the costs of a dirtier energy source will be internalized and the consumers will choose the optimal source.
    • This is naive, too. Companies will manipulate those effected by the pollution to make them forget about it, perhaps by simply bribing them. Besides, it makes sense to have a centralized regulator where the expertise, intelligence, and data can be concentrated. But, then again, this system was setup itself by the public (?) which therefore must have some degree of farsight, therefore the public can be responsible for holding companies responsible for selfish, greedy & polluting practices. (I would argue not - the public and/or those farsighted leaders - have set up centralized agencies for offloading the effort of regulation & enforcement.

hide / / print
ref: bookmark-0 tags: bluetooth tutorial specification date: 10-22-2007 16:56 gmt revision:1 [0] [head]


  • has concise details for how the apparently complex bluetooth protocol functions.
Taking a walk inside blutooth EDR
  • bluetooth 1 - 1.2 (1mbps) uses gaussian frequency-shift keying (GFSK), with a frequency deviation of +-160khz
  • bluetooth 2.0 EDR (2mbps) uses pi/4 differential quaternary phase-shift keying (DQPSK). The receiver does not have to know the phase of the transmitter for this. Two bit are transmitted per symbol with this scheme; hence the symbol rate stays the same as bluetooth 1.
  • bluetooth 2 (3mbps) uses 8-differential phase-shift keying to transmit 3 bits / symbol, with the same effective symbol rate. The receiver must know the phase of the transmitter.
  • each of these modulation formats is specified in the packet header, and communication rate is negotiated upon establishing a connection.

hide / / print
ref: notes-0 tags: Blackfin perl loopcounters registers ABI application-binary interface gcc assembly date: 10-19-2007 17:24 gmt revision:2 [1] [0] [head]

The problem: I have an interrupt status routine (ISR) which can interrupt the main, radio-servicing routine at any time. To keep the ISR from corrupting the register values of the main routine while it works, these registers must be pushed, and later popped, to the stack. Now, doing this takes time, so I'd prefer to pop / push as few registers as possible. Namely, I don't want to push/pop the hardware loop registers - LC0 (loop counter 0), LB0 (loop bottom 0, where the hardware loop starts) & LT0 (loop top 0, where the hardware loop ends).

Gcc seems to only touch bank 1, never bank 0, so I don't have to save the 3 regs above. However, to make sure, I've written a perl file to examine the assembled code:

my $file = "decompile.asm"; 
open(FH, $file); 
@j = <FH>; 
my $i=0; 
my @badregs = ("LC0", "LB0", "LT0"); 
foreach $reg (@badregs){
	foreach $k (@j){
		if($k =~ /$reg/){
			print "touch register $reg : $k";
#tell make if we found problems or not.
	exit 1;
	exit 0;

'make' looks at the return value perl outputs, as instructed via the makefile (relevant portion below):

	rm -f *.ldr
	$(LDR) -T BF532 -c headstage.ldr $<
	bfin-elf-objdump -d headstage.dxe > decompile.asm
	perl register_check.pl

if it finds assembly which accesses the 'bad' registers, make fails.

hide / / print
ref: bookmark-0 tags: blackfin ELF freestanding applications boot date: 08-01-2007 14:40 gmt revision:0 [head]


very good, very instructive.

hide / / print
ref: bookmark-0 tags: phase converter gilbert cell analog multiplication RF bipolar transistors phase detector modulator date: 07-23-2007 20:48 gmt revision:0 [head]


hide / / print
ref: notes-0 tags: viscosity fluids Poiseuille kicad date: 05-22-2007 03:33 gmt revision:1 [0] [head]


the source site - http://xtronics.com/ - has a lot of interesting information. The author seems as enamored with Debian as I am. (hence, there is plenty of Debian information there :)

for example, they have a quick reference on kicad: http://xtronics.com/reference/kicad.html

hide / / print
ref: notes-0 tags: kicad footprint generator pcb design date: 05-22-2007 02:51 gmt revision:1 [0] [head]

oh yea!!! nice work mate!!


btw, kicad is the shit - and it is now in Debian!! I love debian! I love kicad!

hide / / print
ref: Walton-2005.02 tags: dopamine anterior cingulate mesocortical date: 02-05-2007 19:19 gmt revision:2 [1] [0] [head]

PMID-15727537 The mesocortical dopamine projection to anterior cingulate cortex plays no role in guiding effort-related decisions.

hide / / print
ref: Vyssotski-2006.02 tags: neurologger neural_recording recording_technology EEG SUA LFP electrical engineering date: 02-05-2007 06:21 gmt revision:6 [5] [4] [3] [2] [1] [0] [head]

PMID-16236777[0] Miniature neurologgers for flying pigeons: multichannel EEG and action and field potentials in combination with GPS recording.

Recording neuronal activity of animals moving through their natural habitat is difficult to achieve by means of conventional radiotelemetry. This illustration shows a new approach, exemplified by a homing pigeon carrying both a small GPS path recorder and a miniaturized action and field potential logger (“neurologger”), the entire assembly weighing maximally 35 g, a load carried easily by a pigeon over a distance of up to 50 km. Before release at a distant location, the devices are activated and store both positional and neuronal activity data during the entire flight. On return to the loft, all data are downloaded and can be analyzed using software for path analysis and electrical brain activity. Thus single unit activity or EEG patterns can be matched to the flight path superimposed on topographical maps. Such neurologgers may also be useful for a variety of studies using unrestrained laboratory animals in different environments or test apparatuses. The prototype on the hand-held pigeon records and stores EEG simultaneously from eight channels up to 47 h, or single unit activity from two channels during 9 h, but the number of channels can be increased without much gain in weight by sandwiching several of these devices. Further miniaturization can be expected. For details, see Vyssotski AL, Serkov AN, Itskov PM, Dell Omo G, Latanov AV, Wolfer DP, and Lipp H-P. Miniature neurologgers for flying pigeons: multichannel EEG and action and field potentials in combination with GPS recording. [1]


hide / / print
ref: Blankertz-2003.06 tags: BMI BCI EEG error classification motor commands Blankertz date: 0-0-2007 0:0 revision:0 [head]

PMID-12899253 Boosting bit rates and error detection for the classification of fast-paced motor commands based on single-trial EEG analysis

  • want to minimize subject training and maximize the major learning load on the computer.
  • task: predict the laterality of imminent left-right hand finger movements in a natural keyboard typing condition. they got ~15bits/minute (in one subject, ~50bits per minute!)
    • used non-oscilatory signals.
  • did a to detect 85% percent of error trials, and limited false-positives to ~2%

hide / / print
ref: Kilgard-1998.03 tags: dopamine basal_forebrain nucleus_basalis cortical_plasticity date: 0-0-2007 0:0 revision:0 [head]

PMID-9497289[0] Cortical map reorganization enabled by nucleus basalis activity

  • idea, very cool: that stimulation in the nucleus basalis (partially acetylcholine-releasing center in the brain) of the rat, when paired with audio tone presentation, causes the auditory cortex to to reorganize so as to better represent the presented stimulus(stimuli). Note the rats were not tasked with anything, and were placed in a soundproofed box.
  • stimulation protocol: 200ms of 70-150ua current delivered to the NB through bipolar platinum stimulation electrodes. current was set at the threshold needed to desynchronize cortical EEG during slow-wave sleep.
    • how ever did they come up with this metric? EEG desynchronizaton?
hide / / print
ref: Stapleton-2006.04 tags: Stapleton Lavine poisson prediction gustatory discrimination statistical_model rats bayes BUGS date: 0-0-2006 0:0 revision:0 [head]



hide / / print
ref: bookmark-0 tags: machine_learning classification entropy information date: 0-0-2006 0:0 revision:0 [head]

http://iridia.ulb.ac.be/~lazy/ -- Lazy Learning.

hide / / print
ref: bookmark-0 tags: neural_recording recording_technology electrical engineering DSP date: 0-0-2006 0:0 revision:0 [head]

hide / / print
ref: bookmark-0 tags: Bayes Baysian_networks probability probabalistic_networks Kalman ICA PCA HMM Dynamic_programming inference learning date: 0-0-2006 0:0 revision:0 [head]

http://www.cs.ubc.ca/~murphyk/Bayes/bnintro.html very, very good! many references, well explained too.