Hi, I have a code in MATLAB which tries to zero detect, i am trying to convert the same to C but i am having trouble loading the data.

1 visualización (últimos 30 días)
While running the program in matlab coder, the value of y is taken to be 1, and it does not go to the for loop.I have attached the file(.mat) from which i am getting the signal. The code is:
%cd 'C:\Users\HP\Desktop\Project Simulation\water\WaterBonePlaneInterface\SimulationResults'
%plot frequency spectrum of pulse transmitted through water in time domain
function [g,h,j,o]=generatezeros
%cd C:\Users\HP\Desktop\Project Simulation\water\WaterBonePlaneInterface\SimulationResults\;
y=coder.load('C:\Users\HP\Desktop\Project Simulation\water\WaterBonePlaneInterface\SimulationResults\B.mat');
%y=[-1 1 1 1 -1 -1 -1 2 3 1 1 1 -1];
g=0;
h=0;
j=0;
o=0;
k=0;
coder.extrinsic('display');
for i = 1:length(y)-1
if ((sign(y(i+1)) == 1 && sign(y(i))==-1) || (sign(y(i+1))==-1 && sign(y(i))==1))
k=k+1;
display(k);
if (k==1)
g=i;
elseif (k==2)
h=i;
elseif (k==3)
j=i;
else (k==4)
o=i;
end
end
end
display(length(y));
display(g);
display(h);
display(j);
display(o);

Respuesta aceptada

Kunal Khosla
Kunal Khosla el 30 de Mayo de 2019
I did a abit of experiment and was able to figure out the issue. The lines should be changed to
s=coder.load('C:\Users\HP\Desktop\Project Simulation\water\WaterBonePlaneInterface\SimulationResults\B.mat');
y=s.y;
Then the matlab data is loaded on to the C program.

Más respuestas (2)

Guillaume
Guillaume el 30 de Mayo de 2019
The name of your function generatezeros is very misleading since what that function does is find the first 3 and the last indices where a vector changes sign. It does not generate anything in any way. Considering that there is no comment in your code, at least use a function name that explains what it actually does.
Note that
else (k==4)
is the same as
else
k == 4 %pointless line that will either print 1 or 0 on the command line
it is not equivalent to
elseif k==4
This else wil be executed for all k greater than 3, each time setting o to the index i. So at the end of the loop o will be the index of the last sign change in the vector. If you meant o to be the 4th one, then that's not what your code does.
In any case, the whole function can be simplify to:
function locations = findzerocross(y)
%input: y a vector of numbers
%output: the location of all zero-crossing points
locations = find(diff(sign(y)) ~= 0);
end
If you want the first four locations, you can then index the returned array
y = coder.load('C:\Users\HP\Desktop\Project Simulation\water\WaterBonePlaneInterface\SimulationResults\B.mat');
zerocrossing = findzerocross(y);
zerocross4 = zerocrossing(1:4);
I know nothing about coder, so no idea what you need to do to make it compile.

Kunal Khosla
Kunal Khosla el 30 de Mayo de 2019
Thanks a lot. Any one with prior Matlab coder experience.

Categorías

Más información sobre MATLAB Coder en Help Center y File Exchange.

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by