これらの値を取得するための関数を作成して、ばかげた間違いを避けるようにします (また、タップ サイズまたはパーセンテージを変更した場合に簡単にするため)。
function [A, B] = GetTapBoundaries( arr, tapNum, tapSize )
sliceSize = floor(tapSize * 0.1);
boundaryIdx = (tapNum-1) * tapSize; % last element in previous tap
leftIdx = boundaryIdx - sliceSize + 1;
rightIdx = boundaryIdx + sliceSize;
if leftIdx >= 1 && boundaryIdx <= size(arr,1)
A = arr( leftIdx:boundaryIdx, : );
else
A = [];
end
if boundaryIdx >= 0 && rightIdx <= size(arr, 1)
B = arr( boundaryIdx+1:rightIdx, : );
else
B = [];
end
end
次のように呼び出します。
tapSize = 454;
[A1, B1] = GetTapBoundaries( interpolated, 1, tapSize );
[A2, B2] = GetTapBoundaries( interpolated, 2, tapSize );
% etc ...
[A12, B12] = GetTapBoundaries( interpolated, 12, tapSize );
または、セル配列を使用できます。
tapSize = 454;
numTaps = floor( size(interpolated,1) / tapSize );
A = cell(numTaps,1);
B = cell(numTaps,1);
for tap = 1:numTaps
[Ax, Bx] = GetTapBoundaries( interpolated, tap, tapSize );
A(tap) = Ax;
B(tap) = Bx;
end
構文エラーまたは論理エラーについてお詫び申し上げます... MATLAB でチェックせずに、このコードをブラウザーに突っ込みました。