-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathRateCode.m
94 lines (79 loc) · 2.66 KB
/
RateCode.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
function [weights] = RateCode()
%Ten neurons all connected to each other. Each has an input spike
%train which makes it fire with Poisson distribution at different
%frequencies.
%Average Frequency is 2 * its position
duration=1000;
initw=0.25;
%weights=zeros(10,10);
%Visual Cortex parameters
A_LTP=14*10^-4;
A_LTD=8*10^-4;
theta_plus=-45.3;
theta_minus=-70.6;
w_max=3;
w_min=0;
u_ref_square=60;
syn_par=[A_LTP A_LTD theta_plus theta_minus w_max w_min u_ref_square];
%Neuron parameters
tau_plus=7;
tau_minus=10;
tau_x=15;
neu_par=[tau_plus tau_minus tau_x];
%Input spike train
spike_train=zeros(10,duration);
% for I=1:duration
% for J=1:10
% if mod(I-1,floor(500/J))==0
% spike_train(J,I)=1000000;
% end
% end
% end
for I=1:duration
for J=1:10
if rand<2*J/1000
spike_train(J,I)=1000000;
end
end
end
%Initialise neuron variables
u=-70.6*ones(1,10); wad=zeros(1,10); z=zeros(1,10);
counter=zeros(1,10); V_T=-50.4*ones(1,10);
x_bar=zeros(1,10); x_bar_d=zeros(1,10);
X=zeros(1,10);
%Initialise weights variables
w=initw*ones(10,10);
umean_plus=-70.6*ones(1,10); umean_plus_d=-70.6*ones(1,10);
umean_plus_dd=-70.6*ones(1,10); umean_plus_ddd=-70.6*ones(1,10);
umean_minus=-70.6*ones(1,10); umean_minus_d=-70.6*ones(1,10);
umean_minus_dd=-70.6*ones(1,10); umean_minus_ddd=-70.6*ones(1,10);
u_bar_bar=zeros(1,10); u_bar_bar_d=zeros(1,10);
u_bar_bar_dd=zeros(1,10); u_bar_bar_ddd=zeros(1,10);
for time=1:duration
%Update neurons
for neuron=1:10
[u(neuron), wad(neuron),z(neuron),counter(neuron),V_T(neuron),umean_plus(neuron), umean_minus(neuron), u_bar_bar(neuron), x_bar(neuron),X(neuron)] = aEIFnet(u(neuron),wad(neuron),z(neuron),spike_train(neuron,time),counter(neuron),V_T(neuron),umean_plus(neuron), umean_minus(neuron), u_bar_bar(neuron), x_bar(neuron), neu_par);
end
%Update synapses
for pre_neuron=1:10
for post_neuron=1:10
w(pre_neuron,post_neuron)=synapse(w(pre_neuron,post_neuron), u(post_neuron), umean_plus_ddd(post_neuron), umean_minus_ddd(post_neuron), u_bar_bar_ddd(post_neuron), x_bar_d(pre_neuron), X(pre_neuron), syn_par );
end
end
%Update delayed potentials
x_bar_d=x_bar;
umean_minus_ddd=umean_minus_dd;
umean_plus_ddd=umean_plus_dd;
u_bar_bar_ddd=u_bar_bar_dd;
umean_minus_dd=umean_minus_d;
umean_plus_dd=umean_plus_d;
u_bar_bar_dd=u_bar_bar_d;
umean_minus_d=umean_minus;
umean_plus_d=umean_plus;
u_bar_bar_d=u_bar_bar;
% if mod(time,1000)==0
% weights=weights+w;
% end
end
weights=w;
end