如何在matlab中从图形中提取数据?
我保存了不同的Matlab绘图在一个独特的。图。图为: 现在,我想在这些图中引入一个滤波器来减少噪声,但不幸的是,我丢失了生成这些信号的代码。如何在matlab中从图形中提取数据?,matlab,user-interface,plot,matlab-figure,Matlab,User Interface,Plot,Matlab Figure,我保存了不同的Matlab绘图在一个独特的。图。图为: 现在,我想在这些图中引入一个滤波器来减少噪声,但不幸的是,我丢失了生成这些信号的代码。 图中是否有提取每个信号数据的方法? 我试过这个: open('ttc_delay1000.fig'); h = gcf; %current figure handle axesObjs = get(h, 'Children'); %axes handles dataObjs = get(axesObjs, 'Children'); %handles
图中是否有提取每个信号数据的方法? 我试过这个:
open('ttc_delay1000.fig');
h = gcf; %current figure handle
axesObjs = get(h, 'Children'); %axes handles
dataObjs = get(axesObjs, 'Children'); %handles to low-level graphics objects in axes
objTypes = get(dataObjs, 'Type'); %type of low-level graphics object
xdata = get(dataObjs, 'XData'); %data from low-level grahics objects
ydata = get(dataObjs, 'YData');
但我很困惑,我不知道这样做是否正确。
谢谢 针对您的问题的一行:
data = get(findobj(open('ttc_delay1000.fig'), 'Type','line'), {'XData','YData'});
步骤如下(从内部调用到外部调用):
- 打开文件李>
- 看看它的系列线李>
- 返回数据
数据{n,1}
将包含系列的扩展数据
编号n
,而数据{n,2}
将包含所述系列的YData
如果您想直接平滑图形中的线条,其想法是相同的:
%//Prepare moving average filter of size N
N = 5;
f = @(x) filter(ones(1,N)/N, 1, x);
%//Smooth out the Y data of the LineSeries
hf = open('ttc_delay1000.fig');
for hl = transpose(findobj(hf,'Type','line'))
set(hl, 'YData', f(get(hl,'YData')));
end;
saveas(hf, 'ttc_delay1000_smooth.fig');
那么,你的代码产生了什么?是的,这段代码应该可以完成这项工作;但是请记住,你已经失去了你的功能,你的数据样本数量有限,因此你需要对如何过滤/减少噪音保持明智。过滤高频噪音的一种残酷方式(我称之为chuck Norris)is:1/对信号进行fft运算-2/将高频对应的所有系数设置为0 3/对结果进行ifft运算以获得滤波信号。数学家或非Chuck Norris粉丝强烈建议在fft后使用高斯低通滤波器step@Betelgeuse我已经添加了代码来平滑线条。关于从数字中获取数据的原始问题已经得到了回答;询问过滤是一个完全不同的问题。请回答另一个问题。等等,findobj为孙辈工作?这些年来我一直在做什么@BillBokeey当第一个参数是图形句柄(或数组)时,搜索仅限于这些句柄及其后代。