MATLAB 停留在复数矩阵的边界

MATLAB Staying in bounds of Complex matrix

我有一个复矩阵cdata,即2144x2048。我通过执行以下操作从 cdata 获取大于指定 threshold 的元素:

[row, col] = find(abs(cdata) > threshold);

rowcol 可以有多个值。然后,我获取行和列值,执行计算以获得真实 x 数据的 N 个样本和 y 数据的 33 个样本,如下所示:

xdata = real(cdata(row(i),col(i)-bw:col(i)+bw))
ydata = real(cdata(row(i)-bw:row(i)+bw,col(i)-bw:col(i)+bw))

其中 bw 是一个常量值,它决定了我需要获取的样本数量。在此计算期间,特别是 xdatacdata 的列部分和 ydatacdata 的行部分,我超出了矩阵的边界,MATLAB 抛出以下错误:

??? Subscript indices must either be real positive integers or logicals

如何保证不越界?如果 row/col 对超出范围,我可以跳过它。

您遇到问题的原因是您没有将搜索限制在距矩阵边缘 bw 更近的位置。这意味着可以在矩阵边缘附近找到高于阈值的值。当您从这些索引中添加或减去 bw 时,您最终会超出范围。您可以像这样限制您的搜索。

[row, col] = find(abs(cdata(bw+1:end-bw,bw+1:end-bw)) > threshold);
row = row + bw;
col = col + bw;

这可以保证您的行和列索引在范围内,因此当您抓住它们周围的区域时,您不会超出范围。

旁注。代码中的 ydata 变量索引矩阵的整个正方形区域,而 xdata 仅索引一行的一部分。你的 ydata 应该是 ydata = real(cdata(row(i)-bw:row(i)+bw, col(i))) 吗?