Я пытаюсь идентифицировать и разделять повторяющиеся шаблоны, относящиеся к началу логического вектора. Я все еще разбираюсь в векторной математике, поэтому в итоге я создал неприлично длинное приложение для перебора, которое работает, но ненадежно и действительно является оскорблением для MatLab. Теперь я пытаюсь провести вектор относительно его двойника и использовать логическое «И» между ними, чтобы указать возможные совпадения. Я искал Inte rnet в поисках примеров и нашел некоторые повторяющиеся шаблоны, но не перекрывающиеся. Мне нужно руководство. Код ниже - мой генератор тестовых векторов. Проще говоря, я хочу извлечь ту же информацию из вектора, который я использую здесь для ее создания. (Фактические шаблоны будут иметь большую ширину.)
В коде матрица (pSet) определяет шаблоны. Строки представляют каждый шаблон, а столбцы определяют этот шаблон. (Колонка 1) Интервал, определяющий узор. (Столбец 2) Длина шаблона (циклы) (0 = продолжить до конца) (Столбец 3) Смещение начала шаблона относительно начала. (Паттерны со смещениями - это «шум».) Конечно, будут структуры паттернов, которые затруднят извлечение (например, когда один паттерн будет кратным другому), но я могу иметь дело с теми, которые находятся на обратной стороне распознавания.
clear
% ------ conditionals (Gen single pattern) --------
only1 = uint16(0); % set to id of individual pattern, leave at 0 otherwise
only2 = only1;
% -------- Pattern Descriptor ---------
pSet = uint16([10 0 0; 6 0 0; 12 16 0; 8 5 0; 5 0 4]);
% -----------------------------
maxL = uint16(200);
v = zeros(maxL,1,'logical');
ofSet = uint16(0);
cycFreq = uint16(0);
cycEnd = uint16(0);
lpSet = uint16(length(pSet));
if only1 == 0
only1 = uint16(1);
only2 = lpSet;
end
for vi = only1:only2
cycFreq = pSet(vi,1); % num data points in spacing
cycBrk = pSet(vi,2); % milepost that ends cycle series
ofSet = pSet(vi,3) + 1; % From beginning
if cycBrk ~= 0
cycEnd = cycFreq*(cycBrk+1);
else
cycEnd = maxL;
end
for vj = ofSet:cycFreq:cycEnd
v(vj) = 1;
end
end