adding noise to input

NMODL and the Channel Builder.
Post Reply
menica
Posts: 71
Joined: Wed Sep 02, 2015 11:02 am

adding noise to input

Post by menica » Fri Mar 08, 2019 8:43 am

Hi,
I would like to modify the IClampnoise (viewtopic.php?f=16&t=2055&p=17467#
) in order to tune the frequency of the input signal.

I would like to have something similar to the current generated by a sinusoidal function as

i= constantAmp*cos(2*pi*(t-del)*freq*(0.001))

where I can tune freq.

How can I change the amp=f0+0.5(f1-f0)(tanh((t-torn)/(r/3)-3)+1) expression in order to change the frequency of the signal?

Can you please explain the meaning of the torn and r terms?
Maybe tuning f0 and f1 can be a way to explore a frequency range?

Best
Menica

menica
Posts: 71
Joined: Wed Sep 02, 2015 11:02 am

Re: adding noise to input

Post by menica » Tue Mar 12, 2019 9:59 am

I would like to create an input signal like this:
i(t) = [is(t)+in(t)]+
I would like to positive part of the sum of
is(t)=A*sin(2PI(t-del)f/0.0001)+ i0
and
in(t) which is the noise part, solution of:
tau*noise' = -noise+sigma*sqrt(2*tau)eta(t)
where eta is a gaussian distribution
I wrote this code, but it is not working. Any help?
How can I take only the positive part of i?

Code: Select all

NEURON {
  POINT_PROCESS periodicnoiseinput
  RANGE i,del,dur,amp,std,f,v0,A,n, noise, sigma, tau
  ELECTRODE_CURRENT i
}

UNITS {
  (nA) = (nanoamp)
  PI = (pi) (1)
}


PARAMETER {
  del=50    (ms)
  dur=1000   (ms)
  std=0.2   (nA)
  f (1/s)  : frequency is in Hz
  n (1)
  v0 =1.5 (1/ms)
  A=0.6 (1/ms)
  sigma =0.001
  tau=0.3 (ms)
}

ASSIGNED {
  ival (nA)
  i (nA)
  amp (nA)
  eta (nA)
  on (1)
}

INITIAL {
  i = 0
  on = 0
  net_send(del, 1)
}

STATE {
  noise   (nA) 
}

PROCEDURE seed(x) {
  set_seed(x)
}


BEFORE BREAKPOINT {
  if  (on) {    
    amp = v0 + A*sin(2*PI*(t-del)*f*(0.001))
    SOLVE state METHOD derivimplicit
    ival = amp + noise 
  } else {
    ival = 0
  }
}

BREAKPOINT {
  i = ival
}

DERIVATIVE state { 
  eta = normrand(0,std*1(/nA))*1(nA)
  noise' = (-noise +sigma*sqrt(2*tau)*eta)/tau
}


NET_RECEIVE (w) {
  if (flag == 1) {
    if (on == 0) {
      : turn it on
      on = 1
      : prepare to turn it off
      net_send(dur, 1)
    } else {
      : turn it off
      on = 0
    }
  }
}
This is the error I got:

Convergence not achieved in maximum number of iterations
/usr/local/nrn/x86_64/bin/nrniv: scopmath library error
near line 1
hoc_ac_ = num_estim
^
fadvance()
advance()
step()
continuerun(1300)
and others

Post Reply