You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

#### 132 lines 4.0 KiB Matlab Raw Permalink Blame History

 ```function task_switch_saccades() ``` ```%calculate fn(a,b), where a and b are real numbers (in a limited range) and fn is + or - ``` ```Ainputs=[-60:5:60]; ``` ```Binputs=[-60:5:60]; ``` ```F=[-1,1]; ``` ```Rinputs=[min(Ainputs)+min(Binputs):10:max(Ainputs)+max(Binputs)]; ``` ```Acentres=[-60:10:60]; ``` ```Bcentres=[-60:10:60]; ``` ``` ``` ```%define weights, to produce a 2d basis function network, where nodes have gaussian RFs. ``` ```W=[]; ``` ```for f=F ``` ``` for a=Acentres ``` ``` for b=Bcentres ``` ``` if f==-1 ``` ``` r=a-b; ``` ``` else ``` ``` r=a+b; ``` ``` end ``` ``` W=[W;code(f,F),code(a,Ainputs,10,0,0),code(b,Binputs,10,0,0),code(r,Rinputs,10,0,0)]; ``` ``` end ``` ``` end ``` ```end ``` ``` ``` ```%normalise weights ``` ```W=bsxfun(@rdivide,W,max(1e-6,sum(W,2))); ``` ```[n,m]=size(W) ``` ``` ``` ```%define test cases ``` ```X=zeros(m,3); ``` ```null=zeros(1,length(Rinputs)); ``` ```%function approximation: ``` ```X(:,1)=[code(1,F),code(0,Ainputs,10),code(30,Binputs,10),null]'; %0+30=? ``` ```X(:,2)=[code(1,F),code(0,Ainputs,10),code(-30,Binputs,10),null]'; %0-30=? ``` ```X(:,3)=[code(-1,F),code(0,Ainputs,10),code(30,Binputs,10),null]'; %0-30=? ``` ``` ``` ```for k=1:size(X,2) ``` ``` x=X(:,k); ``` ``` [y,e,r]=dim_activation(W,x); ``` ``` figure(k),clf ``` ``` plot_result(x,r,y,Ainputs,Binputs,Rinputs); ``` ``` print(gcf, '-dpdf', ['task_switch_saccades',int2str(k),'.pdf']); ``` ```end ``` ``` ``` ``` ``` ``` ``` ```function c=code(x,X,sigma,noise,norm) ``` ```c=zeros(1,length(X),'single'); ``` ```if length(X)==2 ``` ``` c(x==X)=1; ``` ```else ``` ``` c=10.*exp(-(0.5/sigma.^2).*(x-X).^2)./sigma; ``` ```end ``` ```if nargin>3 && noise ``` ``` c=single(imnoise(uint8(125.*c),'poisson'))./125; %add poisson noise ``` ```end ``` ```if nargin>4 && norm ``` ``` c=c./sum(c); ``` ```end ``` ``` ``` ``` ``` ``` ``` ```function plot_result(x,r,y,Ainputs,Binputs,Rinputs) ``` ```xC=x(1:2); ``` ```rC=r(1:2); ``` ```x=x(3:end);r=r(3:end); ``` ```xA=x(1:length(Ainputs)); ``` ```xB=x(length(Ainputs)+[1:length(Binputs)]); ``` ```xR=x(length(Ainputs)+length(Binputs)+[1:length(Rinputs)]); ``` ```rA=r(1:length(Ainputs)); ``` ```rB=r(length(Ainputs)+[1:length(Binputs)]); ``` ```rR=r(length(Ainputs)+length(Binputs)+[1:length(Rinputs)]); ``` ```top=1.05; ``` ``` ``` ```attributes=['anti-saccade'; ``` ``` ' saccade']; ``` ``` ``` ```axes('Position',[0.12,0.35,0.08,0.24]), ``` ```bar(xC,'k'),axis([0.5,2+0.5,0,top]) ``` ```set(gca,'XTick',[1:2],'XTickLabel',[],'FontSize',18); ``` ```text([1:2]-0.06,-0.07.*ones(1,2),attributes,'HorizontalAlignment','right','VerticalAlignment','middle','rotation',90,'FontSize',18); ``` ``` ``` ```axes('Position',[0.22,0.35,0.24,0.24]), ``` ```bar(xA,1,'k'),axis([0.5,length(xA)+0.5,0,top]) ``` ```set(gca,'YTick',[],'XTick',[4:9:length(xA)-3],'XTickLabel',Ainputs(4:9:length(xA)-3),'FontSize',18); ``` ```xlabel({'fixation';'position'}) ``` ```plot_decode(xA,Ainputs); ``` ``` ``` ```axes('Position',[0.48,0.35,0.24,0.24]), ``` ```bar(xB,1,'k'),axis([0.5,length(xB)+0.5,0,top]) ``` ```set(gca,'YTick',[],'XTick',[4:9:length(xB)-3],'XTickLabel',Binputs(4:9:length(xB)-3),'FontSize',18); ``` ```xlabel({'target';'position'}) ``` ```plot_decode(xB,Binputs); ``` ``` ``` ```axes('Position',[0.74,0.35,0.24,0.24]), ``` ```bar(xR,1,'k'),axis([0.5,length(xR)+0.5,0,top]) ``` ```set(gca,'YTick',[],'XTick',[4:9:length(xR)-3],'XTickLabel',Rinputs(4:9:length(xR)-3),'FontSize',18); ``` ```xlabel({'saccade';'position'}) ``` ```plot_decode(xR,Rinputs); ``` ``` ``` ``` ``` ```axes('Position',[0.12,0.64,0.08,0.24]), ``` ```bar(rC,'FaceColor',[0,0.7,0]),axis([0.5,2+0.5,0,top]) ``` ```set(gca,'XTick',[],'FontSize',18); ``` ``` ``` ```axes('Position',[0.22,0.64,0.24,0.24]), ``` ```bar(rA,1,'FaceColor',[0,0.7,0]),axis([0.5,length(rA)+0.5,0,top]) ``` ```set(gca,'YTick',[],'XTick',[],'FontSize',18); ``` ```plot_decode(rA,Ainputs); ``` ``` ``` ```axes('Position',[0.48,0.64,0.24,0.24]), ``` ```bar(rB,1,'FaceColor',[0,0.7,0]),axis([0.5,length(rB)+0.5,0,top]) ``` ```set(gca,'YTick',[],'XTick',[],'FontSize',18); ``` ```plot_decode(rB,Binputs); ``` ``` ``` ```axes('Position',[0.74,0.64,0.24,0.24]), ``` ```bar(rR,1,'FaceColor',[0,0.7,0]),axis([0.5,length(rR)+0.5,0,top]) ``` ```set(gca,'YTick',[],'XTick',[],'FontSize',18); ``` ```plot_decode(rR,Rinputs); ``` ``` ``` ```set(gcf,'PaperSize',[18 16].*0.8,'PaperPosition',[0 0.5 18 15].*0.8,'PaperOrientation','Portrait'); ``` ``` ``` ``` ``` ```function plot_decode(x,inputs) ``` ```hold on, ``` ```ml=sum(x'.*inputs)./sum(x); ``` ```mlconv=1+((ml-min(inputs)).*(length(inputs)-1)./(max(inputs)-min(inputs))); ``` ```plot(mlconv.*[1,1],[0,100],'w--','LineWidth',2), ``` ```plot(mlconv.*[1,1],[0,100],'k--'), ``` ```ax=axis; ``` ```text('Position',[mlconv,ax(4)*0.98],'String',num2str(round(ml.*10)/10),'HorizontalAlignment','center','VerticalAlignment','Bottom','FontSize',18,'FontWeight','bold'); ```