我使用以下命令提取脉冲宽度:
WidthHigh=pulsewidth(data(:,2),data(:,1));
其中data(:,2)
是我从示波器生成的样本矢量,data(:,1)
是时间戳矢量。
有没有办法提取data(:,2)
中找到的0交叉(或最近样本)的索引?换句话说,有没有办法提取每个测量脉冲宽度的起始指数?
此外,我无法理解帮助菜单中的INITCROSS,FINALCROSS,MIDLEV
。它们是上升沿的开始,停止和中间值吗?我可以以某种方式将它们用于我的需要吗?当我看到它们时,给定的值令人困惑。
答案 0 :(得分:1)
INITCROSS
应该是您所需要的。看看这个例子,看看它是否符合你的期望:
t = linspace(0,1,100);
f = double(sin(5*t*pi) > .6) + randn(size(t))*.1;
figure; hold on; plot(t, f);
[~, initCross]=pulsewidth(f, t);
plot(initCross, zeros(size(initCross)), '*');
您还可以通过执行
标记所有这些术语,获得非常好的情节pulsewidth(f,t);
如果您需要索引而不是时间值,您可以(遵循here的建议):
edges = [-Inf, mean([t(2:end); t(1:end-1)]), +Inf];
inds = discretize(initCross, edges);
答案 1 :(得分:1)
使用MATLAB演示数据pulseex.mat
,如果执行此代码:
load('pulseex.mat','x','t')
data = [x(1:end-5);x(1:end-5)];
data = [data,data];
t = 1:1:size(data,1);
data(:,1) = t;
plot(data(:,1),data(:,2), 'k')
[WidthHigh,INITCROSS,FINALCROSS]=pulsewidth(data(:,2),data(:,1));
hold on
indices = zeros(1,numel(INITCROSS));
for ii=1:numel(INITCROSS)
plot ( [INITCROSS(ii);INITCROSS(ii)], ylim, 'r' )
plot ( [FINALCROSS(ii),FINALCROSS(ii)], ylim, 'b' )
[~, indices(ii)] = min(abs(t-INITCROSS(ii)));
end
答案 2 :(得分:1)
脉冲宽度的第二个输出参数initCross是您的初始过零点。 我创建了一些假数据,这样可以更容易理解脉冲宽度:
data(:,1) = 0:0.01:5; % ten sec of data
data(:,2) = cos(data(:,1)*(2*pi)); % sin wave with 1 Hz
[widthHigh,initCross]=pulsewidth(data(:,2),data(:,1));
figure
plot(data(:,1),data(:,2))
hold on
plot([initCross initCross]',repmat(ylim',1,length(initCross)),'k')
plot([initCross initCross+widthHigh]',zeros(2,length(initCross)),'r')
legend('cosine','initial 0 crossing')