我们如何使用MATLAB
代码计算时钟周期中的上升沿数?
我试过这个 -
counter = o ;
for (clock > 0)
counter = counter +1;
end
答案 0 :(得分:0)
评论中讨论的代码存在很多问题,但假设您的信号在两种状态之间发生变化,例如
sum(diff(clock) > 0)
然后这个简单的表达式将计算上升沿的数量:
for
在不了解您正在处理的数据类型的情况下,很难提供更好的答案,实际上这只适用于每个正转换被视为上升沿的情况,即信号中没有噪声。
如果你真的想使用counter = 0;
for find(clock > 0)
counter = counter +1;
end
循环,那么试试这个:
clock > 0
但这不会计算上升沿,而是counter = sum(clock > 0)
的实例数,这也可以仅使用clock
来实现。请注意,在for循环中,如果for find(clock > 0)'
是列向量,那么您需要使用for find(clock > 0)
而不是% Initialise clocks
x = [0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0];
y = [0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0];
% Initialise counter
count = zeros(size(y));
counter = 0;
% Loop through signals (note that x and y should be the same length)
for i = 2:numel(y)
% Find rising edge on x
if x(i - 1) == 0 && x(i) == 1
counter = 0;
end
% Find rising edge on y
if y(i - 1) == 0 && y(i) == 1
counter = counter + 1;
end
% Store current value of counter for display
count(i) = counter;
end
figure;
subplot(3, 1, 1);
stairs(x);
ylabel('x');
subplot(3, 1, 2);
stairs(y);
ylabel('y');
subplot(3, 1, 3);
stairs(count);
ylabel('counter');
(请注意该行末尾的勾号)。
更新以解决您的评论。
var multiSelect = new MultiSelect({
multiple: false,
size: 3
});
这将提供以下输出: