Pergunta

I would like to perform a frame based analysis on the following curve Which expresses the relation between time and concentration (x-axis: time in minutes; y-axis: concentration in Mbq):

original graph

For the above curve I would like to perform frame based sampling by splitting the curve into 19 frames:

19 frames:
 4 frames : Each of 15 seconds time interval
 2 frames : Each of 30 seconds time interval
 2 frames : Each of 60 seconds time interval
11 frames : Each of 200 seconds time interval

I have written the following interpolation function for the frame analysis. c_t is where my signal which was expressed in the figure above is stored:

function c_i = Frame_analysis(a1,a2,a3,b1,b2,b3,td,tmax,k1,k2,k3)


t= 0:6:3000; % The original sample time, in seconds
t_i =[0:15:60,90:30:120,180:60:240,440:200:2240];% The interpolated sample time for first 4 frames of 15 second interval

K_1   = (k1*k2)/(k2+k3);
K_2   = (k1*k3)/(k2+k3);
%DV_free= k1/(k2+k3);




c_t = zeros(size(t));

ind = (t > td) & (t < tmax);

c_t(ind)= conv(((t(ind) - td) ./ (tmax - td) * (a1 + a2 + a3)),(K_1*exp(-(k2+k3)*t(ind)+K_2)),'same');

% Y_i = interp1(t,c_t(ind), t_i); % Interpolation for first frame




ind = (t >= tmax);

c_t(ind)=conv((a1 * exp(-b1 * (t(ind) - tmax))+ a2 * exp(-b2 * (t(ind) - tmax))) + a3 * exp(-b3 * (t(ind) - tmax)),(K_1*exp(-(k2+k3)*t(ind)+K_2)),'same');

c_i = interp1(c_t(ind),t_i);% Interpolation for Next consequtive frames



figure;
plot(t_i,c_i);
axis([0 3000 -2000 80000]);
xlabel('Time[secs]');
ylabel('concentration [Mbq]');
title('My signal');

%plot(t,c_tnp);

end

When I run the code, I have obtained a curve without any interpolation as you can see from figure expressed below:

updated graph

Where have I made a mistake in my code and how can I possibly perform a better interpolation for obtaining different frames in my Output curve expressed in first figure?

Following are the input values which i have provided manually

Frame_analysis(2501,18500,65000,0.5,0.7,0.3,3,8,0.014,0.051,0.07)
Foi útil?

Solução

There are multiple issues here, and it will be up to you to decide how to address them.
This is what I can provide:

  1. You do not specify an x-coordinate for your plot command. That can be done, however, Matlab will use the index of the vector for the x-axis. Example: if you have

    y = 1:2:6;
    plot(y);
    hold on;
    y = 1:1:6;
    plot(y);
    

    you'll see the difference.
    How does this apply to your case? You specify a vector of higher resolution (t_i, compared to t), but in your plot command you do not provide this new vector for the x-coordinate.

  2. Your definition of c_t provides very very small values (on the order of 10^-77). And from t > 60, your output is indifferent from 0.
    How does that effect your interpolation?
    You specify that for the interval [0 60] you want step-sizes of 15 - that does not give you a lot of resolution:

    example

    You might want to change to something like:

    t_i =[0:0.5:60,90:30:120,180:60:240,440:200:2240];  
    

    Which will give you this plot:

    enter image description here

  3. In either case, I do not understand why you chose a data range above 60 (all the way until 3000) for the data you are trying to plot. This explains why you do not see anything with your axis limits axis([0 3000 -2000 80000]); that by far exceed the range of y-values and obscures the non-zero data entries for small x.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top