- This topic has 1 reply, 1 voice, and was last updated 9 years, 2 months ago by Damian Marek.
-
AuthorPosts
-
-
October 13, 2015 at 3:21 pm #26446Damian MarekParticipant
It is possible to open and run OptiSystem from the Matlab environment. Make sure the attached .osd file is in the same directory as the CallOptiSystem.m file and you should easily run this program, which simulates the gain and noise figure for various fiber lengths.
-
October 13, 2015 at 3:27 pm #26453Damian MarekParticipant
Matlab code follows:
clear all;
close all;% create a COM server running OptiSystem
optsys = actxserver(‘optisystem.application’);% Section looks for OptiSystem process and waits for it to start
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Execute the system command
taskToLookFor = ‘OptiSystemx64.exe’;
% Now make up the command line with the proper argument
% that will find only the process we are looking for.
commandLine = sprintf(‘tasklist /FI “IMAGENAME eq %s”‘, taskToLookFor);
% Now execute that command line and accept the result into “result”.
[status, result] = system(commandLine);
% Look for our program’s name in the result variable.
itIsRunning = strfind(lower(result), lower(taskToLookFor));
while isempty(itIsRunning)
% pause(0.1)
[status, result] = system(commandLine);
itIsRunning = strfind(lower(result), lower(taskToLookFor));
end
%%%%%%%%%%%%%%%%%%%%%%%%%% Open the OptiSystem file defined by the path
directory = strcat(pwd,’\Matlab Call OptiSystem.osd’);
optsys.Open(directory);% Specify and define the parameters that will be varied
ParameterName1 = ‘Power’;
SignalPower = -20:5:-10; %dBmParameterName2 = ‘Length’;
FiberLength = 5:5:15; %meters% Specify the results that will be transfered from OptiSystem
ResultName1 = ‘Max. Gain (dB)’;
ResultName2 = ‘Min. Noise Figure (dB)’;
ResultName3 = ‘Output : Max. OSNR (dB)’;Document = optsys.GetActiveDocument;
LayoutMngr = Document.GetLayoutMgr;
CurrentLyt = LayoutMngr.GetCurrentLayout;
Canvas = CurrentLyt.GetCurrentCanvas;% Specify the components that will have the parameters (results) transfered
Component1 = Canvas.GetComponentByName(‘CW Laser’);
Component2 = Canvas.GetComponentByName(‘EDFA’);
Visualizer1 = Canvas.GetComponentByName(‘Dual Port WDM Analyzer’);% vary the parameters, run OptiSystem project and get the results
for i = 1:length(SignalPower)
for k = 1:length(FiberLength)%Set component parameters
Component1.SetParameterValue( ParameterName1, SignalPower(i) );
Component2.SetParameterValue( ParameterName2, FiberLength(k) );%Calculate
Document.CalculateProject( true , true);%Acces visualizer results
Result1 = Visualizer1.GetResult( ResultName1 );
Result2 = Visualizer1.GetResult( ResultName2 );
Result3 = Visualizer1.GetResult( ResultName3 );Gain( (i-1)*length(FiberLength) + k ) = Result1.GetValue( 1 );
NF( (i-1)*length(FiberLength) + k ) = Result2.GetValue( 1 );
OSNR( (i-1)*length(FiberLength) + k ) = Result3.GetValue( 1 );
end
end%plot graphs
figure
subplot(3,1,1); plot(FiberLength,Gain(1:length(FiberLength)),FiberLength,Gain(length(FiberLength)+1:2*length(FiberLength)),FiberLength,Gain(2*length(FiberLength)+1:3*length(FiberLength)) )
title(‘Signal Gain’)
xlabel(‘Fiber length [m]’)
ylabel(‘Gain [dB]’)
subplot(3,1,2); plot(FiberLength,NF(1:length(FiberLength)),FiberLength,NF(length(FiberLength)+1:2*length(FiberLength)),FiberLength,NF(2*length(FiberLength)+1:3*length(FiberLength)) )
title(‘Noise Figure’)
xlabel(‘Fiber length [m]’)
ylabel(‘NF [dB]’)
subplot(3,1,3); plot(FiberLength,OSNR(1:length(FiberLength)),FiberLength,OSNR(length(FiberLength)+1:2*length(FiberLength)),FiberLength,OSNR(2*length(FiberLength)+1:3*length(FiberLength)) )
title(‘OSNR’)
xlabel(‘Fiber length [m]’)
ylabel(‘OSNR [dB]’)% close OptiSystem
optsys.Quit; -
May 30, 2017 at 9:58 am #43727Md Hayder AliParticipant
Hello Marek,
I am facing this problem…Can you pls suggest me?
>> CallOptiSystem
Error using COM.optisystem_application/Open
Error: The server threw an exception.Error in CallOptiSystem (line 28)
optsys.Open(directory);Thanks
Hayder
-
-
AuthorPosts
- You must be logged in to reply to this topic.