上升时间循环问题:Matlab

Problems in loop with risetime: Matlab

我正在尝试计算以大小为 80x10000 的矩阵给出的 10000 个脉冲的上升时间。

我尝试使用信号处理工具箱中的函数 risetime

为了计算我使用这个代码:

for k=1:length(PS1)
    PS2(:,k) = risetime(PS1(:,k),80);
end

因此我收到错误消息:

Assignment has more non-singleton rhs dimensions than non-singleton subscripts

生成的矩阵 PS2 大小为 1x1011。

这里有什么问题?

在没有示例数据集的情况下,我认为您的一个脉冲 return 上升超过 1 或 return 上升 [],因为没有找到任何东西。 risetime see doc 将 return 一个矢量,表示在给定信号中发现的上升次数。

因此,如果第一个信号只有 1 个上升,然后下一个信号有 2 个,那么当它在你的循环中前进时,右手结果的数量与左手分配不匹配......假设你预先分配 PS2 某处。

您可以尝试将 PS2 定义为元胞数组,以确定哪个脉冲 return 超过预期的结果数(或零)。

PS2 = cell(size(PS1,2),1);
for k=1:size(PS1,2)
    PS2{k} = risetime(PS1(:,k),80);
end

如果你真的只想要第一个上升时间那么你需要一个临时变量并且只取第一个元素......然后在你的临时变量出现为空的情况下做其他事情(替换为 NaN )示例:

PS2 = nan(size(PS1,2),1);
for k=1:size(PS1,2)
    temp = risetime(PS1(:,k),80);
    if ~isempty(temp)
        PS2(k) = temp(1);
    end
end

编辑:另请注意,我将 length 替换为 size(..,2) 以获得列数。我个人不喜欢使用长度,因为它只是 return 最长的维度。因此,如果您有很长的信号或没有那么多脉冲来评估,您可能 运行 会遇到问题。