フィルターのクリア

How can I make a scatter plot when the signal above a certain threshold in real time?

4 ビュー (過去 30 日間)
Hi all,
I am quite fresh in Matlab but want to design a program to simulate flowing paricles, the concept would close to flow cytometry.
The scenario is, the particle will induce several sine waves once it pass through the detecting zone. Each sine waves could be connected as a wave envelope since the particel transerving in the detection zone will have different sensitivity. Please see the fig1.
According to the sine wave amplitude, if the maximum value above a certain threshold which set by me, I can plot a dot on the XY scatter plot spontanously.
My question is, how can I modify my code for monitoring (real-time) measurement when I am scanning the particles?
I attached my code but they are just a sample for showing example, I think they should be more complicated if I want to use in my experiment.
Thanks! And hope everybody stay healthy and safe!
clc
close all
clear all
%Generate a similar signal
t=linspace(0,0.0025,10000);
fc= 5000;
fm= 200;
fs= 40000;
Am= 1;
Ac= 0.01;
m= Am/Ac;
wc= 2*pi*fc*t;
wm= 2*pi*fm*t;
ec= Ac*sin(wc);
em= Am*sin(wm);
y=Ac*(1+m*sin(wm).*sin(wc));
plot(t,y);
%Find the maximum amplitude and count it to make a XYscatter graph
[maxYvalue, indexAtmaxY]= max(y);
XvalueAtMaxYvalue= t(indexAtmaxY(1));
x= XvalueAtMaxYvalue.*1000;
scatter(x, maxYvalue)
xlabel('Time(us)')
ylabel('Voltage(a.u.)')
  2 件のコメント
darova
darova 2020 年 4 月 9 日
Can you show something? Your code? Picture? Another attempts?
Something!
Chen Kevin
Chen Kevin 2020 年 4 月 10 日
Hi Darova,
Thanks for the suggestions! I've edited more information, hope it can express my question clearly now.

サインインしてコメントする。

採用された回答

darova
darova 2020 年 4 月 10 日
編集済み: darova 2020 年 4 月 10 日
Here is my vision of your problem
x = -20:0.5:20;
f = @(x) sin(x).*sqrt(20^2-x.^2);
y = f(x);
ylim([-30 30])
cla
plot(x,y)
hold on
h1 = plot(0,0);
h2 = scatter(0,0);
for i = 1:length(x)
set(h2,'xdata',x(i),'ydata',f(x(i))*(f(x(i))>0));
set(h1,'xdata',[0 0]+x(i),'ydata',[-30 30])
xlim([-20 20]+x(i)) % move limits
pause(0.1) % wait a sec
drawnow
end
hold off
  10 件のコメント
Chen Kevin
Chen Kevin 2020 年 4 月 13 日
Perfect! It works, thanks!
But how do you save the file to animation? Like you responsed before with the comment.
darova
darova 2020 年 4 月 13 日
Example
clc,clear
% GRAPHICAL DRIVER
opengl software
x = linspace(0,5,20);
y = x.^2;
% axis([0 max(x) 0 max(y)])
h = plot(0,0,'or');
line(x,y)
filename = 'gif_animation.gif';
f = getframe(gcf);
[im,map] = rgb2ind(f.cdata,256);
imwrite(im,map,filename,'DelayTime',0,'Loopcount',inf);
for i = 1:length(x)
set(h,'xdata',x(i),'ydata',y(i))
pause(0.1)
f = getframe(gcf);
[im,map] = rgb2ind(f.cdata,256);
imwrite(im,map,filename,'DelayTime',0.1,'WriteMode','Append');
end

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2020 年 4 月 10 日
Sometime you need to put a drawnow after your call() to plot to get the plot to show up in real time, otherwise, if it's in an intensive loop, it will only update the plot once the loop has finished:
plot(............)
drawnow; % Force screen to repaint immediately.
  5 件のコメント
Image Analyst
Image Analyst 2020 年 4 月 11 日
Yes, when pause hits, it gives time for the operating system to process other messages in the queue that have basically been held up while the OS is processing what it thinks are more important operations. So the MATLAB stuff like iterating on the loop and incrementing the loop counter (which it thinks are super important) are basically paused and it then gives it time to get around to handling the other messages that it considered lower priority, like updating the display. You might check out this Wikipedia article on message based computing: https://en.wikipedia.org/wiki/Message_queue

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSpectral Measurements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by