Tag Archives: matlab
Simulink considers that an output matrix has variable size when the size is always constant
Hi! I’m running a code in simulink (in one of the matlab function blocks) and I keep getting errors regarding the size of the output matrix. My code is the following one, where phi_1 is a ramp input that goes from 0 to 2*pi, and all the values in perm are constants:
function Ga = G(phi_1,perm)
G_amax=perm(1);
n=perm(2);
ns=perm(5);
nr=perm(6);
gamma=perm(3);
gammap=perm(4);
Ga=zeros(nr,ns);
%define angles between rotor (rows) and stator (columns) teeth
phi=zeros(nr,ns);
phi(1,1)=phi_1;
phi(2,1)=phi(1,1) + 2*pi/nr;
for j=2:ns
phi(1,j)=phi(1,j-1) – 2*pi/ns;
phi(2,j)=phi(1,j) + 2*pi/nr;
end
%make sure that the angle is in the first fifth (it’s periodic every 1/5th
%of a turn)
for j=1:nr
for k=1:ns
while phi(j,k)<0
phi(j,k)=phi(j,k)+2*pi;
end
while phi(j,k)>2*pi/5
phi(j,k)=phi(j,k)-2*pi/5;
end
%permeances as a function of the angle
if 0<=phi(k,j) && phi(k,j)<gammap || 2*pi/n – gammap<=phi(k,j) && phi(k,j)<=2*pi/n
Ga(k,j)=G_amax;
elseif gammap<=phi(k,j) && phi(k,j)<=gamma
Ga(k,j)=G_amax/2 * (1+cos(pi*(phi(k,j)-gammap)/(gamma-gammap)));
elseif 2*pi/n – gamma<=phi(k,j) && phi(k,j)<=2*pi/n – gammap
Ga(k,j)=G_amax/2 * (1+cos(pi*(phi(k,j)-2*pi/n+gammap)/(gamma-gammap)));
else
Ga(k,j)=0;
end
end
end
When I run the simulation, I get the following error:
Error:A signal of unbounded array type is not supported on ‘Input Port 1’ of block ‘air_gap/Scope2’. For a list of supported data types, see the block documentation page.
If I try setting the size of the matrix Ga to the one that it’s supposed to have ([2,3]) in the explore section instead of the predetermined -1, I get this error:
Error:The signal at ‘Output Port 1’ of ‘air_gap/MATLAB Function2’ is a variable-size signal with a nondiscrete sample time. The sample time for any variable-size signal must be discrete.
However, I want to be able to use continuous signals instead of discrete ones. Is there a way to do so? And if not, how do I switch it to discrete?
Thanks!Hi! I’m running a code in simulink (in one of the matlab function blocks) and I keep getting errors regarding the size of the output matrix. My code is the following one, where phi_1 is a ramp input that goes from 0 to 2*pi, and all the values in perm are constants:
function Ga = G(phi_1,perm)
G_amax=perm(1);
n=perm(2);
ns=perm(5);
nr=perm(6);
gamma=perm(3);
gammap=perm(4);
Ga=zeros(nr,ns);
%define angles between rotor (rows) and stator (columns) teeth
phi=zeros(nr,ns);
phi(1,1)=phi_1;
phi(2,1)=phi(1,1) + 2*pi/nr;
for j=2:ns
phi(1,j)=phi(1,j-1) – 2*pi/ns;
phi(2,j)=phi(1,j) + 2*pi/nr;
end
%make sure that the angle is in the first fifth (it’s periodic every 1/5th
%of a turn)
for j=1:nr
for k=1:ns
while phi(j,k)<0
phi(j,k)=phi(j,k)+2*pi;
end
while phi(j,k)>2*pi/5
phi(j,k)=phi(j,k)-2*pi/5;
end
%permeances as a function of the angle
if 0<=phi(k,j) && phi(k,j)<gammap || 2*pi/n – gammap<=phi(k,j) && phi(k,j)<=2*pi/n
Ga(k,j)=G_amax;
elseif gammap<=phi(k,j) && phi(k,j)<=gamma
Ga(k,j)=G_amax/2 * (1+cos(pi*(phi(k,j)-gammap)/(gamma-gammap)));
elseif 2*pi/n – gamma<=phi(k,j) && phi(k,j)<=2*pi/n – gammap
Ga(k,j)=G_amax/2 * (1+cos(pi*(phi(k,j)-2*pi/n+gammap)/(gamma-gammap)));
else
Ga(k,j)=0;
end
end
end
When I run the simulation, I get the following error:
Error:A signal of unbounded array type is not supported on ‘Input Port 1’ of block ‘air_gap/Scope2’. For a list of supported data types, see the block documentation page.
If I try setting the size of the matrix Ga to the one that it’s supposed to have ([2,3]) in the explore section instead of the predetermined -1, I get this error:
Error:The signal at ‘Output Port 1’ of ‘air_gap/MATLAB Function2’ is a variable-size signal with a nondiscrete sample time. The sample time for any variable-size signal must be discrete.
However, I want to be able to use continuous signals instead of discrete ones. Is there a way to do so? And if not, how do I switch it to discrete?
Thanks! Hi! I’m running a code in simulink (in one of the matlab function blocks) and I keep getting errors regarding the size of the output matrix. My code is the following one, where phi_1 is a ramp input that goes from 0 to 2*pi, and all the values in perm are constants:
function Ga = G(phi_1,perm)
G_amax=perm(1);
n=perm(2);
ns=perm(5);
nr=perm(6);
gamma=perm(3);
gammap=perm(4);
Ga=zeros(nr,ns);
%define angles between rotor (rows) and stator (columns) teeth
phi=zeros(nr,ns);
phi(1,1)=phi_1;
phi(2,1)=phi(1,1) + 2*pi/nr;
for j=2:ns
phi(1,j)=phi(1,j-1) – 2*pi/ns;
phi(2,j)=phi(1,j) + 2*pi/nr;
end
%make sure that the angle is in the first fifth (it’s periodic every 1/5th
%of a turn)
for j=1:nr
for k=1:ns
while phi(j,k)<0
phi(j,k)=phi(j,k)+2*pi;
end
while phi(j,k)>2*pi/5
phi(j,k)=phi(j,k)-2*pi/5;
end
%permeances as a function of the angle
if 0<=phi(k,j) && phi(k,j)<gammap || 2*pi/n – gammap<=phi(k,j) && phi(k,j)<=2*pi/n
Ga(k,j)=G_amax;
elseif gammap<=phi(k,j) && phi(k,j)<=gamma
Ga(k,j)=G_amax/2 * (1+cos(pi*(phi(k,j)-gammap)/(gamma-gammap)));
elseif 2*pi/n – gamma<=phi(k,j) && phi(k,j)<=2*pi/n – gammap
Ga(k,j)=G_amax/2 * (1+cos(pi*(phi(k,j)-2*pi/n+gammap)/(gamma-gammap)));
else
Ga(k,j)=0;
end
end
end
When I run the simulation, I get the following error:
Error:A signal of unbounded array type is not supported on ‘Input Port 1’ of block ‘air_gap/Scope2’. For a list of supported data types, see the block documentation page.
If I try setting the size of the matrix Ga to the one that it’s supposed to have ([2,3]) in the explore section instead of the predetermined -1, I get this error:
Error:The signal at ‘Output Port 1’ of ‘air_gap/MATLAB Function2’ is a variable-size signal with a nondiscrete sample time. The sample time for any variable-size signal must be discrete.
However, I want to be able to use continuous signals instead of discrete ones. Is there a way to do so? And if not, how do I switch it to discrete?
Thanks! simulink, variable-size, signal size, simulation, error, workspace MATLAB Answers — New Questions
Output array from Python called function
I call a MATLAB function from my python script, where the output of the MATLAB function is a 6×801 matrix. When I call the function in python however, I only get the first column (6×1 vector) as my output in python.
Inside python I call:
eng.matlab.engine.start_matlab()
X_exact = eng.testplot(randalt,nargout=1)
Where testplot is the function being called, randalt is a float input parameter to the function.I call a MATLAB function from my python script, where the output of the MATLAB function is a 6×801 matrix. When I call the function in python however, I only get the first column (6×1 vector) as my output in python.
Inside python I call:
eng.matlab.engine.start_matlab()
X_exact = eng.testplot(randalt,nargout=1)
Where testplot is the function being called, randalt is a float input parameter to the function. I call a MATLAB function from my python script, where the output of the MATLAB function is a 6×801 matrix. When I call the function in python however, I only get the first column (6×1 vector) as my output in python.
Inside python I call:
eng.matlab.engine.start_matlab()
X_exact = eng.testplot(randalt,nargout=1)
Where testplot is the function being called, randalt is a float input parameter to the function. matlab, python MATLAB Answers — New Questions
How to run selected matlab code?
Hi,
How can I execute highlighted code?
I do not want to run code of a particular sector but the code that I just highilght. That is, particular lines
MatlabR2022a.
BestHi,
How can I execute highlighted code?
I do not want to run code of a particular sector but the code that I just highilght. That is, particular lines
MatlabR2022a.
Best Hi,
How can I execute highlighted code?
I do not want to run code of a particular sector but the code that I just highilght. That is, particular lines
MatlabR2022a.
Best code, execute MATLAB Answers — New Questions
Mean shift clustering – issue with finding the center of my clusters
Hi all, as you can see from the attached image, I cannot detect the center of my dots (in blu) by using the mean shift clustering. I will report the code below and I want to point out that I got the same result also chaining the bandwidht with any kind of number. Thanks a lot for helping me.
my code:
%%
% Import the data
% Prompt the user to choose a file
[filename, filepath] = uigetfile(‘*.txt’, ‘Select a text file’);
file_name = filename;
remove = ‘.txt’;
file_name_clean = strrep(file_name, remove, ”);
%%
% Plotting
plot_name = [‘Intensity_’ file_name_clean ‘.svg’];
% Import data from text file
opts = delimitedTextImportOptions("NumVariables", 28);
opts.DataLines = [2, Inf];
opts.Delimiter = "t";
opts.VariableNames = ["channel_name", "x", "y", "x_c", "y_c"];
opts.SelectedVariableNames = ["x", "y"]; % Only select the x and y columns
opts.VariableTypes = ["string", "double", "double", "double", "double"];
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% Construct the full file path
file_path = fullfile(filepath, file_name);
data = readmatrix(file_path, opts);
% Perform Mean Shift clustering
bandwidth = 50; % bandwidth parameter for Mean Shift
[cluster_centers, data2cluster, cluster2dataCell] = MeanShiftCluster(data, bandwidth);
% Plotting the data with logarithmic x-axis and error bars for averages and standard deviations
figure;
plot(data(:,2), data(:,1), ‘.’, ‘MarkerSize’, 10, ‘DisplayName’, ‘XY coordinates’);
hold on;
% Set x-axis limit starting from 0
xlim([0, max(data(:,2))]);
% Set y-axis limit starting from 0
ylim([0, max(data(:,1))]);
% Plot cluster centers
hold on;
plot(cluster_centers(:,2), cluster_centers(:,1), ‘kx’, ‘MarkerSize’, 15, ‘LineWidth’, 3, ‘DisplayName’, ‘Cluster Centers’);
hold off;
xlabel(‘X’);
ylabel(‘Y’);
title(‘Mean Shift Clustering’);
legend(‘XY coordinates’, ‘Cluster Centers’);Hi all, as you can see from the attached image, I cannot detect the center of my dots (in blu) by using the mean shift clustering. I will report the code below and I want to point out that I got the same result also chaining the bandwidht with any kind of number. Thanks a lot for helping me.
my code:
%%
% Import the data
% Prompt the user to choose a file
[filename, filepath] = uigetfile(‘*.txt’, ‘Select a text file’);
file_name = filename;
remove = ‘.txt’;
file_name_clean = strrep(file_name, remove, ”);
%%
% Plotting
plot_name = [‘Intensity_’ file_name_clean ‘.svg’];
% Import data from text file
opts = delimitedTextImportOptions("NumVariables", 28);
opts.DataLines = [2, Inf];
opts.Delimiter = "t";
opts.VariableNames = ["channel_name", "x", "y", "x_c", "y_c"];
opts.SelectedVariableNames = ["x", "y"]; % Only select the x and y columns
opts.VariableTypes = ["string", "double", "double", "double", "double"];
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% Construct the full file path
file_path = fullfile(filepath, file_name);
data = readmatrix(file_path, opts);
% Perform Mean Shift clustering
bandwidth = 50; % bandwidth parameter for Mean Shift
[cluster_centers, data2cluster, cluster2dataCell] = MeanShiftCluster(data, bandwidth);
% Plotting the data with logarithmic x-axis and error bars for averages and standard deviations
figure;
plot(data(:,2), data(:,1), ‘.’, ‘MarkerSize’, 10, ‘DisplayName’, ‘XY coordinates’);
hold on;
% Set x-axis limit starting from 0
xlim([0, max(data(:,2))]);
% Set y-axis limit starting from 0
ylim([0, max(data(:,1))]);
% Plot cluster centers
hold on;
plot(cluster_centers(:,2), cluster_centers(:,1), ‘kx’, ‘MarkerSize’, 15, ‘LineWidth’, 3, ‘DisplayName’, ‘Cluster Centers’);
hold off;
xlabel(‘X’);
ylabel(‘Y’);
title(‘Mean Shift Clustering’);
legend(‘XY coordinates’, ‘Cluster Centers’); Hi all, as you can see from the attached image, I cannot detect the center of my dots (in blu) by using the mean shift clustering. I will report the code below and I want to point out that I got the same result also chaining the bandwidht with any kind of number. Thanks a lot for helping me.
my code:
%%
% Import the data
% Prompt the user to choose a file
[filename, filepath] = uigetfile(‘*.txt’, ‘Select a text file’);
file_name = filename;
remove = ‘.txt’;
file_name_clean = strrep(file_name, remove, ”);
%%
% Plotting
plot_name = [‘Intensity_’ file_name_clean ‘.svg’];
% Import data from text file
opts = delimitedTextImportOptions("NumVariables", 28);
opts.DataLines = [2, Inf];
opts.Delimiter = "t";
opts.VariableNames = ["channel_name", "x", "y", "x_c", "y_c"];
opts.SelectedVariableNames = ["x", "y"]; % Only select the x and y columns
opts.VariableTypes = ["string", "double", "double", "double", "double"];
opts.ExtraColumnsRule = "ignore";
opts.EmptyLineRule = "read";
% Construct the full file path
file_path = fullfile(filepath, file_name);
data = readmatrix(file_path, opts);
% Perform Mean Shift clustering
bandwidth = 50; % bandwidth parameter for Mean Shift
[cluster_centers, data2cluster, cluster2dataCell] = MeanShiftCluster(data, bandwidth);
% Plotting the data with logarithmic x-axis and error bars for averages and standard deviations
figure;
plot(data(:,2), data(:,1), ‘.’, ‘MarkerSize’, 10, ‘DisplayName’, ‘XY coordinates’);
hold on;
% Set x-axis limit starting from 0
xlim([0, max(data(:,2))]);
% Set y-axis limit starting from 0
ylim([0, max(data(:,1))]);
% Plot cluster centers
hold on;
plot(cluster_centers(:,2), cluster_centers(:,1), ‘kx’, ‘MarkerSize’, 15, ‘LineWidth’, 3, ‘DisplayName’, ‘Cluster Centers’);
hold off;
xlabel(‘X’);
ylabel(‘Y’);
title(‘Mean Shift Clustering’);
legend(‘XY coordinates’, ‘Cluster Centers’); mean shift clustering MATLAB Answers — New Questions
MATLAB Report Generator – Edit PDF page margins in sections.
Hi,
I built a pdf report using mlreportgen.report.Report() function. I want to edit heading format e.g. margin size around the pages. I found examples but the function Document() is used and I’d rather keep Report() function. I also found example using Report() but I can only edit title page and table of content format. I can’t modify what’s inside a section for instance.
From what I read, I should edit the pdf template to achieve that. But I can’t find an easy way to edit *.pdftx files. I unzipped it and played with docpart_templates.html and root.html but I’m really not a html expert. Is there a tool to edit the template easily or is there a way to modify properties of chapter, section, paragraph, etc. using code in my script?
Here’s my code. The template ‘Default_PDF_Template.pdftx’ is a copy of the built-in template "Default PDF Template" I took in Report Explorer. I assume the template can be edited in Report Explorer but I can figure out how.
Thanks in advance!
import mlreportgen.report.*
import mlreportgen.dom.*
% Create report
rpt = Report(‘MyReport’, ‘pdf’,’Default_PDF_Template.pdftx’);
open(rpt);
% Add a title page
append(rpt, TitlePage(Title=’My Report’));
% Add table of content
toc = TableOfContents;
append(rpt, toc);
% Create all sections
sect_1 = Section(Title=’Simulation Results’);
sect_1_1 = Section(Title=’Signal Description’);
sect_2 = Section(Title=’Parameters’);
% Append sections
append(sect_1, sect_1_1);
append(rpt, sect_1);
append(rpt, sect_2);
% Close and show report
close(rpt);
rptview(rpt);Hi,
I built a pdf report using mlreportgen.report.Report() function. I want to edit heading format e.g. margin size around the pages. I found examples but the function Document() is used and I’d rather keep Report() function. I also found example using Report() but I can only edit title page and table of content format. I can’t modify what’s inside a section for instance.
From what I read, I should edit the pdf template to achieve that. But I can’t find an easy way to edit *.pdftx files. I unzipped it and played with docpart_templates.html and root.html but I’m really not a html expert. Is there a tool to edit the template easily or is there a way to modify properties of chapter, section, paragraph, etc. using code in my script?
Here’s my code. The template ‘Default_PDF_Template.pdftx’ is a copy of the built-in template "Default PDF Template" I took in Report Explorer. I assume the template can be edited in Report Explorer but I can figure out how.
Thanks in advance!
import mlreportgen.report.*
import mlreportgen.dom.*
% Create report
rpt = Report(‘MyReport’, ‘pdf’,’Default_PDF_Template.pdftx’);
open(rpt);
% Add a title page
append(rpt, TitlePage(Title=’My Report’));
% Add table of content
toc = TableOfContents;
append(rpt, toc);
% Create all sections
sect_1 = Section(Title=’Simulation Results’);
sect_1_1 = Section(Title=’Signal Description’);
sect_2 = Section(Title=’Parameters’);
% Append sections
append(sect_1, sect_1_1);
append(rpt, sect_1);
append(rpt, sect_2);
% Close and show report
close(rpt);
rptview(rpt); Hi,
I built a pdf report using mlreportgen.report.Report() function. I want to edit heading format e.g. margin size around the pages. I found examples but the function Document() is used and I’d rather keep Report() function. I also found example using Report() but I can only edit title page and table of content format. I can’t modify what’s inside a section for instance.
From what I read, I should edit the pdf template to achieve that. But I can’t find an easy way to edit *.pdftx files. I unzipped it and played with docpart_templates.html and root.html but I’m really not a html expert. Is there a tool to edit the template easily or is there a way to modify properties of chapter, section, paragraph, etc. using code in my script?
Here’s my code. The template ‘Default_PDF_Template.pdftx’ is a copy of the built-in template "Default PDF Template" I took in Report Explorer. I assume the template can be edited in Report Explorer but I can figure out how.
Thanks in advance!
import mlreportgen.report.*
import mlreportgen.dom.*
% Create report
rpt = Report(‘MyReport’, ‘pdf’,’Default_PDF_Template.pdftx’);
open(rpt);
% Add a title page
append(rpt, TitlePage(Title=’My Report’));
% Add table of content
toc = TableOfContents;
append(rpt, toc);
% Create all sections
sect_1 = Section(Title=’Simulation Results’);
sect_1_1 = Section(Title=’Signal Description’);
sect_2 = Section(Title=’Parameters’);
% Append sections
append(sect_1, sect_1_1);
append(rpt, sect_1);
append(rpt, sect_2);
% Close and show report
close(rpt);
rptview(rpt); report generator, pdf template, pdf report MATLAB Answers — New Questions
Why does the tiledlayout keep the space between tiles?
dear community,
i have a tiledlayout with TileSpacing set to ‘tight’, but the upper row keeps space below it, altough there is noting to keep space for. there is also no whitespace title in row 2 or something like that. Any idea? I am on 2022a.
fig=openfig(‘spaceBetweenTilesNotClosing.fig’);
annotation("rectangle",’Position’,[0.0563,0.629,0.9115,0.09708],’Color’,’g’);
tl=findall(fig,’type’,’tiledlayout’);
tldear community,
i have a tiledlayout with TileSpacing set to ‘tight’, but the upper row keeps space below it, altough there is noting to keep space for. there is also no whitespace title in row 2 or something like that. Any idea? I am on 2022a.
fig=openfig(‘spaceBetweenTilesNotClosing.fig’);
annotation("rectangle",’Position’,[0.0563,0.629,0.9115,0.09708],’Color’,’g’);
tl=findall(fig,’type’,’tiledlayout’);
tl dear community,
i have a tiledlayout with TileSpacing set to ‘tight’, but the upper row keeps space below it, altough there is noting to keep space for. there is also no whitespace title in row 2 or something like that. Any idea? I am on 2022a.
fig=openfig(‘spaceBetweenTilesNotClosing.fig’);
annotation("rectangle",’Position’,[0.0563,0.629,0.9115,0.09708],’Color’,’g’);
tl=findall(fig,’type’,’tiledlayout’);
tl tiledlayout, spacing, whitespace MATLAB Answers — New Questions
How to issue and execute commands in the Command Window of another MATLAB instance
I would like to have two instances of MATLAB running on my computer with some interaction between the two instances.
I am running MATLAB (R2024a) Update 2 on a Windows 10 computer.
Specifically I would like to:
Open a first instance of MATLAB in the usual way from the Window desktop
From the first instance of MATLAB open a second instance of MATLAB (ideally without another user interface opening up)
From the first instance of MATLAB tell the second instance of MATLAB to run a .m file
Run some code on the first instance of MATLAB
From the first instance of MATLAB tell the second instance of MATLABt to run another .m file
From the first instance of MATLAB close the second instance of MATLAB e.g. run the quit command
I have seen in other posts that this could be done using either a com server or .Net. I looked into the com server approach, but will have difficulties with that, because in our corporate installation, it is difficult to obtain needed administrative privileges.I am therefore most interested in the .Net approach. Also, I do not have the Parallel Processing Toolbox, so I can not use approaches that use that.
Following from some other related postings, e.g. ( https://www.mathworks.com/matlabcentral/answers/586706-how-to-redirect-standard-input-and-standard-output-using-net-system-diagnostics-process?s_tid=prof_contriblnk) I tried doing running this Hello World example from the first instance of MATLAB
NET.addAssembly(‘System’)
matlabProcess = System.Diagnostics.Process()
matlabProcess.StartInfo.FileName = ‘matlab’
matlabProcess.StartInfo.Arguments = ‘-nosplash’
matlabProcess.StartInfo.UseShellExecute = false;
matlabProcess.StartInfo.RedirectStandardInput = true;
matlabProcess.StartInfo.RedirectStandardOutput = true;
matlabProcess.Start();
matlabProcess.StandardInput.WriteLine("disp(‘Hello from MATLAB’)")
This sucessfully opens the second MATLAB instance, but no commands (e.g. disp(‘Hello from MATLAB’) appear in the command window of the second instance.
I know that there are simpler ways to launch a second instance of MATLAB and have it run just one command, however I need to start some processes running on the second instance, use the results of these in the first instance, and then thave the second instance run some code to gracefully stop some processes and shut down.
I posted an earlier version of this inquiry as a comment to the related question https://www.mathworks.com/matlabcentral/answers/1435767-how-to-opening-1-instance-of-matlab-from-matlab-but-accessing-it-multiple-times, but am now posting it here as its own question, along with some specific code that I tried, so it will reach others that might not be following that older question.
Thanks for any suggestions you can provide.
Best Wishes,
JonI would like to have two instances of MATLAB running on my computer with some interaction between the two instances.
I am running MATLAB (R2024a) Update 2 on a Windows 10 computer.
Specifically I would like to:
Open a first instance of MATLAB in the usual way from the Window desktop
From the first instance of MATLAB open a second instance of MATLAB (ideally without another user interface opening up)
From the first instance of MATLAB tell the second instance of MATLAB to run a .m file
Run some code on the first instance of MATLAB
From the first instance of MATLAB tell the second instance of MATLABt to run another .m file
From the first instance of MATLAB close the second instance of MATLAB e.g. run the quit command
I have seen in other posts that this could be done using either a com server or .Net. I looked into the com server approach, but will have difficulties with that, because in our corporate installation, it is difficult to obtain needed administrative privileges.I am therefore most interested in the .Net approach. Also, I do not have the Parallel Processing Toolbox, so I can not use approaches that use that.
Following from some other related postings, e.g. ( https://www.mathworks.com/matlabcentral/answers/586706-how-to-redirect-standard-input-and-standard-output-using-net-system-diagnostics-process?s_tid=prof_contriblnk) I tried doing running this Hello World example from the first instance of MATLAB
NET.addAssembly(‘System’)
matlabProcess = System.Diagnostics.Process()
matlabProcess.StartInfo.FileName = ‘matlab’
matlabProcess.StartInfo.Arguments = ‘-nosplash’
matlabProcess.StartInfo.UseShellExecute = false;
matlabProcess.StartInfo.RedirectStandardInput = true;
matlabProcess.StartInfo.RedirectStandardOutput = true;
matlabProcess.Start();
matlabProcess.StandardInput.WriteLine("disp(‘Hello from MATLAB’)")
This sucessfully opens the second MATLAB instance, but no commands (e.g. disp(‘Hello from MATLAB’) appear in the command window of the second instance.
I know that there are simpler ways to launch a second instance of MATLAB and have it run just one command, however I need to start some processes running on the second instance, use the results of these in the first instance, and then thave the second instance run some code to gracefully stop some processes and shut down.
I posted an earlier version of this inquiry as a comment to the related question https://www.mathworks.com/matlabcentral/answers/1435767-how-to-opening-1-instance-of-matlab-from-matlab-but-accessing-it-multiple-times, but am now posting it here as its own question, along with some specific code that I tried, so it will reach others that might not be following that older question.
Thanks for any suggestions you can provide.
Best Wishes,
Jon I would like to have two instances of MATLAB running on my computer with some interaction between the two instances.
I am running MATLAB (R2024a) Update 2 on a Windows 10 computer.
Specifically I would like to:
Open a first instance of MATLAB in the usual way from the Window desktop
From the first instance of MATLAB open a second instance of MATLAB (ideally without another user interface opening up)
From the first instance of MATLAB tell the second instance of MATLAB to run a .m file
Run some code on the first instance of MATLAB
From the first instance of MATLAB tell the second instance of MATLABt to run another .m file
From the first instance of MATLAB close the second instance of MATLAB e.g. run the quit command
I have seen in other posts that this could be done using either a com server or .Net. I looked into the com server approach, but will have difficulties with that, because in our corporate installation, it is difficult to obtain needed administrative privileges.I am therefore most interested in the .Net approach. Also, I do not have the Parallel Processing Toolbox, so I can not use approaches that use that.
Following from some other related postings, e.g. ( https://www.mathworks.com/matlabcentral/answers/586706-how-to-redirect-standard-input-and-standard-output-using-net-system-diagnostics-process?s_tid=prof_contriblnk) I tried doing running this Hello World example from the first instance of MATLAB
NET.addAssembly(‘System’)
matlabProcess = System.Diagnostics.Process()
matlabProcess.StartInfo.FileName = ‘matlab’
matlabProcess.StartInfo.Arguments = ‘-nosplash’
matlabProcess.StartInfo.UseShellExecute = false;
matlabProcess.StartInfo.RedirectStandardInput = true;
matlabProcess.StartInfo.RedirectStandardOutput = true;
matlabProcess.Start();
matlabProcess.StandardInput.WriteLine("disp(‘Hello from MATLAB’)")
This sucessfully opens the second MATLAB instance, but no commands (e.g. disp(‘Hello from MATLAB’) appear in the command window of the second instance.
I know that there are simpler ways to launch a second instance of MATLAB and have it run just one command, however I need to start some processes running on the second instance, use the results of these in the first instance, and then thave the second instance run some code to gracefully stop some processes and shut down.
I posted an earlier version of this inquiry as a comment to the related question https://www.mathworks.com/matlabcentral/answers/1435767-how-to-opening-1-instance-of-matlab-from-matlab-but-accessing-it-multiple-times, but am now posting it here as its own question, along with some specific code that I tried, so it will reach others that might not be following that older question.
Thanks for any suggestions you can provide.
Best Wishes,
Jon multiple instances MATLAB Answers — New Questions
Fisher’s z transform with atanh() to rho goes to infinity
I have run Spearman’s correlations usign the following:
[rho, pval] = corr(A,B, ‘type’, ‘Spearman’, ‘rows’, ‘complete’);
I would like to conduct a fisher’s z transform on my rho values so that I can compare them later on.
Doing
atanh(rho)
sometimes outputs Inf or -Inf (particularly when the output of rho is 1 / -1). In cases where the output of rho is 1.000 or -1.000 this doesn’t occur.
I’m not entirely sure what I have missed or how I could fix this issue. Any help will be very much appreciated.I have run Spearman’s correlations usign the following:
[rho, pval] = corr(A,B, ‘type’, ‘Spearman’, ‘rows’, ‘complete’);
I would like to conduct a fisher’s z transform on my rho values so that I can compare them later on.
Doing
atanh(rho)
sometimes outputs Inf or -Inf (particularly when the output of rho is 1 / -1). In cases where the output of rho is 1.000 or -1.000 this doesn’t occur.
I’m not entirely sure what I have missed or how I could fix this issue. Any help will be very much appreciated. I have run Spearman’s correlations usign the following:
[rho, pval] = corr(A,B, ‘type’, ‘Spearman’, ‘rows’, ‘complete’);
I would like to conduct a fisher’s z transform on my rho values so that I can compare them later on.
Doing
atanh(rho)
sometimes outputs Inf or -Inf (particularly when the output of rho is 1 / -1). In cases where the output of rho is 1.000 or -1.000 this doesn’t occur.
I’m not entirely sure what I have missed or how I could fix this issue. Any help will be very much appreciated. statistics, z transform MATLAB Answers — New Questions
How to choose from a list of strings all the string with specific pattren follows by a digits
Hello,
I use FiledTrip to analyze iEEG data and stack with the following problem.
I try to use the ‘d’ to extract all the channels that start in the letters ‘RHL’ and are followed by any digit, but for some reason, it is not working.
I tried another approach that looked very similar, and I was expected to behave similarly. These is the two approaches:
When I defined depths_LH as:
depths_LH = {‘RHL*’};
I get the desired result. But when I defined depths_LH as
depths_LH = {‘RHLd’};
The code is not working (There is an error, but it seems empty)
This is the entire code:
depths_LH = {‘RHLd’};
reref_depthsLH = {‘RHL1’};
for d = 1:numel(depths_LH)
cfg = [];
cfg.channel = ft_channelselection(depths_LH{d}, data_prepro_ds_tr_ar.label);
disp([‘Selected channels (LH, pattern: ‘, depths_LH{d}, ‘):’]);
disp(cfg.channel); % Print the selected channels for this iteration
cfg.reref = ‘yes’;
cfg.refchannel = reref_depthsLH;
cfg.refmethod = ‘avg’;
cfg.updatesens = ‘yes’;
reref_depthsLH{d} = ft_preprocessing(cfg, data_prepro_ds_tr_ar);
end
Does anyone know what the problem is?
Thank you.Hello,
I use FiledTrip to analyze iEEG data and stack with the following problem.
I try to use the ‘d’ to extract all the channels that start in the letters ‘RHL’ and are followed by any digit, but for some reason, it is not working.
I tried another approach that looked very similar, and I was expected to behave similarly. These is the two approaches:
When I defined depths_LH as:
depths_LH = {‘RHL*’};
I get the desired result. But when I defined depths_LH as
depths_LH = {‘RHLd’};
The code is not working (There is an error, but it seems empty)
This is the entire code:
depths_LH = {‘RHLd’};
reref_depthsLH = {‘RHL1’};
for d = 1:numel(depths_LH)
cfg = [];
cfg.channel = ft_channelselection(depths_LH{d}, data_prepro_ds_tr_ar.label);
disp([‘Selected channels (LH, pattern: ‘, depths_LH{d}, ‘):’]);
disp(cfg.channel); % Print the selected channels for this iteration
cfg.reref = ‘yes’;
cfg.refchannel = reref_depthsLH;
cfg.refmethod = ‘avg’;
cfg.updatesens = ‘yes’;
reref_depthsLH{d} = ft_preprocessing(cfg, data_prepro_ds_tr_ar);
end
Does anyone know what the problem is?
Thank you. Hello,
I use FiledTrip to analyze iEEG data and stack with the following problem.
I try to use the ‘d’ to extract all the channels that start in the letters ‘RHL’ and are followed by any digit, but for some reason, it is not working.
I tried another approach that looked very similar, and I was expected to behave similarly. These is the two approaches:
When I defined depths_LH as:
depths_LH = {‘RHL*’};
I get the desired result. But when I defined depths_LH as
depths_LH = {‘RHLd’};
The code is not working (There is an error, but it seems empty)
This is the entire code:
depths_LH = {‘RHLd’};
reref_depthsLH = {‘RHL1’};
for d = 1:numel(depths_LH)
cfg = [];
cfg.channel = ft_channelselection(depths_LH{d}, data_prepro_ds_tr_ar.label);
disp([‘Selected channels (LH, pattern: ‘, depths_LH{d}, ‘):’]);
disp(cfg.channel); % Print the selected channels for this iteration
cfg.reref = ‘yes’;
cfg.refchannel = reref_depthsLH;
cfg.refmethod = ‘avg’;
cfg.updatesens = ‘yes’;
reref_depthsLH{d} = ft_preprocessing(cfg, data_prepro_ds_tr_ar);
end
Does anyone know what the problem is?
Thank you. strings MATLAB Answers — New Questions
General CRC Generator – How to determine generator polynomial
Hello everyone,
In my current project I have to perform a CRC check. At first I had to do this using a regular block diagram, but now I would like to use the CRC generator block provided by Matlab. Unfortunately, I don’t know how to determine the polynomial from a given block diagram.
Like here in the example: How do I get the given polynomial from the diagram? (https://de.mathworks.com/help/comm/ref/generalcrcgenerator.html#)Hello everyone,
In my current project I have to perform a CRC check. At first I had to do this using a regular block diagram, but now I would like to use the CRC generator block provided by Matlab. Unfortunately, I don’t know how to determine the polynomial from a given block diagram.
Like here in the example: How do I get the given polynomial from the diagram? (https://de.mathworks.com/help/comm/ref/generalcrcgenerator.html#) Hello everyone,
In my current project I have to perform a CRC check. At first I had to do this using a regular block diagram, but now I would like to use the CRC generator block provided by Matlab. Unfortunately, I don’t know how to determine the polynomial from a given block diagram.
Like here in the example: How do I get the given polynomial from the diagram? (https://de.mathworks.com/help/comm/ref/generalcrcgenerator.html#) simulink, crc, polynomial MATLAB Answers — New Questions
How to plot Chroma_Features for an audio file?
%% Read in the file
clearvars;
close all;
file_path = ‘C:/Users/nimae/Downloads/audio_2024-05-12_17-59-56.ogg’;
[audio_data, sample_rate] = audioread(file_path);
%% Play original file
% pOrig = audioplayer(audio_data, sample_rate);
% pOrig.play;
%% Plot both audio channels
N = size(audio_data,1); % Determine total number of samples in audio file
figure;
subplot(2,1,1);
stem(1:N, audio_data(:,1));
title(‘Left Channel’);
subplot(2,1,2);
% Increase resolution by increasing the number of points in FFT
N = 2^nextpow2(length(audio_data(:,1)));
% Plot the spectrum with increased resolution
df = sample_rate / N;
w = (-N/2 : N/2 – 1) * df;
y = fft(audio_data(:,1), N) / N; % For normalizing, but not needed for our analysis
y2 = fftshift(y);
% Define the desired frequency range
f_min = 0; % Minimum frequency in Hz
f_max = 5.6e4; % Maximum frequency in Hz
% Find the corresponding indices in the frequency axis
idx_min = find(w >= f_min, 1, ‘first’);
idx_max = find(w <= f_max, 1, ‘last’);
% Plot the spectrum with increased resolution and within the desired frequency range
figure;
plot(w(idx_min:idx_max), abs(y2(idx_min:idx_max)));
xlabel(‘Frequency (Hz)’);
ylabel(‘Magnitude’);
title(‘Spectrum of Audio Signal’);
grid on;
hold on; % Add subsequent plots to the same figure
% Frequencies you provided
frequencies = [
16.35 32.702 65.404 130.808 261.616 523.232 1046.464 2092.928 4185.856 8371.712;
17.32 34.648 69.296 138.592 277.184 554.368 1108.736 2217.472 4434.944 8869.888;
18.35 36.708 73.416 146.832 293.664 587.328 1174.656 2349.312 4698.624 9397.248;
19.45 38.89 77.78 155.56 311.12 622.24 1244.48 2488.96 4977.92 9955.84;
20.60 41.202 82.404 164.808 329.616 659.232 1318.464 2636.928 5273.856 10547.712;
21.83 43.654 87.308 174.616 349.232 698.464 1396.928 2793.856 5587.712 11175.424;
23.12 46.248 92.496 184.992 369.984 739.968 1479.936 2959.872 5919.744 11839.488;
24.50 48.998 97.996 195.992 391.984 783.968 1567.936 3135.872 6271.744 12543.488;
25.96 51.912 103.824 207.648 415.296 830.592 1661.184 3322.368 6644.736 13289.472;
27.50 55 110 220 440 880 1760 3520 7040 14080;
29.14 58.27 116.54 233.08 466.16 932.32 1864.64 3729.28 7458.56 14917.12;
30.87 61.736 123.472 246.944 493.888 987.776 1975.552 3951.104 7902.208 15804.416
];
% Plot the frequencies you provided
for i = 1:size(frequencies, 1)
plot(frequencies(i, :), zeros(size(frequencies, 2)), ‘o’, ‘MarkerSize’, 5);
end
legend(‘Spectrum’, ‘Frequencies provided’);
% Convert frequencies to chroma values
chroma_values = mod(round(log2(frequencies/440) * 12), 12);
% Plot the chroma diagram
figure;
imagesc(chroma_values);
colormap(jet);
colorbar;
xlabel(‘Time’);
ylabel(‘Chroma’);
title(‘Chroma Diagram’);
function Y = chromagram_IF(d,sample_rate,fftlen,~,f_ctr,f_sd)
%% Function Definitions
% Calculate the chroma matrix. Use a long FFT to discriminate
% spectral lines as well as possible (2048 is the default value)
cfftlen=2048;
C = chromagram_IF(audio_data,sample_rate,cfftlen);
% The frame advance is always one quarter of the FFT length. Thus,
% the columns of C are at timebase of fftlen/4/sr
tt = (1:size(C,2))*cfftlen/4/sample_rate;
% Plot spectrogram using a shorter window
subplot(311)
sfftlen = 512;
specgram(audio_data,sfftlen,sample_rate);
% Always use a 60 dB colormap range
clim(max(clim)+[-60 0])
% .. and look only at the bottom 4 kHz of spectrum
axis([0 length(d)/sample_rate 0 4000])
title(‘Original Sound’)
% Now the chromagram, also on a dB magnitude scale
subplot(312)
imagesc(tt,1:12,20*log10(C+eps));
axis xy
clim(max(clim)+[-60 0])
title(‘Chromagram’)
% Y = chromagram_IF(d,sr,fftlen,nbin,f_ctr,f_sd)
% Calculate a "chromagram" of the sound in d (at sampling rate sr)
% Use windows of fftlen points, hopped by ffthop points
% Divide the octave into nbin steps
% Weight with center frequency f_ctr (in Hz) and gaussian SD f_sd
% (in octaves)
% Use instantaneous frequency to keep only real harmonics.
% 2006-09-26 dpwe@ee.columbia.edu
% Copyright (c) 2006 Columbia University.
%
% This file is part of LabROSA-coversongID
%
% LabROSA-coversongID is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License version 2 as
% published by the Free Software Foundation.
%
% LabROSA-coversongID is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with LabROSA-coversongID; if not, write to the Free Software
% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
% 02110-1301 USA
%
% See the file "COPYING" for the text of the license.
if nargin < 3; fftlen = 2048; end
%if nargin < 4; nbin = 12; end
if nargin < 5; f_ctr = 1000; end
if nargin < 6; f_sd = 1; end
%A0 = 27.5; % Hz
%A440 = 440; % Hz
%f_ctr_log = log(f_ctr/A0) / log(2);
fminl = octs2hz(hz2octs(f_ctr)-2*f_sd);
fminu = octs2hz(hz2octs(f_ctr)-f_sd);
fmaxl = octs2hz(hz2octs(f_ctr)+f_sd);
fmaxu = octs2hz(hz2octs(f_ctr)+2*f_sd);
%ffthop = fftlen/4;
nchr = 12;
% Calculate spectrogram and IF gram pitch tracks…
[p,m]=ifptrack(d,fftlen,sr,fminl,fminu,fmaxl,fmaxu);
[~,ncols] = size(p);
%disp([‘ncols = ‘,num2str(ncols)]);
% chroma-quantized IF sinusoids
Pocts = hz2octs(p+(p==0));
Pocts(p(:)==0) = 0;
% Figure best tuning alignment
nzp = find(p(:)>0);
%hist(nchr*Pmapo(nzp)-round(nchr*Pmapo(nzp)),100)
[hn,hx] = histogram(nchr*Pocts(nzp)-round(nchr*Pocts(nzp)),100);
centsoff = hx(hn == max(hn));
% Adjust tunings to align better with chroma
Pocts(nzp) = Pocts(nzp) – centsoff(1)/nchr;
% Quantize to chroma bins
PoctsQ = Pocts;
PoctsQ(nzp) = round(nchr*Pocts(nzp))/nchr;
% map IF pitches to chroma bins
Pmapc = round(nchr*(PoctsQ – floor(PoctsQ)));
Pmapc(p(:) == 0) = -1;
Pmapc(Pmapc(:) == nchr) = 0;
Y = zeros(nchr,ncols);
for t = 1:ncols
Y(:,t)=(repmat((0:(nchr-1))’,1,size(Pmapc,1))==repmat(Pmapc(:,t)’,nchr,1))*m(:,t);
end
end
hello,
i have coded this file and copied most of it from Columbian University, as you can see. I want to plot simply the chroma features for my file in variation of time, i mean determining exactly at which time which musical note is played in the file. For that we need at the X axis, time, and in Yaxis Frequencies of those musical notes(which i have provided in the "Frequencies" Matrix).
So I’d be thankful if someone can guide me a little bit through this. My code runs halfway but i don’t get the desired Chroma Diagram, said above.%% Read in the file
clearvars;
close all;
file_path = ‘C:/Users/nimae/Downloads/audio_2024-05-12_17-59-56.ogg’;
[audio_data, sample_rate] = audioread(file_path);
%% Play original file
% pOrig = audioplayer(audio_data, sample_rate);
% pOrig.play;
%% Plot both audio channels
N = size(audio_data,1); % Determine total number of samples in audio file
figure;
subplot(2,1,1);
stem(1:N, audio_data(:,1));
title(‘Left Channel’);
subplot(2,1,2);
% Increase resolution by increasing the number of points in FFT
N = 2^nextpow2(length(audio_data(:,1)));
% Plot the spectrum with increased resolution
df = sample_rate / N;
w = (-N/2 : N/2 – 1) * df;
y = fft(audio_data(:,1), N) / N; % For normalizing, but not needed for our analysis
y2 = fftshift(y);
% Define the desired frequency range
f_min = 0; % Minimum frequency in Hz
f_max = 5.6e4; % Maximum frequency in Hz
% Find the corresponding indices in the frequency axis
idx_min = find(w >= f_min, 1, ‘first’);
idx_max = find(w <= f_max, 1, ‘last’);
% Plot the spectrum with increased resolution and within the desired frequency range
figure;
plot(w(idx_min:idx_max), abs(y2(idx_min:idx_max)));
xlabel(‘Frequency (Hz)’);
ylabel(‘Magnitude’);
title(‘Spectrum of Audio Signal’);
grid on;
hold on; % Add subsequent plots to the same figure
% Frequencies you provided
frequencies = [
16.35 32.702 65.404 130.808 261.616 523.232 1046.464 2092.928 4185.856 8371.712;
17.32 34.648 69.296 138.592 277.184 554.368 1108.736 2217.472 4434.944 8869.888;
18.35 36.708 73.416 146.832 293.664 587.328 1174.656 2349.312 4698.624 9397.248;
19.45 38.89 77.78 155.56 311.12 622.24 1244.48 2488.96 4977.92 9955.84;
20.60 41.202 82.404 164.808 329.616 659.232 1318.464 2636.928 5273.856 10547.712;
21.83 43.654 87.308 174.616 349.232 698.464 1396.928 2793.856 5587.712 11175.424;
23.12 46.248 92.496 184.992 369.984 739.968 1479.936 2959.872 5919.744 11839.488;
24.50 48.998 97.996 195.992 391.984 783.968 1567.936 3135.872 6271.744 12543.488;
25.96 51.912 103.824 207.648 415.296 830.592 1661.184 3322.368 6644.736 13289.472;
27.50 55 110 220 440 880 1760 3520 7040 14080;
29.14 58.27 116.54 233.08 466.16 932.32 1864.64 3729.28 7458.56 14917.12;
30.87 61.736 123.472 246.944 493.888 987.776 1975.552 3951.104 7902.208 15804.416
];
% Plot the frequencies you provided
for i = 1:size(frequencies, 1)
plot(frequencies(i, :), zeros(size(frequencies, 2)), ‘o’, ‘MarkerSize’, 5);
end
legend(‘Spectrum’, ‘Frequencies provided’);
% Convert frequencies to chroma values
chroma_values = mod(round(log2(frequencies/440) * 12), 12);
% Plot the chroma diagram
figure;
imagesc(chroma_values);
colormap(jet);
colorbar;
xlabel(‘Time’);
ylabel(‘Chroma’);
title(‘Chroma Diagram’);
function Y = chromagram_IF(d,sample_rate,fftlen,~,f_ctr,f_sd)
%% Function Definitions
% Calculate the chroma matrix. Use a long FFT to discriminate
% spectral lines as well as possible (2048 is the default value)
cfftlen=2048;
C = chromagram_IF(audio_data,sample_rate,cfftlen);
% The frame advance is always one quarter of the FFT length. Thus,
% the columns of C are at timebase of fftlen/4/sr
tt = (1:size(C,2))*cfftlen/4/sample_rate;
% Plot spectrogram using a shorter window
subplot(311)
sfftlen = 512;
specgram(audio_data,sfftlen,sample_rate);
% Always use a 60 dB colormap range
clim(max(clim)+[-60 0])
% .. and look only at the bottom 4 kHz of spectrum
axis([0 length(d)/sample_rate 0 4000])
title(‘Original Sound’)
% Now the chromagram, also on a dB magnitude scale
subplot(312)
imagesc(tt,1:12,20*log10(C+eps));
axis xy
clim(max(clim)+[-60 0])
title(‘Chromagram’)
% Y = chromagram_IF(d,sr,fftlen,nbin,f_ctr,f_sd)
% Calculate a "chromagram" of the sound in d (at sampling rate sr)
% Use windows of fftlen points, hopped by ffthop points
% Divide the octave into nbin steps
% Weight with center frequency f_ctr (in Hz) and gaussian SD f_sd
% (in octaves)
% Use instantaneous frequency to keep only real harmonics.
% 2006-09-26 dpwe@ee.columbia.edu
% Copyright (c) 2006 Columbia University.
%
% This file is part of LabROSA-coversongID
%
% LabROSA-coversongID is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License version 2 as
% published by the Free Software Foundation.
%
% LabROSA-coversongID is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with LabROSA-coversongID; if not, write to the Free Software
% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
% 02110-1301 USA
%
% See the file "COPYING" for the text of the license.
if nargin < 3; fftlen = 2048; end
%if nargin < 4; nbin = 12; end
if nargin < 5; f_ctr = 1000; end
if nargin < 6; f_sd = 1; end
%A0 = 27.5; % Hz
%A440 = 440; % Hz
%f_ctr_log = log(f_ctr/A0) / log(2);
fminl = octs2hz(hz2octs(f_ctr)-2*f_sd);
fminu = octs2hz(hz2octs(f_ctr)-f_sd);
fmaxl = octs2hz(hz2octs(f_ctr)+f_sd);
fmaxu = octs2hz(hz2octs(f_ctr)+2*f_sd);
%ffthop = fftlen/4;
nchr = 12;
% Calculate spectrogram and IF gram pitch tracks…
[p,m]=ifptrack(d,fftlen,sr,fminl,fminu,fmaxl,fmaxu);
[~,ncols] = size(p);
%disp([‘ncols = ‘,num2str(ncols)]);
% chroma-quantized IF sinusoids
Pocts = hz2octs(p+(p==0));
Pocts(p(:)==0) = 0;
% Figure best tuning alignment
nzp = find(p(:)>0);
%hist(nchr*Pmapo(nzp)-round(nchr*Pmapo(nzp)),100)
[hn,hx] = histogram(nchr*Pocts(nzp)-round(nchr*Pocts(nzp)),100);
centsoff = hx(hn == max(hn));
% Adjust tunings to align better with chroma
Pocts(nzp) = Pocts(nzp) – centsoff(1)/nchr;
% Quantize to chroma bins
PoctsQ = Pocts;
PoctsQ(nzp) = round(nchr*Pocts(nzp))/nchr;
% map IF pitches to chroma bins
Pmapc = round(nchr*(PoctsQ – floor(PoctsQ)));
Pmapc(p(:) == 0) = -1;
Pmapc(Pmapc(:) == nchr) = 0;
Y = zeros(nchr,ncols);
for t = 1:ncols
Y(:,t)=(repmat((0:(nchr-1))’,1,size(Pmapc,1))==repmat(Pmapc(:,t)’,nchr,1))*m(:,t);
end
end
hello,
i have coded this file and copied most of it from Columbian University, as you can see. I want to plot simply the chroma features for my file in variation of time, i mean determining exactly at which time which musical note is played in the file. For that we need at the X axis, time, and in Yaxis Frequencies of those musical notes(which i have provided in the "Frequencies" Matrix).
So I’d be thankful if someone can guide me a little bit through this. My code runs halfway but i don’t get the desired Chroma Diagram, said above. %% Read in the file
clearvars;
close all;
file_path = ‘C:/Users/nimae/Downloads/audio_2024-05-12_17-59-56.ogg’;
[audio_data, sample_rate] = audioread(file_path);
%% Play original file
% pOrig = audioplayer(audio_data, sample_rate);
% pOrig.play;
%% Plot both audio channels
N = size(audio_data,1); % Determine total number of samples in audio file
figure;
subplot(2,1,1);
stem(1:N, audio_data(:,1));
title(‘Left Channel’);
subplot(2,1,2);
% Increase resolution by increasing the number of points in FFT
N = 2^nextpow2(length(audio_data(:,1)));
% Plot the spectrum with increased resolution
df = sample_rate / N;
w = (-N/2 : N/2 – 1) * df;
y = fft(audio_data(:,1), N) / N; % For normalizing, but not needed for our analysis
y2 = fftshift(y);
% Define the desired frequency range
f_min = 0; % Minimum frequency in Hz
f_max = 5.6e4; % Maximum frequency in Hz
% Find the corresponding indices in the frequency axis
idx_min = find(w >= f_min, 1, ‘first’);
idx_max = find(w <= f_max, 1, ‘last’);
% Plot the spectrum with increased resolution and within the desired frequency range
figure;
plot(w(idx_min:idx_max), abs(y2(idx_min:idx_max)));
xlabel(‘Frequency (Hz)’);
ylabel(‘Magnitude’);
title(‘Spectrum of Audio Signal’);
grid on;
hold on; % Add subsequent plots to the same figure
% Frequencies you provided
frequencies = [
16.35 32.702 65.404 130.808 261.616 523.232 1046.464 2092.928 4185.856 8371.712;
17.32 34.648 69.296 138.592 277.184 554.368 1108.736 2217.472 4434.944 8869.888;
18.35 36.708 73.416 146.832 293.664 587.328 1174.656 2349.312 4698.624 9397.248;
19.45 38.89 77.78 155.56 311.12 622.24 1244.48 2488.96 4977.92 9955.84;
20.60 41.202 82.404 164.808 329.616 659.232 1318.464 2636.928 5273.856 10547.712;
21.83 43.654 87.308 174.616 349.232 698.464 1396.928 2793.856 5587.712 11175.424;
23.12 46.248 92.496 184.992 369.984 739.968 1479.936 2959.872 5919.744 11839.488;
24.50 48.998 97.996 195.992 391.984 783.968 1567.936 3135.872 6271.744 12543.488;
25.96 51.912 103.824 207.648 415.296 830.592 1661.184 3322.368 6644.736 13289.472;
27.50 55 110 220 440 880 1760 3520 7040 14080;
29.14 58.27 116.54 233.08 466.16 932.32 1864.64 3729.28 7458.56 14917.12;
30.87 61.736 123.472 246.944 493.888 987.776 1975.552 3951.104 7902.208 15804.416
];
% Plot the frequencies you provided
for i = 1:size(frequencies, 1)
plot(frequencies(i, :), zeros(size(frequencies, 2)), ‘o’, ‘MarkerSize’, 5);
end
legend(‘Spectrum’, ‘Frequencies provided’);
% Convert frequencies to chroma values
chroma_values = mod(round(log2(frequencies/440) * 12), 12);
% Plot the chroma diagram
figure;
imagesc(chroma_values);
colormap(jet);
colorbar;
xlabel(‘Time’);
ylabel(‘Chroma’);
title(‘Chroma Diagram’);
function Y = chromagram_IF(d,sample_rate,fftlen,~,f_ctr,f_sd)
%% Function Definitions
% Calculate the chroma matrix. Use a long FFT to discriminate
% spectral lines as well as possible (2048 is the default value)
cfftlen=2048;
C = chromagram_IF(audio_data,sample_rate,cfftlen);
% The frame advance is always one quarter of the FFT length. Thus,
% the columns of C are at timebase of fftlen/4/sr
tt = (1:size(C,2))*cfftlen/4/sample_rate;
% Plot spectrogram using a shorter window
subplot(311)
sfftlen = 512;
specgram(audio_data,sfftlen,sample_rate);
% Always use a 60 dB colormap range
clim(max(clim)+[-60 0])
% .. and look only at the bottom 4 kHz of spectrum
axis([0 length(d)/sample_rate 0 4000])
title(‘Original Sound’)
% Now the chromagram, also on a dB magnitude scale
subplot(312)
imagesc(tt,1:12,20*log10(C+eps));
axis xy
clim(max(clim)+[-60 0])
title(‘Chromagram’)
% Y = chromagram_IF(d,sr,fftlen,nbin,f_ctr,f_sd)
% Calculate a "chromagram" of the sound in d (at sampling rate sr)
% Use windows of fftlen points, hopped by ffthop points
% Divide the octave into nbin steps
% Weight with center frequency f_ctr (in Hz) and gaussian SD f_sd
% (in octaves)
% Use instantaneous frequency to keep only real harmonics.
% 2006-09-26 dpwe@ee.columbia.edu
% Copyright (c) 2006 Columbia University.
%
% This file is part of LabROSA-coversongID
%
% LabROSA-coversongID is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License version 2 as
% published by the Free Software Foundation.
%
% LabROSA-coversongID is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with LabROSA-coversongID; if not, write to the Free Software
% Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
% 02110-1301 USA
%
% See the file "COPYING" for the text of the license.
if nargin < 3; fftlen = 2048; end
%if nargin < 4; nbin = 12; end
if nargin < 5; f_ctr = 1000; end
if nargin < 6; f_sd = 1; end
%A0 = 27.5; % Hz
%A440 = 440; % Hz
%f_ctr_log = log(f_ctr/A0) / log(2);
fminl = octs2hz(hz2octs(f_ctr)-2*f_sd);
fminu = octs2hz(hz2octs(f_ctr)-f_sd);
fmaxl = octs2hz(hz2octs(f_ctr)+f_sd);
fmaxu = octs2hz(hz2octs(f_ctr)+2*f_sd);
%ffthop = fftlen/4;
nchr = 12;
% Calculate spectrogram and IF gram pitch tracks…
[p,m]=ifptrack(d,fftlen,sr,fminl,fminu,fmaxl,fmaxu);
[~,ncols] = size(p);
%disp([‘ncols = ‘,num2str(ncols)]);
% chroma-quantized IF sinusoids
Pocts = hz2octs(p+(p==0));
Pocts(p(:)==0) = 0;
% Figure best tuning alignment
nzp = find(p(:)>0);
%hist(nchr*Pmapo(nzp)-round(nchr*Pmapo(nzp)),100)
[hn,hx] = histogram(nchr*Pocts(nzp)-round(nchr*Pocts(nzp)),100);
centsoff = hx(hn == max(hn));
% Adjust tunings to align better with chroma
Pocts(nzp) = Pocts(nzp) – centsoff(1)/nchr;
% Quantize to chroma bins
PoctsQ = Pocts;
PoctsQ(nzp) = round(nchr*Pocts(nzp))/nchr;
% map IF pitches to chroma bins
Pmapc = round(nchr*(PoctsQ – floor(PoctsQ)));
Pmapc(p(:) == 0) = -1;
Pmapc(Pmapc(:) == nchr) = 0;
Y = zeros(nchr,ncols);
for t = 1:ncols
Y(:,t)=(repmat((0:(nchr-1))’,1,size(Pmapc,1))==repmat(Pmapc(:,t)’,nchr,1))*m(:,t);
end
end
hello,
i have coded this file and copied most of it from Columbian University, as you can see. I want to plot simply the chroma features for my file in variation of time, i mean determining exactly at which time which musical note is played in the file. For that we need at the X axis, time, and in Yaxis Frequencies of those musical notes(which i have provided in the "Frequencies" Matrix).
So I’d be thankful if someone can guide me a little bit through this. My code runs halfway but i don’t get the desired Chroma Diagram, said above. chromatography, audio MATLAB Answers — New Questions
An error occurred during simulation and the simulation was terminated
Error:An error occurred during simulation and the simulation was terminated
Caused by:
Derivative of state ‘1’ in block ‘ee4022/Battery/MPPT Solar Charge Controller/Mean/Model/integrator’ at time 0.0 is not finite. The simulation will be stopped. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances)Error:An error occurred during simulation and the simulation was terminated
Caused by:
Derivative of state ‘1’ in block ‘ee4022/Battery/MPPT Solar Charge Controller/Mean/Model/integrator’ at time 0.0 is not finite. The simulation will be stopped. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances) Error:An error occurred during simulation and the simulation was terminated
Caused by:
Derivative of state ‘1’ in block ‘ee4022/Battery/MPPT Solar Charge Controller/Mean/Model/integrator’ at time 0.0 is not finite. The simulation will be stopped. There may be a singularity in the solution. If not, try reducing the step size (either by reducing the fixed step size or by tightening the error tolerances) simulink MATLAB Answers — New Questions
How to break a waveform waveform into its constituent harmonics using FFT and see the harmonic waveforms at each frequency?
I want to use Simulink to see the harmonics of a voltage waveform. So far I have used the fft simulink tool and only found the magnitude of the harmonic frequencies. What I would like to do is issolate and observe the waveform at the different frequencies as shown in the figure below.I want to use Simulink to see the harmonics of a voltage waveform. So far I have used the fft simulink tool and only found the magnitude of the harmonic frequencies. What I would like to do is issolate and observe the waveform at the different frequencies as shown in the figure below. I want to use Simulink to see the harmonics of a voltage waveform. So far I have used the fft simulink tool and only found the magnitude of the harmonic frequencies. What I would like to do is issolate and observe the waveform at the different frequencies as shown in the figure below. fft, harmonics, dtft, signal processing MATLAB Answers — New Questions
for loops auto nidification problem
I have a function y= f(x) .
x is 10 x n and y= 1 x n
a performance function myperf = perf(y) gives a 1 x 1 value.
a target value mytar must be reached.
if mytar is not reached I must reiterate the process in this way :
for i=1:10
y(i)=f(x(i));
end
x=y % it must be 10 x n
and finally …
y=f(x);
So if myperf = perf(y) > mytar I must continue.
I can’t known how much iteration I’ll need.
x dimension is 10^niteration x n ( 10 ,100 ,1000 … 10^niteration)
I must pay attention to use intermediate results to not reinitialize the algorithm every time and loose resources.
What type of architecture cold I use ?
The most symple and understandable ?
Thanks !I have a function y= f(x) .
x is 10 x n and y= 1 x n
a performance function myperf = perf(y) gives a 1 x 1 value.
a target value mytar must be reached.
if mytar is not reached I must reiterate the process in this way :
for i=1:10
y(i)=f(x(i));
end
x=y % it must be 10 x n
and finally …
y=f(x);
So if myperf = perf(y) > mytar I must continue.
I can’t known how much iteration I’ll need.
x dimension is 10^niteration x n ( 10 ,100 ,1000 … 10^niteration)
I must pay attention to use intermediate results to not reinitialize the algorithm every time and loose resources.
What type of architecture cold I use ?
The most symple and understandable ?
Thanks ! I have a function y= f(x) .
x is 10 x n and y= 1 x n
a performance function myperf = perf(y) gives a 1 x 1 value.
a target value mytar must be reached.
if mytar is not reached I must reiterate the process in this way :
for i=1:10
y(i)=f(x(i));
end
x=y % it must be 10 x n
and finally …
y=f(x);
So if myperf = perf(y) > mytar I must continue.
I can’t known how much iteration I’ll need.
x dimension is 10^niteration x n ( 10 ,100 ,1000 … 10^niteration)
I must pay attention to use intermediate results to not reinitialize the algorithm every time and loose resources.
What type of architecture cold I use ?
The most symple and understandable ?
Thanks ! matlab, for loop MATLAB Answers — New Questions
autocorrelation plot without the grid of lines
Hi all,
I am using the function autocorr(). However, it produces the graph with a grid of vertical and horizontal lines.
Is there any way to remove them?
BestHi all,
I am using the function autocorr(). However, it produces the graph with a grid of vertical and horizontal lines.
Is there any way to remove them?
Best Hi all,
I am using the function autocorr(). However, it produces the graph with a grid of vertical and horizontal lines.
Is there any way to remove them?
Best autocorrelation, plot MATLAB Answers — New Questions
Two-Phase Fluid Properties (2P) for Helium
Hi,
Is there a ready made library for Helium (He) two-phase fluid properties?
Could not find that from the twoPhaseFluidTables.
Br. SaaraHi,
Is there a ready made library for Helium (He) two-phase fluid properties?
Could not find that from the twoPhaseFluidTables.
Br. Saara Hi,
Is there a ready made library for Helium (He) two-phase fluid properties?
Could not find that from the twoPhaseFluidTables.
Br. Saara twophasefluidtables, fluid properties, helium thermal properties MATLAB Answers — New Questions
getframe – different output on different computers (using plot)
Hi!
I’m creating a program where i want to draw a kind of hourglass shape and then save this as a binary image. This shape is to be drawn based on coordinates from an image. The problem I have come across is that the thickness of the drawn shape in the output image (binaryThinLine below) differs depending on which computer I run it on. I believe that the problem occurs when I save it using getframe, but I am not sure.
This is the code I’m using:
set(groot, ‘defaultFigureUnits’, ‘pixels’);
set(groot, ‘defaultFigurePosition’, [100 100 480 853]);
set(groot,’defaultFigureVisible’,’off’);
figure
imshow(frame)
hold on;
plot(x, y, ‘b’, ‘LineWidth’, thickness_black, ‘LineJoin’, ‘miter’, ‘Color’, [0 0 1 0.25]); % Plot outline with blue color and thicker line width
hold off;
% Choosing axes
xlim([0, width(frame)]);
ylim([0, height(frame)]);
axis off;
thinLineFrame = getframe(gca);
[thinLineImage, Map] = frame2im(thinLineFrame);
thinLineImage_blue = thinLineImage(:,:,1);
binaryThinLine = imbinarize(thinLineImage_blue, 0.9); % Creating a binary image.
%binaryThinLine=imresize(binaryThinLine,[480 853]);
When defaultFigureVisible is set to off, binaryThinLine becomes the same size on both computers. However, when it is set to on, they become different sizes and have to be resized.
So, my question is: how can I make sure that binaryThinLine keeps the same thickness on both computers, while also having the same dimension (480×853)? Thank you in advance!Hi!
I’m creating a program where i want to draw a kind of hourglass shape and then save this as a binary image. This shape is to be drawn based on coordinates from an image. The problem I have come across is that the thickness of the drawn shape in the output image (binaryThinLine below) differs depending on which computer I run it on. I believe that the problem occurs when I save it using getframe, but I am not sure.
This is the code I’m using:
set(groot, ‘defaultFigureUnits’, ‘pixels’);
set(groot, ‘defaultFigurePosition’, [100 100 480 853]);
set(groot,’defaultFigureVisible’,’off’);
figure
imshow(frame)
hold on;
plot(x, y, ‘b’, ‘LineWidth’, thickness_black, ‘LineJoin’, ‘miter’, ‘Color’, [0 0 1 0.25]); % Plot outline with blue color and thicker line width
hold off;
% Choosing axes
xlim([0, width(frame)]);
ylim([0, height(frame)]);
axis off;
thinLineFrame = getframe(gca);
[thinLineImage, Map] = frame2im(thinLineFrame);
thinLineImage_blue = thinLineImage(:,:,1);
binaryThinLine = imbinarize(thinLineImage_blue, 0.9); % Creating a binary image.
%binaryThinLine=imresize(binaryThinLine,[480 853]);
When defaultFigureVisible is set to off, binaryThinLine becomes the same size on both computers. However, when it is set to on, they become different sizes and have to be resized.
So, my question is: how can I make sure that binaryThinLine keeps the same thickness on both computers, while also having the same dimension (480×853)? Thank you in advance! Hi!
I’m creating a program where i want to draw a kind of hourglass shape and then save this as a binary image. This shape is to be drawn based on coordinates from an image. The problem I have come across is that the thickness of the drawn shape in the output image (binaryThinLine below) differs depending on which computer I run it on. I believe that the problem occurs when I save it using getframe, but I am not sure.
This is the code I’m using:
set(groot, ‘defaultFigureUnits’, ‘pixels’);
set(groot, ‘defaultFigurePosition’, [100 100 480 853]);
set(groot,’defaultFigureVisible’,’off’);
figure
imshow(frame)
hold on;
plot(x, y, ‘b’, ‘LineWidth’, thickness_black, ‘LineJoin’, ‘miter’, ‘Color’, [0 0 1 0.25]); % Plot outline with blue color and thicker line width
hold off;
% Choosing axes
xlim([0, width(frame)]);
ylim([0, height(frame)]);
axis off;
thinLineFrame = getframe(gca);
[thinLineImage, Map] = frame2im(thinLineFrame);
thinLineImage_blue = thinLineImage(:,:,1);
binaryThinLine = imbinarize(thinLineImage_blue, 0.9); % Creating a binary image.
%binaryThinLine=imresize(binaryThinLine,[480 853]);
When defaultFigureVisible is set to off, binaryThinLine becomes the same size on both computers. However, when it is set to on, they become different sizes and have to be resized.
So, my question is: how can I make sure that binaryThinLine keeps the same thickness on both computers, while also having the same dimension (480×853)? Thank you in advance! image processing MATLAB Answers — New Questions
can you help me
Please help me to solve y””+y”’-y”-y’=2x+2sinx and then to compare in Simulink environmentPlease help me to solve y””+y”’-y”-y’=2x+2sinx and then to compare in Simulink environment Please help me to solve y””+y”’-y”-y’=2x+2sinx and then to compare in Simulink environment simulink, matlab, differential equations MATLAB Answers — New Questions
Dashboard blocks for External mode
Hello, I’m able to use switches (from Dashboard blocks) to change parameters in a model actively running on a target card, using External mode. I would also like to have simple visual elements in my model (as viewed from the host computer screen) for measurement. I am currently using a Display block to show the output, but using Gauges and so a more visible element would be great.
For the moment i am using Simulink with Arduino and TI C2000.
Any suggestions would be appreciated!Hello, I’m able to use switches (from Dashboard blocks) to change parameters in a model actively running on a target card, using External mode. I would also like to have simple visual elements in my model (as viewed from the host computer screen) for measurement. I am currently using a Display block to show the output, but using Gauges and so a more visible element would be great.
For the moment i am using Simulink with Arduino and TI C2000.
Any suggestions would be appreciated! Hello, I’m able to use switches (from Dashboard blocks) to change parameters in a model actively running on a target card, using External mode. I would also like to have simple visual elements in my model (as viewed from the host computer screen) for measurement. I am currently using a Display block to show the output, but using Gauges and so a more visible element would be great.
For the moment i am using Simulink with Arduino and TI C2000.
Any suggestions would be appreciated! dashboard blocks, external mode, arduino, c2000 MATLAB Answers — New Questions
how i can simulate it on MATLAB
I wanne simulate joint spectral amplitude that is based on pump envelope and phase matching. lamdaP value is 1550nm and i write code but my alpha value is 0, and i dont know why!
I wanne a picture like that I attach.
clear;
close all;
%……………….parameters……………
lambdaP = 1.55e-6; % pump wavelength
nelithiumP = 2.142; % refractive index lithium niobate for pump lambda
lambdaS = 0.775e-6 ; % signal wavelength
nelithiumS = 2.186; % refractive index lithium niobate for signal lambda
lambdaI = 0.775e-6 ; % idler wavelength
nelithiumI = 2.186; % refractive index lithium niobate for idler lambda
kP = 2*pi*(nelithiumP/lambdaP);
kS = 2*pi*(nelithiumS/lambdaS);
kI = 2*pi*(nelithiumI/lambdaI);
capital_lambda = 17.6e-6;
Deltak =(kP-kS-kI-(2*pi/capital_lambda));
%Deltak = linspace(a-1e7,a+1e7,100); % phase matching condition
L = 2e-2;
sigmaP=10e-9;
%deltat=50e-12;
sigmaP = deltat/(2*sqrt(log(2))); % pulse width
c = 3e8; % speed of light in vacuum
fS = c/lambdaS; fP = c/lambdaP; fI = c/lambdaI;
wS = 2*pi*fS; wP = 2*pi*fP; wI = 2*pi*fI; % angel frequncy
%alpha=exp(-(2*(pi^2)*(sigmaP^2))*((wP-(wS+wI))^2));
%b=wS+wI-wP;
alphaa = exp(-((wS+wI-wP)/sigmaP)); % pump envelope function
phi = (sinc(Deltak.*L./2)).*exp(1i.*Deltak.*L./2); % phase matching function
f = alphaa*phi; % joint spectral amplitude
joint_spectral_intensity = abs((f).^2); % joint spectral intensityI wanne simulate joint spectral amplitude that is based on pump envelope and phase matching. lamdaP value is 1550nm and i write code but my alpha value is 0, and i dont know why!
I wanne a picture like that I attach.
clear;
close all;
%……………….parameters……………
lambdaP = 1.55e-6; % pump wavelength
nelithiumP = 2.142; % refractive index lithium niobate for pump lambda
lambdaS = 0.775e-6 ; % signal wavelength
nelithiumS = 2.186; % refractive index lithium niobate for signal lambda
lambdaI = 0.775e-6 ; % idler wavelength
nelithiumI = 2.186; % refractive index lithium niobate for idler lambda
kP = 2*pi*(nelithiumP/lambdaP);
kS = 2*pi*(nelithiumS/lambdaS);
kI = 2*pi*(nelithiumI/lambdaI);
capital_lambda = 17.6e-6;
Deltak =(kP-kS-kI-(2*pi/capital_lambda));
%Deltak = linspace(a-1e7,a+1e7,100); % phase matching condition
L = 2e-2;
sigmaP=10e-9;
%deltat=50e-12;
sigmaP = deltat/(2*sqrt(log(2))); % pulse width
c = 3e8; % speed of light in vacuum
fS = c/lambdaS; fP = c/lambdaP; fI = c/lambdaI;
wS = 2*pi*fS; wP = 2*pi*fP; wI = 2*pi*fI; % angel frequncy
%alpha=exp(-(2*(pi^2)*(sigmaP^2))*((wP-(wS+wI))^2));
%b=wS+wI-wP;
alphaa = exp(-((wS+wI-wP)/sigmaP)); % pump envelope function
phi = (sinc(Deltak.*L./2)).*exp(1i.*Deltak.*L./2); % phase matching function
f = alphaa*phi; % joint spectral amplitude
joint_spectral_intensity = abs((f).^2); % joint spectral intensity I wanne simulate joint spectral amplitude that is based on pump envelope and phase matching. lamdaP value is 1550nm and i write code but my alpha value is 0, and i dont know why!
I wanne a picture like that I attach.
clear;
close all;
%……………….parameters……………
lambdaP = 1.55e-6; % pump wavelength
nelithiumP = 2.142; % refractive index lithium niobate for pump lambda
lambdaS = 0.775e-6 ; % signal wavelength
nelithiumS = 2.186; % refractive index lithium niobate for signal lambda
lambdaI = 0.775e-6 ; % idler wavelength
nelithiumI = 2.186; % refractive index lithium niobate for idler lambda
kP = 2*pi*(nelithiumP/lambdaP);
kS = 2*pi*(nelithiumS/lambdaS);
kI = 2*pi*(nelithiumI/lambdaI);
capital_lambda = 17.6e-6;
Deltak =(kP-kS-kI-(2*pi/capital_lambda));
%Deltak = linspace(a-1e7,a+1e7,100); % phase matching condition
L = 2e-2;
sigmaP=10e-9;
%deltat=50e-12;
sigmaP = deltat/(2*sqrt(log(2))); % pulse width
c = 3e8; % speed of light in vacuum
fS = c/lambdaS; fP = c/lambdaP; fI = c/lambdaI;
wS = 2*pi*fS; wP = 2*pi*fP; wI = 2*pi*fI; % angel frequncy
%alpha=exp(-(2*(pi^2)*(sigmaP^2))*((wP-(wS+wI))^2));
%b=wS+wI-wP;
alphaa = exp(-((wS+wI-wP)/sigmaP)); % pump envelope function
phi = (sinc(Deltak.*L./2)).*exp(1i.*Deltak.*L./2); % phase matching function
f = alphaa*phi; % joint spectral amplitude
joint_spectral_intensity = abs((f).^2); % joint spectral intensity jsa, jsi, phase matching, pump envelope, waveguide, quantum, spdc, optic, quantumoptic, nonlinearoptic MATLAB Answers — New Questions