Help with Matlab scripting

Working with OpenViBE signal processing scenarios and doing scenario/BCI design
Post Reply
Yael
Posts: 18
Joined: Tue Aug 28, 2018 12:31 pm

Help with Matlab scripting

Post by Yael »

Hi,

I've seriously tried everything, yet I can't figure out what is the problem.

The matlab tutorials works fine, that means that there is no problem with the matlab engine calling, yet when I try to write a basic scenario the whole system crash.

Please help.

here are the matlab code (since I can't attach them as files):

Code: Select all

function box_out = OV_EFP1_Initialize(box_in)
	
	disp('Matlab initialize function has been called.')


	box_out = box_in;
   
end

function box_out = OV_EFP1_Process(box_in)

	
 for i = 1: OV_getNbPendingInputChunk(box_in,1)
  
	[box_in, start_time, end_time, matrix_data] = OV_popInputBuffer(box_in,1);
       
	box_in = OV_addOutputBuffer(box_in,1,start_time,end_time,matrix_data);
		
 end
 
    
    % Pass the modified box as output to continue processing
    box_out = box_in;
     	
end

function box_out = OV_EFP1_Uninitialize(box_in)
	disp('Matlab uninitialize function has been called.')

	box_out = box_in;

end
Many thanks,
Yael
Attachments
tryout1.xml
(14.19 KiB) Downloaded 138 times

Yael
Posts: 18
Joined: Tue Aug 28, 2018 12:31 pm

Re: Help with Matlab scripting

Post by Yael »

Hi,

So when I attach my code onto tutorial 2 code it works, but when I delete the parts of the tutorial that I don't need the system crash again. meaning the openvibe designer shutdown.

please what am I doing wrong?

Many thanks,
Yael

jtlindgren
Posts: 778
Joined: Tue Dec 04, 2012 3:53 pm
Location: INRIA Rennes, FRANCE

Re: Help with Matlab scripting

Post by jtlindgren »

Hello Yael,

Designer shouldn't crash - if it does, thats a bug. I'll take a look. I first thought it could be the changed function names, but then these can be specified in the box config...


Cheers,
Jussi

jtlindgren
Posts: 778
Joined: Tue Dec 04, 2012 3:53 pm
Location: INRIA Rennes, FRANCE

Re: Help with Matlab scripting

Post by jtlindgren »

Ok, getting back on this, the problem is that your code is missing the assignment of the header -- in OV all streams must have one. You need to add the following to the part of Process() where you iterate over the inputs,

Code: Select all

		box_in.outputs{1}.header = box_in.inputs{1}.header;
The crash on the other hand was a C++ bug in the Matlab box, I'll fix that in git.

Thanks for the report!

Best,
Jussi

Yael
Posts: 18
Joined: Tue Aug 28, 2018 12:31 pm

Re: Help with Matlab scripting

Post by Yael »

Thanks Jussi, sorry on the delay, we had many holidays and vacation time :)

I managed to fix the problem by deleting this line from the code:

box_in = OV_addOutputBuffer(box_in,1,start_time,end_time,matrix_data);

I don't know why but it works perfectly without it.

The only problem I have now is when assigning new variables to the user data in the box in I can't always call them,
I have no idea why it sometimes works and in others doesn't. for example:

when using variable as counter it works :
box initialize function:

box_in.user_data.nb_matrix_processed =0;

box process function:

box_in.user_data.nb_matrix_processed = box_in.user_data.nb_matrix_processed + 1;
if (box_in.user_data.nb_matrix_processed>=4) && mod((box_in.user_data.nb_matrix_processed-1),3)==0

yet when using it to call a file name such:
box initialize function:

selpath =uigetdir;
box_in.user_data.path=selpath;
filename3=sprintf('%s',box_in.user_data.path,'\eegdata.mat');
box_in.user_data.filenamedata=filename3;

box uninitialized function:

d=importdata(box_in.user_data.filenamedata);
if box_in.user_data.count*1536<size(d,1)
k=box_in.user_data.count+1;
k1=num2str(k)
filename1=sprintf('%s',box_in.user_data.path,'\eegdata')
filename2=sprintf('%s',k1,'.mat')
filename=sprintf('%s%s',filename1,filename2)
save(filename,'c')

it doesn't work when simply using: save(box_in.user_data.filenamedata,'c').

another example that isn't working is for:
box initialize function:

box_in.user_data.g_electrode=0;

box process function:

if(box_in.user_data.g_electrode==0)

it gives an error for this line.

is there any logic when using this user data variables? when can I call them and how (is it different than what I've tried so far).

Many thanks,
Yael

jtlindgren
Posts: 778
Joined: Tue Dec 04, 2012 3:53 pm
Location: INRIA Rennes, FRANCE

Re: Help with Matlab scripting

Post by jtlindgren »

Hi, the following work just fine for me. Can you try these and if they work, modify them to produce your error?

Code: Select all

function box_out = Initialize(box_in)

        disp('Matlab initialize function has been called.')

        box_in.user_data.bool = false;
        box_in.user_data.number = 777;
        box_in.user_data.string = 'teststring';
        box_in.user_data.counter = 0;

        % Don't forget to pass the modified box as output.
        box_out = box_in;

end

function box_out = Process(box_in)

        disp('Matlab process function has been called.')

%       disp(box_in.user_data)

        txt = sprintf('Bool %d\n', box_in.user_data.bool); disp(txt);
        txt = sprintf('Int  %d\n', box_in.user_data.number); disp(txt);
        txt = sprintf('String %s\n', box_in.user_data.string); disp(txt);
        txt = sprintf('Counter %d\n', box_in.user_data.counter); disp(txt);

        box_in.user_data.counter = box_in.user_data.counter + 1;

        % Pass the modified box as output to continue processing
        box_out = box_in;
end

function box_out = Uninitialize(box_in)
        disp('Matlab uninitialize function has been called.')

        disp(box_in.user_data);

        box_out = box_in;
end
ps. I'm not sure your modification is appropriate that you mention in the beginning. Please try this hotfix which should address the crash issue, viewtopic.php?f=13&t=9961&p=15889&hilit=matlab#p15889

Cheers,
Jussi

Yael
Posts: 18
Joined: Tue Aug 28, 2018 12:31 pm

Re: Help with Matlab scripting

Post by Yael »

Hi, thanks, now I know what is the problem I am calling another function from the process function. the function is located just bellow in the process function code. I thought that the user data variables are global, do you have any idea how can I call them without doing upload of the file? can I define the user data variables as global?

Thanks,
Yael

Yael
Posts: 18
Joined: Tue Aug 28, 2018 12:31 pm

Re: Help with Matlab scripting

Post by Yael »

Thanks for all your help, I've figured it out, stupid mistake.

Thanks again,
Yael

jtlindgren
Posts: 778
Joined: Tue Dec 04, 2012 3:53 pm
Location: INRIA Rennes, FRANCE

Re: Help with Matlab scripting

Post by jtlindgren »

Ok, great. Btw I imagine global variables work just as they usually do in Matlab. And you can of course pass box_in further to some of your own functions.

Cheers,
Jussi

Yael
Posts: 18
Joined: Tue Aug 28, 2018 12:31 pm

Re: Help with Matlab scripting

Post by Yael »

Thanks, I did transfer the box_in to the next function and retrieved it, this is how I solved the problem, as I said stupid mistake, that took me a whole day.

Thanks again,
Yael

Post Reply