You are not authenticated, login.
text: sort by
tags: modified
type: chronology
{319} is owned by tlh24.{346} is owned by tlh24.
[0] Schwartz AB, Cortical neural prosthetics.Annu Rev Neurosci 27no Issue 487-507 (2004)[1] Carmena JM, Lebedev MA, Henriquez CS, Nicolelis MA, Stable ensemble performance with single-neuron variability during reaching movements in primates.J Neurosci 25:46, 10712-6 (2005 Nov 16)

[0] Brockwell AE, Rojas AL, Kass RE, Recursive bayesian decoding of motor cortical signals by particle filtering.J Neurophysiol 91:4, 1899-907 (2004 Apr)

hide / / print
ref: -0 tags: gtk.css scrollbar resize linux qt5 gtk-3 gtk-4 date: 08-22-2023 20:23 gmt revision:4 [3] [2] [1] [0] [head]

Put this in ~/.config/gtk-3.0/gtk.css and ~/.config/gtk-4.0/gtk.css to make scrollbars larger & permanently visible on high-DPI screens. ref

.scrollbar {
  -GtkScrollbar-has-backward-stepper: 1;
  -GtkScrollbar-has-forward-stepper: 1;
  -GtkRange-slider-width: 16;
  -GtkRange-stepper-size: 16;
scrollbar slider {
    /* Size of the slider */
    min-width: 16px;
    min-height: 16px;
    border-radius: 16px;

    /* Padding around the slider */
    border: 2px solid transparent;

.scrollbar.vertical slider,
scrollbar.vertical slider {
    min-height: 16px;
    min-width: 16px;

scrollbar.horizontal slider {
min-width: 16px;
min-height: 16px;

/* Scrollbar trough squeezes when cursor hovers over it. Disabling that

.scrollbar.vertical.dragging:dir(ltr) {
    margin-left: 0px;

.scrollbar.vertical.dragging:dir(rtl) {
    margin-right: 0px;

.scrollbar.horizontal.slider.dragging {
    margin-top: 0px;
undershoot.top, undershoot.right, undershoot.bottom, undershoot.left { background-image: none; }
undershoot.top, undershoot.right, undershoot.bottom, undershoot.left { background-image: none; }

Also add:

to your ~/.bashrc

This does not work with GTK4, though -- to do that, put the following in ~/.config/gtk-4.0/settings.ini:

gtk-overlay-scrolling = false

To make the scrollbars a bit easier to see in QT5 applications, run qt5ct (after apt-getting it), and add in a new style sheet, /usr/share/qt5ct/qss/scrollbar-simple-backup.qss

/* SCROLLBARS (NOTE: Changing 1 subcontrol means you have to change all of them)*/
  background: palette(alternate-base);
  margin: 0px 0px 0px 0px;
  margin: 0px 0px 0px 0px;
  background: #816891;
  border: 1px solid transparent;
  border-radius: 1px;
QScrollBar::handle:hover, QScrollBar::add-line:hover, QScrollBar::sub-line:hover{
  background: palette(highlight);
subcontrol-origin: none;
QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical{
height: 0px;
QScrollBar::add-line:horizontal, QScrollBar::sub-line:horizontal{
width: 0px;
subcontrol-origin: none;

hide / / print
ref: -2017 tags: V1 V4 visual cortex granger causality date: 03-20-2019 06:00 gmt revision:0 [head]

PMID-28739915 Interactions between feedback and lateral connections in the primary visual cortex

  • Liang H1, Gong X1, Chen M2,3, Yan Y2,3, Li W4,3, Gilbert CD5.
  • Extracellular ephys on V1 and V4 neurons in macaque monkeys trained on a fixation and saccade task.
  • Contour task: monkeys had to select the patch of lines, chosen to stimulate the recorded receptive fields, which had a continuous contour in it (again chosen to elicit a response in the recorded V1 / V4 neurons).
    • Variable length of the contour: 1, 3, 5, 7 bars. First part of analysis: only 7-bar trials.
  • Granger causality (GC) in V1 horizontal connectivity decreased significantly in the 0-30Hz band after taking into account V4 activity. Hence, V4 explains some of the causal activity in V1.
    • This result holds both with contour-contour (e.g. cells both tuned to the contours in V1), contour-background, and background-background.
    • Yet there was a greater change in the contour-BG and BG-contour cells when V4 was taken into account (Granger causality is directional, like KL divergence).
      • This result passes the shuffle test, where tria identities were shuffled.
      • True also when LFP is measured.
      • That said .. even though GC is sensitive to temporal features, might be nice to control with a distant area.
      • See supplementary figures (of which there are a lot) for the controls.
  • Summarily: Feedback from V4 strengthens V1 lateral connections.
  • Then they looked at trials with a variable number of contour bars.
  • V4 seems to have a greater GC influence on background cells relative to contour cells.
  • Using conditional GC, lateral interactions in V1 contribute more to contour integration than V4.
  • Greater GC in correct trials than incorrect trials.

  • Note: differences in firing rate can affect estimation of GC. Hence, some advise using thinning of the spike trains to yield parity.
  • Note: refs for horizontal connections in V1 [7-10, 37]

hide / / print
ref: Bergman-1994.08 tags: subthalamic nucleus STN basal ganglia globus pallidus electrophysiology 1994 MPTP DBS date: 01-26-2012 17:19 gmt revision:3 [2] [1] [0] [head]

PMID-7983515[0] The primate subthalamic nucleus. II. Neuronal activity in the MPTP model of parkinsonism

  • idea: record from STN and GPi before and after MPTP treatment in green monkeys.
  • recorded 4-8hz periodic activity (via autocorrelograms) in significantly more neurons from the MPTP treated animals in both the STN and GPi.
  • mean firing rate was increased in STN,
  • tremor-correlated cells found in both.
  • burst activity higher in both, too.
  • modulations in firing rate due to the application of flexion and extension torque pulses were higher in MPTP animals (duration and amplitude), in both areas.
  • spikes were longer in MPTP
  • no tyrosene hydroxylase activity in the PD mks.
  • PD tremor only frequently occurs in green mks following MPTP


[0] Bergman H, Wichmann T, Karmon B, DeLong MR, The primate subthalamic nucleus. II. Neuronal activity in the MPTP model of parkinsonism.J Neurophysiol 72:2, 507-20 (1994 Aug)

hide / / print
ref: notes-0 tags: clementine operant conditioning 041707 pyramidal tract tlh24 date: 01-06-2012 03:12 gmt revision:4 [3] [2] [1] [0] [head]

It appears that operant/feedback training of one neuron (channel 29, in SMA region) works fine (not great, but fine). In the experiment performed prior to visiting Seattle, on April 10 2007, I was not convinced that the neuron was controlling anything. Now, it is apparent that the monkey has some clue as to what he is doing. Today I made a simple change: I made the filtering function sum (all spikes) 1/12 * x*(x-1)^2, where x = time - time_of_spike. In comparison to a butterworth filter, this has no rebound oscillation & makes the estimation of firing rate much more transparent. It averages over approximately 500ms ~= lowcut of 1.5hz? I see no reason to change this filtering function much, as it works fine. Spikes were binned at 100hz as input to this function, but that should be equivalent to binning at 1khz etc.

Next time, i want to do 2d, where channel 62 controls the Y-axis. really should try to determine the approximate tunings of these cells. I'm somewhat concerned as this channel seems to have a much lower mean firing rate than channel 29. According to the literature, PTNs have high firing rates and strong tuning...

for reference, here is the channel used for the one-neuron BMI, recorded April 10. It has not changed much in the last 7 days.

hide / / print
ref: thesis-0 tags: clementine 051607 operant conditioning tlh24 date: 01-06-2012 03:09 gmt revision:1 [0] [head]

the cells were, basically, as usual for today. did 1-d BMI on channel 29; worked somewhat (nothing dramatic; mk is out of practice?)

hide / / print
ref: thesis-0 tags: clementine 042107 operant conditioning tlh24 date: 01-06-2012 03:08 gmt revision:5 [4] [3] [2] [1] [0] [head]

I tried to train Clem, once again, to do 2d BMI, this time with channel 69 for X and channel 71 for Y. X worked rather well, to a point - he realized that he could control it with left shoulder contractions, and did so (did not get a video of this). I did, however, get a video of the game, which is here:

Y training/performance was abysmal and hence did not try 2D control. Channel 71 would become silent whenever he began to pay attention; I'm not sure why. It would fire vigorously when he turned around and rested; the unit had a high firing rate at rest. I did not get a pic of the sortclient for today, but ch 29 was there as usual (though i did not use it) & channel 71 had the characteristic sharp V shape; perhaps it was an interneuron?? I don't know.

anyway, the data is in SQL on hardm.ath.cx. (the real proof is in the pudding, of course).

we really need to put the BMI game in his home cage, so motivation is not such a large issue

hide / / print
ref: thesis-0 tags: clementine 042007 operant conditioning biofeedback tlh24 date: 01-06-2012 03:08 gmt revision:4 [3] [2] [1] [0] [head]

channel 29 controlled the X direction:

channel 81, the Y direction (this one was very highly modulated, and the monkey could get to a high rate ~60Hz. note that both units are sorted as one -- I ought to do the same on the other channels from now on, as this was rather predictive (this is duplicating Debbie Won's results):

However, when I ran a wiener filter on the binned spike rates (this is not the rates as estimated through the polynomial filter), ch 81 was most predictive for target X position; ch 29, Y target position (?). This is in agreement with population-wide predictions of target position: target X was predicted with low fidelity (1.12; cc = 0.35 or so); target Y was, apparently, unpredicted. I don't understand why this is, as I trained the monkey for 1/2 hour on just the opposite. Actually this is because the targets were not in a random sequence - they were in a CCW sequence, hence the neuronal activity was correlated to the last target, hence ch 81 to target X!

for reference, here is the ouput of bmi_sql:

order of columns: unit,channel, lag, snr, variable

ans =

    1.0000   80.0000    5.0000    1.0909    7.0000
    1.0000   80.0000    4.0000    1.0705    7.0000
    1.0000   80.0000    3.0000    1.0575    7.0000
    1.0000   80.0000    2.0000    1.0485    7.0000
    1.0000   80.0000    1.0000    1.0402    7.0000
    1.0000   28.0000    4.0000    1.0318    8.0000
    1.0000   76.0000    2.0000    1.0238   11.0000
    1.0000   76.0000    5.0000    1.0225   11.0000
    1.0000   17.0000         0    1.0209   11.0000
    1.0000   63.0000    3.0000    1.0202    8.0000

movies of the performance are here:

hide / / print
ref: thesis-0 tags: clementine Kalman wiener tlh24 date: 01-06-2012 03:08 gmt revision:3 [2] [1] [0] [head]

040507. wiener pred. same deal as {262}

kalman fit/pred.

per-unit and channel aggregate SNR summary

    unit     chan       lag       snr       behav var
    1.0000   69.0000    1.0000    1.1159    2.0000
    1.0000   58.0000    1.0000    1.1074    6.0000
    2.0000   44.0000    2.0000    1.1040    2.0000
    2.0000   44.0000    1.0000    1.0953    2.0000
    2.0000   93.0000    1.0000    1.0868    3.0000
    2.0000   64.0000         0    1.0728    3.0000
    1.0000   69.0000    2.0000    1.0698    2.0000
    1.0000   32.0000         0    1.0684    3.0000
    2.0000   44.0000         0    1.0634    8.0000
    1.0000   58.0000         0    1.0613    6.0000
    1.0000   33.0000    1.0000    1.0594    1.0000
    2.0000   93.0000    3.0000    1.0523    3.0000
    1.0000   63.0000         0    1.0507    3.0000
    1.0000   67.0000    1.0000    1.0490    5.0000
    1.0000   47.0000         0    1.0489    3.0000
    1.0000   12.0000    4.0000    1.0472    3.0000
    2.0000   93.0000    2.0000    1.0460    3.0000
    1.0000   24.0000         0    1.0459    3.0000
    1.0000   42.0000    1.0000    1.0447    6.0000
    1.0000   24.0000    1.0000    1.0440    3.0000
    1.0000   69.0000    3.0000    1.0431    2.0000
    2.0000   60.0000         0    1.0429    5.0000
    1.0000   61.0000         0    1.0410    4.0000
    1.0000   12.0000    1.0000    1.0400    1.0000
    1.0000   32.0000    3.0000    1.0395    3.0000
    1.0000    8.0000    1.0000    1.0387    1.0000
    1.0000   33.0000         0    1.0386   11.0000
    1.0000         0    1.0000    1.0383    4.0000
    2.0000   77.0000    2.0000    1.0383    1.0000
    1.0000   47.0000    1.0000    1.0382    3.0000
    2.0000   60.0000    1.0000    1.0376   10.0000
    2.0000   77.0000    1.0000    1.0375    1.0000
    1.0000   28.0000    1.0000    1.0374    1.0000
    1.0000   69.0000    5.0000    1.0359    3.0000
    1.0000   42.0000         0    1.0358    3.0000
    1.0000    8.0000         0    1.0357    3.0000
    1.0000   63.0000    3.0000    1.0357    3.0000
    2.0000   68.0000    1.0000    1.0348    1.0000
    1.0000   51.0000         0    1.0343    3.0000
    1.0000   30.0000    1.0000    1.0341    1.0000
    1.0000   24.0000    2.0000    1.0341    3.0000
    2.0000   93.0000    5.0000    1.0340    3.0000
    1.0000   63.0000    4.0000    1.0338    3.0000
    1.0000   63.0000    2.0000    1.0337    3.0000
    1.0000   12.0000    2.0000    1.0329    1.0000
    2.0000   23.0000    1.0000    1.0325    1.0000
    1.0000   46.0000    1.0000    1.0324    2.0000
    1.0000   28.0000         0    1.0323    1.0000
    2.0000   93.0000    4.0000    1.0321    3.0000
    1.0000   58.0000    3.0000    1.0316    6.0000
    1.0000   47.0000    2.0000    1.0314    6.0000
    1.0000   48.0000         0    1.0311    4.0000
    1.0000   12.0000    3.0000    1.0310    3.0000
    1.0000   12.0000         0    1.0309    3.0000
    1.0000   48.0000    1.0000    1.0303   11.0000
    1.0000   28.0000    2.0000    1.0300    1.0000
    2.0000   60.0000    2.0000    1.0294   10.0000
    1.0000   46.0000         0    1.0293    8.0000
    1.0000   49.0000         0    1.0291    3.0000
    1.0000   24.0000    3.0000    1.0286    1.0000
    2.0000   77.0000    3.0000    1.0282    3.0000
    1.0000    8.0000    2.0000    1.0282    1.0000
    2.0000   15.0000    1.0000    1.0281    3.0000
    2.0000   68.0000    2.0000    1.0278    1.0000
    2.0000   23.0000         0    1.0273    1.0000
    1.0000  112.0000    1.0000    1.0261    7.0000
    1.0000   69.0000    4.0000    1.0258    3.0000
    2.0000   92.0000    3.0000    1.0244    3.0000
    2.0000   42.0000    1.0000    1.0244   11.0000
    1.0000   58.0000    2.0000    1.0238    3.0000
    1.0000   61.0000    1.0000    1.0234    7.0000
    1.0000   32.0000    4.0000    1.0232    3.0000
    1.0000   33.0000    2.0000    1.0231    1.0000
    1.0000   30.0000    4.0000    1.0231    3.0000
    1.0000   46.0000    2.0000    1.0227    2.0000
    1.0000   30.0000    3.0000    1.0226    3.0000
    1.0000   45.0000         0    1.0225    3.0000
    1.0000   60.0000         0    1.0225    3.0000
    2.0000   84.0000    5.0000    1.0222    3.0000
    1.0000   32.0000    1.0000    1.0221    1.0000
    1.0000   24.0000    4.0000    1.0220    1.0000
    1.0000   28.0000    3.0000    1.0219    1.0000
    1.0000   64.0000    1.0000    1.0216    4.0000
    2.0000   84.0000    1.0000    1.0215    3.0000
    1.0000   30.0000         0    1.0212    3.0000
    2.0000   77.0000    5.0000    1.0211    3.0000
    1.0000   63.0000    1.0000    1.0210    3.0000
    1.0000   33.0000    4.0000    1.0209    1.0000
    1.0000    7.0000    1.0000    1.0209    3.0000
    2.0000   35.0000         0    1.0202    3.0000

hide / / print
ref: neuro notes-0 tags: clementine thesis electrophysiology fit predictions tlh24 date: 01-06-2012 03:07 gmt revision:4 [3] [2] [1] [0] [head]

ok, so i fit all timestamps from clem022007001 & timarm_log_070220_173947_k.mat to clementine's behavior, and got relatively low SNR for almost everything - despite the fact that I am most likely overfitting. (bin size = 7802 x 1491) the offset is calibrated @ 2587 ms + 50 to center the juice artifact in the first bin. There are 10 lags. There are 21 sorted units.

same thing, but with only the sorted units. juice prediction is, of course, worse.

now, for file clem022007002 & timarm_log_070220_175636_k.mat. first the unsorted:

and the sorted:

hide / / print
ref: research-0 tags: clementine tlh24 Kalman thesis date: 01-06-2012 03:07 gmt revision:3 [2] [1] [0] [head]

clementine, 040207, Miguel's sorting. top 200 lags selected via bmisql.m , decent SNR on all channels but I had to z-score the state and measurement matricies.

-- standard wiener

-- linear kalman.

-- associated behavior

hide / / print
ref: notes-0 tags: sorting SNR correlation coefficient expectation maximization tlh24 date: 01-06-2012 03:07 gmt revision:5 [4] [3] [2] [1] [0] [head]

Description: red is the per-channel cross-validated correlation coeifficent of prediction. Blue is the corresponding number of clusters that the unit was sorted into, divided by 10 to fit on the same axis. The variable being predicted is cartesian X position. note 32 channels were dead (from PP). The last four (most rpedictive) channels were: 71 (1 unit), 64 (5 units), 73 (6 units), 67 (1 unit). data from sql entry: clem 2007-03-08 18:59:27 timarm_log_20070308_185706.out ;Looks like this data came from PMD region.

Description: same as above, but for the y-axis.

Description: same as above, but for the z-axis.

Conclusion: sorting seems to matter & have a non-negligible positive effect on predictive ability.

hide / / print
ref: Shinkman-1974.06 tags: Shinkman Bruce Pfingst operant conditioning visual cortex cat ICMS 1974 stimulation date: 12-29-2011 05:13 gmt revision:4 [3] [2] [1] [0] [head]

PMID-4598035[0] Operant conditioning of single-unit response patterns in visual cortex.

  • In cat V1 -- suprising, this is usually considered to be sensory.
  • implanted bilater tripolar stimulating electrodes aimed at the lateral hypothalamus. These were tested for self-stimulation, and preferred locations/currents were selected for optimal ICS reinforcement.
    • 200 bar presses in 8 minute test.
  • Anesthetized, immobilized, head-restrained, contact-lens focused cats.
  • Back projected stimuli onto a screen 50 cm from eye ; dot, bar, or small spot was effective in triggering patterned response, as with many of these studies.
  • For conditioning: set a threshold at the third quartile (1/4 of trials exceeded threshold); comparator circuit counted the number of spikes during stimulus presentation, and if threshold was exceeded, reinforcing ICS was delivered.
    • Reinforcing ICS started 300ms after visual stimulus and lasted 500ms.
  • Conditioning was deemed successful if the mean trial firing rate for the last 50 conditioned trials had a mean firing rate > 30% larger than the first 50 control trials.
    • While recording some cells, ICS reinforcement was delivered at random as control.
  • Conditioning produced changes within stimulus presentation but not outside.
  • They consider the use of an immobilized subject is a pro -- better control, rules out alternative explanations based on motor feedback.


[0] Shinkman PG, Bruce CJ, Pfingst BE, Operant conditioning of single-unit response patterns in visual cortex.Science 184:4142, 1194-6 (1974 Jun 14)

hide / / print
ref: Harris-2009.06 tags: Bartholow 1874 Mary experiment stimulation ICMS date: 12-29-2011 05:13 gmt revision:2 [1] [0] [head]

PMID-19286295[0] Probing the human brain with stimulating electrodes: The story of Roberts Bartholow’s (1874) experiment on Mary Rafferty

  • Excellent review / history.
  • Actual citation: Experimental investigations into the functions of the human brain" The American Journal of the medical Sciences 1874
  • Actual subject: Marry Rafferty
  • Around his time people were shifting from using intuition and observation to direct treatment to using empiricism & science, especially from work on laboratory animals.
  • One of the innovations that could not be tolerated by his colleagues was the "physiological investigations of drugs by the destruction of animal life." He was a bit of an outsider, and not terribly well liked.
  • Before then the cortex was seen to be insensitive to stimulation of any kind.
  • Ferrier 1974b: in the striatum all movements are integrated which are differentiated in the cortex" -- striatal stimulation produces general contraction, not specific contraction.
  • Ferrier 1873 was the first to discover that AC stimulation yielded more prolonged and natural movements than DC.
  • The Dura mater is extremely sensitive to pain.
  • Mary Rafferty seems to have had a tumor (he calls it an ulcer) in the meninges (epithelioma).
  • He probably spread infection into her brain through the stimulating needles.


[0] Harris LJ, Almerigi JB, Probing the human brain with stimulating electrodes: the story of Roberts Bartholow's (1874) experiment on Mary Rafferty.Brain Cogn 70:1, 92-115 (2009 Jun)

hide / / print
ref: -0 tags: chess evolution machine learning 2004 partial derivative date: 10-26-2009 04:07 gmt revision:2 [1] [0] [head]

A Self-learning Evolutionary Chess Program

  • The evolved program is able to perform at near master level!
  • Used object networks (neural networks that can be moved about according to the symmetries of the problem space). Paul Werbos apparently invented these, too.
  • Approached the problem by assigning values to having pieces at particular places on the board (PVT, positional value tables). The value of a move was the value of the resulting global valuation (sum of value of pieces - value of opponents pieces) + PVT. They used these valuations to look a set number of moves in the future, using an alpha-beta search.
    • Used 4-plys (search depth) while in normal genetic evolution; 6 when pawns would be upgraded.
  • The neural networks looked at the first 2 rows, the last two rows, and a 4x4 square in the middle of the board - areas known to matter in real games. (The main author is a master-level chess player and chess teacher).
  • The outputs of the three neural networks were added to the material and PVT values to assess a hypothetical board position.
  • Genetic selection operated on the PVT values, neural network weights, piece valuation, and biases of the neural networks. These were initialized semi-randomly; PVT values were initialized based on open-source programs.
  • Performed 50 generations of 20 players each. The top 10 players from each generation survived.
  • Gary Kasparov was consulted in this research. Cool!
  • I wonder what would happen if you allowed the program to propose (genetically or otherwise) alternate algorithmic structures. What they describe is purely a search through weight space - what about a genetic search through algorithmic structure space? Too difficult of a search?
  • I mean, that's what humans (the authors) do while they were designing this program/algorithm. The lead author, as mentioned, is already a very good chess player, and hence he could imbue the initial program with a lot of good 'filters' 'kernels' or 'glasses' for looking at the chess board. And how did he arrive at these ideas? Practice (raw data) and communication (other peoples kernels extracted from more raw data, and validated). And how does he play? By using his experience and knowledge to predict probable moves into the future, evaluating their value, and selecting the best. And how does he evaluate his algorithmic? The same way! By using his knowledge of both chess and computer science to simulate hypothetical designs in his head, seeing how he thinks they will perform, and selecting the best one.
  • The problem with present algorithms is that they have no sense of artistic beauty - no love of symmetry, whether it be simple geometric symmetry (beautiful people have symmetric faces) or more fractal (fractional-dimensioned) symmetry, e.g. music, fractals (duh), human art. I think symmetry can enormously cut down the dimension of the search space in learning, hence is frequently worthy of its own search.
    • Algorithms do presently have a good sense of parsimony, at least, through the AIC / regularization / SVD / bayes net's priors / etc. Parsimony can be beauty, too.
  • Another notable discrepancy is that humans can reason in a concrete way - they actively search for the thing that is causing the problem, the thing that is contributing greatly to either good or bad results. They do this by the scientific method, sorta - hold all other things constant, perturb some section of the system, measure the output. This is the same as taking a partial derivative. Such derivative are used heavily/exclusively in training neural networks - weights are changed based on the partial derivative of that weight wrt the output-referenced error. So reasoning is similar to non-parallel backprop? Or a really slow way of taking partial derivatives? Maybe. The goal of both is to assign valuation/causation to a given weight/subsystem.
  • Human reasoning involves dual valuation pathways - internal, based on a model of the world, and external, which of course involves experimentation and memory (and perhaps scholarly journal papers etc). The mammalian cortex-basal ganglia-thalamus loop seems designed for running these sorts of simulations because it is the dual of the problem of selecting appropriate behaviors. (there! I said it!) In internal simulation, you take world state, apply forward transform with perturbation, then evaluate the result - see if your perturbation (partial derivative) yields information. In motor behavior, you take the body state, apply forward transformation with perturbation (muscle contraction), and evaluate the result. Same thing. Of course you don't have to do this too much, as the cortex will remember the input-perturbation-result.
  • Understanding seems to be related to this input-transform-evaluate cycle, too, except here what is changing is the forward transform, and the output is compared to known output - does a given kernel (concept) predict the output/observed data?
  • Now what would happen if you applied this input-transform-evaluate to itself, e.g. you allowed the system to evaluate itself. Nothing? Recursion? (recursion is a very beautiful concept.) Some degree of awareness?
  • Surely someone has thought of this before, and tried to simulate it on a computer. Wasn't AI research all about this in the 70's-80's? People have said that their big problem was that AI was then entirely/mostly symbolic and insufficiently probabilistic or data-intensive; the 90's-21st century seems to have solved that. This field is unfamiliar to me, it'll take some sussing about before I can grok the academic landscape.
    • Even more surely, someone is doing it right now! This is the way the world advances. Same thing happened to me with GPGPU stuff, which I was doing in 2003. Now everyone is up to that shiznit.
  • It seems that machine-learning is transitioning from informing my personal philosophy, to becoming my philosophy. Good/bad? Feel free to edit this entry!
  • It's getting late and I'm tried -> rant ends.

hide / / print
ref: -0 tags: convert m4b to mp3 linux date: 09-11-2009 17:16 gmt revision:0 [head]

Recently I got an audiobook in m4b format, but I wanted to play it on my mp3 (only!) device. So, had to convert it. To do this, on my Debian Lenny box I first:

 apt-get install ffmpeg libmp3lame30 libfaad0 libavcodec51 

The last one seems to be the most important, nothing works even though libavcodec51 wold seem to have nothing to do with mp3 encoding... Then used a bash script:

for i in *.m4b; do
        ffmpeg -i "$i" -acodec libmp3lame "${i%m4b}mp3";

to convert all the m4b files in a directory. Later, I used easytag to add tags to the mp3s so they would show up properly on the device {770}. Simplest way to get this to work was to just change the name of the containing folder to Artist - Title; didn't want to manually change the tags on all the mp3's, and I didn't find a 'apply all' button.

hide / / print
ref: Darmanjian-2006.01 tags: wireless neural recording university Florida Principe telemetry msp430 dsp nordic date: 04-15-2009 20:56 gmt revision:1 [0] [head]

PMID-17946962[0] A reconfigurable neural signal processor (NSP) for brain machine interfaces.

  • use a Texas instruments TMS320VC33 200MFLOPS (yes floating point) DSP,
  • a nordic NRF24L01,
  • a MSP430F1611x as a co-processor / wireless protocol manager / bootloader,
  • an Altera EPM3128ATC100 CPLD for expansion / connection.
  • uses 450 - 600mW in use (running an LMS algorithm).


[0] Darmanjian S, Cieslewski G, Morrison S, Dang B, Gugel K, Principe J, A reconfigurable neural signal processor (NSP) for brain machine interfaces.Conf Proc IEEE Eng Med Biol Soc 1no Issue 2502-5 (2006)

hide / / print
ref: notes-0 tags: nordic nrf24L01 state diagram flowchart SPI blackfin date: 06-25-2008 02:44 gmt revision:7 [6] [5] [4] [3] [2] [1] [head]


The goal is to use a nRF24L01 to make an asymmetrical, bidirectional link. The outgoing bandwidth should be maximized, ~1.5mbps, and the incoming bandwidth can be much smaller, ~17kbps, though on both channels we want guaranteed latency, < 4ms for the outgoing data, and < 10ms for the incoming data. Furthermore, the processor that is being used to run this, a blackfin BF532, does not seem to play well when both SPI DMA is enabled and most CPU time is being spent in SPORT ISR reading samples & processing them. Fortunately, the SPI port and SPORT can be run synchronously (provided the SPI port is clocked fast enough), allowing the processor to run one 'thread' e.g. no interrupts. It seem that with high-priority interrupts, the DMA engine is not able to service the SPI perfectly, and without DMA, data comes out of the SPI in drips and drabs, and cannot keep the radio's fifo full. Hence, must program a synchronous radio controller, where states are stored in variables and not in the program counter (PC register, saved upon interrupt, etc).

As in other postings on the nRF24L01, the plan is to keep the transmit fifo full for most of the 4ms allowed by the free-running pll, then transition back into either standby-I mode, or send a status packet. The status packet is always acknowledged by the primary receiver with a command packet, and this allows both synchronization and incoming bandwidth. Therefore, there are 4 classes of transfers:

  1. just a status packet. After uploading, wait for TX_DS IRQ, transition to RX mode, wait for RX_DR irq, clear ce, read in the packet, and set back to TX mode.
  2. one data packet + status packet. There are timeouts on both the transmission of data packets and status packets; in this case, both have been exceeded. Here TX data state is entered, the packet is uploaded, CE is asserted, send the status packet, wait for IRQ from both packets. This requires a transition from tx data CE high state to tx status CSN low state.
  3. many data packets and one status packet. This is the same as above, only the data transmission was triggered by a full threshold in the outgoing packet queue (in processor ram). In this case, two packets are uploaded to the radio before waiting for a TX_DS IRQ, and, at the end of the process, we have to wait for two TX_DS IRQs after uploading the data packet.
  4. many data packets. This is straightforward - upload 2 packets, wait for 1 TX_DS IRQ, {upload another, wait for IRQ}(until packets are gone), wait for final IRQ, set CE low.

screenshot of the derived code working (yea, my USB logic analyzer only runs on windows..yeck):

old versions:

hide / / print
ref: notes-0 tags: Nordic RD nrf24l01 problem transceiver date: 11-02-2007 18:00 gmt revision:4 [3] [2] [1] [0] [head]

here is the final, concluding, email i sent to nordic semiconductor concerning my 'troubles' with their chip. I post it here in hopes that it may help somebody else out there via the magic of the internet. See {485} for the development of the mode-switch solution (2) and {484} for the dropped packet investigation.

Hi xxx,

Ok, i figured out both of my problems:

  1. The missing RX_DR IRQ was because I was clearing the RX fifo upon reading outone packet. Because a packet was being received while the SPI was reading it out (the PTX is continually transmitting), this caused the radio to drop the packet before it was completely received. Dumb! dumb!
  2. Concerning my old problem of lost packets during mode switches, I needed to do a number of things to get it to work:
    1. Add inline resistors to keep spi noise out of the radio
    2. Increase the SPI clock on both PTX and PRX, to avoid not being able to read out the packet after one IRQ and before another was received (as you suggested below).
    3. Added a 62us (of course, longer delays also work) delay between transitioning from RX mode to TX mode. During this time I do not assert CE. A delay in for the opposite transition is not needed. Not exactly sure why this is needed, but it works!
    4. On the PRX, when i send the 'acknowlegement' packet, it is necessary to only pulse CE after uploading the packet. Holding CE high until TX_DS IRQ is asserted somehow messes things up. I guess this is described on the state diagram on your spec sheet - it is best to go back into standby-I mode not standby-II, as there is no transition to RX mode from standby-II.

As a result, I'm getting 99.99 % reliability on bidirectional bandwidth of 1.39mbps PTX->PRX and 18.3kbps PRX->PTX. So, I'm a happy person :) :) Hence, I don't have to try another radio solution.

Just wanted to pass the information along in case it would help your other customers.

cheers, Tim Hanson

hide / / print
ref: notes-0 tags: nordic pinout nRF24L01 spark fun electronics date: 10-09-2007 19:59 gmt revision:5 [4] [3] [2] [1] [0] [head]

nordic semi links:

here is the connection list for the nRF24L01 module made by sparkfunelectronics
  1. VCC
  2. CE
  3. CSN
  4. SCK
  5. MOSI
  6. MISO
  7. IRQ
  8. GND
(1 is by the voltage regulator, obviously.) reversed:
  1. GND
  2. IRQ
  3. MISO
  4. MOSI
  5. SCK
  6. CSN
  7. CE
  8. VCC

hide / / print
ref: notes-0 tags: James DeMarsh PHF tlh24 Cornell date: 08-21-2007 16:35 gmt revision:0 [head]

hide / / print
ref: notes-0 tags: Clementine review organize Miguel 042707 movies videos date: 04-29-2007 19:13 gmt revision:14 [13] [12] [11] [10] [9] [8] [head]

things that I want to send to miguel:

hide / / print
ref: thesis-0 tags: clementine 042607 operant conditioning date: 04-27-2007 16:45 gmt revision:3 [2] [1] [0] [head]

tried 2d again... some success. looked at 29 (still good for x control, but not in BMI mode), channe 71 (still by default silent, correlated to behavior) channel 18 (did not work well) channel 84 (did not work) and channel 54 (like 71, highly correlated to behavior - not sure if the mk learned to control it). have videos etc.

channel 54, new for today and might, might be > 71.. though looking back at the videos, 71 seems pretty good. (it is also a bad idea to keep switching the game..) channels 54 and 71 are different from 29 in that 29 never goes completely silent; 71 goes silent when thew mk is paying attention, 54 when he is not moving. 29 can be modulated + and -, 71 and 54 just + (or so). of course, the monkey is usually in motion so both have high variance and silent periods are short-ish

channel 29, as always

channel 71, as before (very stable!)

channel 54

movies (in the order that they were taken):

hide / / print
ref: thesis-0 tags: clementine 042507 operant conditioning date: 04-25-2007 20:19 gmt revision:2 [1] [0] [head]

OK, today clementine played absolutely abysmally - he did practically nothing, though he did do pole control for a little bit. I think we must stop doing pole control - it is too easy, he must become accustomed to doing brain control from the beginning. Anyway, monkeys never like learning new things (compare to people!); I just have to give him more time. The units are stable (in my agitated state, i forgot to make screenshots). Channel 54 might be very excellent for brain control - however, i did not test it today. If it is still there tomorrow, i will try.

http://m8ta.com/tim/clem042507_trainY.MPG (ignore the first few seconds - he was not trying so hard/was not paying attention)

hide / / print
ref: thesis-0 tags: clementine 042407 operant conditioning date: 04-25-2007 00:21 gmt revision:1 [0] [head]

Today, as yesterday, I tried operantly conditioning primary units on channels 29 (x) and 71 (y) for BMI control. The first few minutes were run in pole control for Miguel's visitors, but i did not save the data. Again as before the monkey was not quite motivated to perform the task. Tomorrow he ought to be thirsty - & I'll try to start him on 2d control after tweaking the gain and offset parameters on the individual axes. During 2d control tomorrow the target size should be expanded also to about 3 to keep the monkey's interest.

There seems to be a bug in the BMI- when two units are sorted, both contribute to the firing rate estimate. I noticed this during X control today, which somewhat decreased the performance. Y performance was slightly better than yesterday, but still not great - he hasn't quite figured it out yet. XY was shitty, i guess.

Among other things, I really need to test the recording system - perhaps make a new file format that is extensible yet compressed? maybe labeled data streams? something like plexon files? Or perhaps just record it to the analog files (that would be easy!) nahh. todo:

  • write some matlab to combine the SQL records.
  • record the unit # in waveform record
  • save the logger output into the SQL db - not just in a file as now.
  • fix the onscreen shapes.

channel 29, at the end of the session:

channel 71. both these channels seem very stable - I hope the mk gets it before the evaporate!

there are no bmisql outputs as I did not run this analysis.


hide / / print
ref: thesis-0 tags: clementine 042307 operant conditioning date: 04-24-2007 01:37 gmt revision:2 [1] [0] [head]

Today, once again, I tried BMI both via pole control and with operant conditioning. The latter worked the best; because the fit/predictions were so shitty i didn't even try brain control with the wiener filter or kalman filter. Here is the output of BMIsql on ~6500 data slices, 18 neurons, 5 taps:

here is the prediction summary... note that target x position is doing rather well (probably because we are training units to respond to this)

output of BMIsql:

order of columns: unit,channel, lag, snr, variable

    2.0000   29.0000         0    1.0872    6.0000
    1.0000   53.0000    3.0000    1.0870    3.0000
    1.0000   53.0000    2.0000    1.0820    3.0000
    1.0000   82.0000    1.0000    1.0801    7.0000
    1.0000   82.0000    5.0000    1.0678    1.0000
    1.0000   82.0000    4.0000    1.0625    1.0000
    1.0000   82.0000    2.0000    1.0563    7.0000
    1.0000   53.0000    1.0000    1.0558    6.0000
    1.0000    8.0000         0    1.0550    8.0000
    1.0000   70.0000    3.0000    1.0549    2.0000
    1.0000   70.0000    2.0000    1.0536    2.0000
    2.0000   82.0000    4.0000    1.0524    1.0000
    2.0000   82.0000    5.0000    1.0516    1.0000
    1.0000   53.0000    4.0000    1.0506    3.0000
    1.0000   70.0000    4.0000    1.0503    2.0000
    2.0000   29.0000    1.0000    1.0497    5.0000
    2.0000   82.0000    3.0000    1.0494    1.0000
    1.0000   82.0000    3.0000    1.0464    7.0000
    1.0000    8.0000    1.0000    1.0454    8.0000
    1.0000   24.0000    1.0000    1.0450    8.0000
    1.0000   24.0000         0    1.0442    8.0000
    1.0000    8.0000    2.0000    1.0415    8.0000
    1.0000   70.0000    5.0000    1.0396    2.0000
    2.0000   82.0000    1.0000    1.0395    7.0000
    1.0000   24.0000    2.0000    1.0392    8.0000
    1.0000   70.0000    1.0000    1.0389    2.0000
    1.0000   81.0000    1.0000    1.0356    8.0000
    1.0000    8.0000    3.0000    1.0355    8.0000
    2.0000   29.0000    2.0000    1.0334    8.0000
    1.0000   81.0000    2.0000    1.0326    8.0000
    1.0000   24.0000    4.0000    1.0318    8.0000
    1.0000    8.0000    4.0000    1.0298    8.0000
    1.0000   24.0000    3.0000    1.0297    8.0000
    1.0000   28.0000    3.0000    1.0293   11.0000
    2.0000   82.0000    2.0000    1.0292    4.0000
    1.0000   28.0000    1.0000    1.0286   11.0000
    1.0000   28.0000    4.0000    1.0262   11.0000
    1.0000   28.0000    2.0000    1.0243   11.0000
    1.0000   28.0000         0    1.0238   11.0000
    2.0000   29.0000    3.0000    1.0221    8.0000
    1.0000   53.0000         0    1.0215    9.0000
    1.0000   81.0000    3.0000    1.0207    8.0000

Operant conditioning worked exceptionally well for the X axis (channel 29, yellow unit 1 - adding both unit's activity together did not work, the monkey would not play). see http://m8ta.com/tim/clem042307_trainX.MPG For a while he tried controlling the cursor position with the joystick, then after a while he realized this was unnecessary and just modulated unit 29.

Initially I tried operant conditioning of channel 82 for the Y axis, but it quickly appeared that he did not care and that it would not work. Hence I switched to channel 71, which was tried on Saturday the 20th. As before, this unit was tonically active while he was asleep, and almost silent while he was paying attention. an attention neuron? possibly. It also showed high firing rate changes when he struggled, suggesting volitional control. He was somewhat able to control it today... see http://m8ta.com/tim/clem042307_trainY.MPG

hide / / print
ref: Schwartz-2004.01 tags: Schwartz BMI prosthetics M1 review 2004 date: 04-05-2007 16:12 gmt revision:1 [0] [head]

PMID-15217341[0] Cortical Neuro Prosthetics

  • closed-loop control improves performance. see [1]
    • adaptive learning tech, when coupled to the adaptability of the cortex, suggests that these devices can function as control signals for motor prostheses.


hide / / print
ref: Brockwell-2004.04 tags: particle_filter Brockwell BMI 2004 wiener filter population_vector MCMC date: 02-05-2007 18:54 gmt revision:1 [0] [head]

PMID-15010499[0] Recursive Bayesian Decoding of Motor Cortical Signals by Particle Filtering

  • It seems that particle filtering is 3-5 times more efficient / accurate than optimal linear control, and 7-10 times more efficient than the population vector method.
  • synthetic data: inhomogeneous poisson point process, 400 bins of 30ms width = 12 seconds, random walk model.
  • monkey data: 258 neurons recorded in independent experiments in the ventral premotor cortex. monkey performed a 3D center-out task followed by an ellipse tracing task.
  • Bayesian methods work optimally when their models/assumptions hold for the data being analyzed.
  • Bayesian filters in the past were computationally inefficient; particle filtering was developed as a method to address this problem.
  • tested the particle filter in a simulated study and a single-unit monkey recording ellipse-tracing experiment. (data from Rena and Schwartz 2003)
  • there is a lot of math in the latter half of the paper describing their results. The tracings look really good, and I guess this is from the quality of the single-unit recordings.
  • appendix details the 'innovative methodology ;)


hide / / print
ref: van-2004.11 tags: anterior cingulate cortex error performance monitoring 2004 date: 0-0-2007 0:0 revision:0 [head]

PMID-15518940 Errors without conflict: implications for performance monitoring theories of anterior cingulate cortex.

  • did a event-locked fMRI to study whether the ACC would differentiate between correct and incorrect feedback stimuli in a time estimation task.
  • ACC seems to be not involved in error detection, just conflict.
  • according to one theory, ERN is generated as part of a reinforcement learning process. (Holroyd and Coles 2002): behavior is monitored by an 'adaptive critic' in the basal ganglia.
    • in this theory, the ACC is used to select between mental processes competing to access the motor system.
    • ERN corresponds to a decrease in dopamine.
    • ERN occurs when the stimulus indicates that an error has occured.
  • alternately, the ACC can monitor for the presence of conflict between simultaneously active but incompatible sensory/processing streams.
    • the ACC is active in correct trials in tasks that require conflict resolution. + it makes sense from a modeling strategy: high-energy state is equivalent to a state of conflit: many neurons are active at the same time.
    • that is, it is a stimuli resolver: e.g. the stroop task.
  • some studies localize (and the authors here indicate that the source-analysis that localizes dipole sources is inaccurate) the error potential to the posterior cingulate cortex.
    • fMRI solves this problem.
  • from their figures, it seems that the right putamen + bilateral caudate are involved in their time-estimation task (subjects has to press a button 1 second after a stimulus cue; feedback then guided/misguided them toward/away from 1000ms; subjects, of course, adjusted their behavior)
    • no sign of ACC activation was shown - as hard as they could look - despite identical (more or less) experimental design to the ERN studies.
      • hence, ERN is generated by areas other than the ACC.
  • in contrast, the stroop task fully engaged the anterior cingulate cortex.
  • cool: perhaps, then, error feedback negativity is better conceived as an (absence of) superimposed "correct feedback positivity" 'cause no area was more active in error than correct feedback.
  • of course, one is measuring brain activation through blood flow, and the other is measuring EEG signals.

hide / / print
ref: abstract-0 tags: tlh24 error signals in the cortex and basal ganglia reinforcement_learning gradient_descent motor_learning date: 0-0-2006 0:0 revision:0 [head]

Title: Error signals in the cortex and basal ganglia.

Abstract: Numerous studies have found correlations between measures of neural activity, from single unit recordings to aggregate measures such as EEG, to motor behavior. Two general themes have emerged from this research: neurons are generally broadly tuned and are often arrayed in spatial maps. It is hypothesized that these are two features of a larger hierarchal structure of spatial and temporal transforms that allow mappings to procure complex behaviors from abstract goals, or similarly, complex sensory information to produce simple percepts. Much theoretical work has proved the suitability of this organization to both generate behavior and extract relevant information from the world. It is generally agreed that most transforms enacted by the cortex and basal ganglia are learned rather than genetically encoded. Therefore, it is the characterization of the learning process that describes the computational nature of the brain; the descriptions of the basis functions themselves are more descriptive of the brain’s environment. Here we hypothesize that learning in the mammalian brain is a stochastic maximization of reward and transform predictability, and a minimization of transform complexity and latency. It is probable that the optimizations employed in learning include both components of gradient descent and competitive elimination, which are two large classes of algorithms explored extensively in the field of machine learning. The former method requires the existence of a vectoral error signal, while the latter is less restrictive, and requires at least a scalar evaluator. We will look for the existence of candidate error or evaluator signals in the cortex and basal ganglia during force-field learning where the motor error is task-relevant and explicitly provided to the subject. By simultaneously recording large populations of neurons from multiple brain areas we can probe the existence of error or evaluator signals by measuring the stochastic relationship and predictive ability of neural activity to the provided error signal. From this data we will also be able to track dependence of neural tuning trajectory on trial-by-trial success; if the cortex operates under minimization principles, then tuning change will have a temporal relationship to reward. The overarching goal of this research is to look for one aspect of motor learning – the error signal – with the hope of using this data to better understand the normal function of the cortex and basal ganglia, and how this normal function is related to the symptoms caused by disease and lesions of the brain.