Поиск местоположения сигнала с помощью поиска подобия
[ возвращает начальный и конечный индексы сегмента массива данных, istart,istop,dist] = findsignal(data,signal)data, который лучше всего соответствует массиву поиска, signal. Сегмент наилучшего соответствия таков, что dist, квадрат евклидова расстояния между сегментом и массивом поиска, является наименьшим. Если data и signal являются матрицами, то findsignal находит начальный и конечный столбцы области data что лучшие совпадения signal. В этом случае data и signal должно иметь одинаковое количество строк.
[ задает дополнительные параметры с использованием аргументов пары «имя-значение». Параметры включают применяемую нормализацию, количество сегментов для отчета и метрику расстояния для использования.istart,istop,dist] = findsignal(data,signal,Name,Value)
findsignal(___) без графиков выходных аргументов data и выделяет любые выявленные случаи signal.
Если массивы являются действительными векторами, функция отображает data как функция номера образца.
Если массивы являются комплексными векторами, функция отображает data на диаграмме Арганда.
Если массивы являются вещественными матрицами, функция использует imagesc показать signal на вложенной графике и data с выделенными областями на другом вложенном графике.
Если массивы представляют собой сложные матрицы, функция строит графики их действительных и мнимых частей в верхней и нижней половине каждого изображения.
Генерация набора данных, состоящего из гауссова импульса 5 Гц с 50% полосой пропускания, дискретизированного в течение половины секунды со скоростью 1 кГц.
fs = 1e3; t = 0:1/fs:0.5; data = gauspuls(t,5,0.5);
Создать сигнал, состоящий из полутора циклов 10 Гц синусоиды. Постройте график набора данных и сигнала.
ts = 0:1/fs:0.15; signal = cos(2*pi*10*ts); subplot(2,1,1) plot(t,data) title('Data') subplot(2,1,2) plot(ts,signal) title('Signal')

Найдите сегмент данных, который имеет наименьшее квадратичное евклидово расстояние до сигнала. Постройте график данных и выделите сегмент.
figure findsignal(data,signal)

Добавьте в набор данных два четко очерченных раздела. Найдите сегмент, наиболее близкий к сигналу в смысле наличия наименьшего абсолютного расстояния.
dt = data; dt(t>0.31&t<0.32) = 2.1; dt(t>0.32&t<0.33) = -2.1; findsignal(dt,signal,'Metric','absolute')

Пусть оси x растягиваются, если растягивание приводит к меньшему абсолютному расстоянию между ближайшим сегментом данных и сигналом.
findsignal(dt,signal,'TimeAlignment','dtw','Metric','absolute')

Добавьте в набор данных еще два внешних раздела.
dt(t>0.1&t<0.11) = 2.1; dt(t>0.11&t<0.12) = -2.1; findsignal(dt,signal,'TimeAlignment','dtw','Metric','absolute')

Найдите два сегмента данных, ближайших к сигналу.
findsignal(dt,signal,'TimeAlignment','dtw','Metric','absolute', ... 'MaxNumSegments',2)

Вернитесь к поиску одного сегмента. Выбирать 'edr' в качестве критерия растяжения по оси X. Выберите для редактирования допуск расстояния 3. Редактируемое расстояние между несопоставляемыми образцами не зависит от фактического разделения. 'edr' устойчивы к отклонениям.
findsignal(dt,signal,'TimeAlignment','edr','EDRTolerance',3, ... 'Metric','absolute')

Повторите расчет, но теперь нормализуйте данные и сигнал.
Определите движущееся окно с 10 выборками с каждой стороны каждой точки данных и сигнала.
Вычитание среднего значения данных в окне и деление на локальное стандартное отклонение.
Найдите нормализованный сегмент данных, имеющий наименьшее абсолютное расстояние до нормализованного сигнала. Отображение ненормализованных и нормализованных версий данных и сигнала.
findsignal(dt,signal,'TimeAlignment','edr','EDRTolerance',3, ... 'Normalization','zscore','NormalizationLength',21, ... 'Metric','absolute','Annotate','all')

Создать случайный массив данных, где:
Среднее значение является постоянным в каждой из семи областей и резко изменяется от области к области.
Стандартное отклонение является постоянным в каждой из пяти областей и резко изменяется от области к области.
lr = 20; mns = [0 1 4 -5 2 0 1]; nm = length(mns); vrs = [1 4 6 1 3]/2; nv = length(vrs); v = randn(1,lr*nm*nv); f = reshape(repmat(mns,lr*nv,1),1,lr*nm*nv); y = reshape(repmat(vrs,lr*nm,1),1,lr*nm*nv); t = v.*y+f;
Постройте график данных, выделяя этапы его построения. Отображение среднего и стандартного отклонения для каждой области.
subplot(2,2,1) plot(v) title('Original') xlim([0 700]) subplot(2,2,2) plot([f;v+f]') title('Means') xlim([0 700]) text(lr*nv*nm*((0:1/nm:1-1/nm)+1/(2*nm)),-7*ones(1,nm),num2str(mns'), ... 'HorizontalAlignment',"center") subplot(2,2,3) plot([y;v.*y]') title('STD') xlim([0 700]) text(lr*nv*nm*((0:1/nv:1-1/nv)+1/(2*nv)),-7*ones(1,nv),num2str(vrs'), ... 'HorizontalAlignment',"center") subplot(2,2,4) plot(t) title('Final') xlim([0 700])

Создайте случайный сигнал со средним значением нуля и стандартным отклонением 1/2. Найдите и отобразите сегмент массива данных, который лучше всего соответствует сигналу.
sg = randn(1,2*lr)/2; findsignal(t,sg)

Создайте случайный сигнал со средним значением нуля и стандартным отклонением 2. Найдите и отобразите сегмент массива данных, который лучше всего соответствует сигналу.
sg = randn(1,2*lr)*2; findsignal(t,sg)

Создайте случайный сигнал со средним значением 2 и стандартным отклонением 2. Найдите и отобразите сегмент массива данных, который лучше всего соответствует сигналу.
sg = randn(1,2*lr)*2+2; findsignal(t,sg)

Создайте случайный сигнал со средним значением -4 и стандартным отклонением 3. Найдите и отобразите сегмент массива данных, который лучше всего соответствует сигналу.
sg = randn(1,2*lr)*3-4; findsignal(t,sg)

Повторите вычисление, но на этот раз вычтите среднее значение как из сигнала, так и из данных.
findsignal(t,sg,'Normalization','zscore','Annotate','all')

Разработайте шрифт, напоминающий выходные данные ранних компьютеров. Используйте его для записи слова MATLAB ®.
rng default
chr = @(x)dec2bin(x')-48;
M = chr([34 34 54 42 34 34 34]);
A = chr([08 20 34 34 62 34 34]);
T = chr([62 08 08 08 08 08 08]);
L = chr([32 32 32 32 32 32 62]);
B = chr([60 34 34 60 34 34 60]);
MATLAB = [M A T L A B];Повреждайте слово, повторяя случайные столбцы букв и изменяя интервал. Отображение исходного слова и трех поврежденных версий.
c = @(x)x(:,sort([1:6 randi(6,1,2)])); subplot(4,1,1,'XLim',[0 60]) spy(MATLAB) xlabel('') ylabel('Original') for kj = 2:4 subplot(4,1,kj,'XLim',[0 60]) spy([c(M) c(A) c(T) c(L) c(A) c(B)]) xlabel('') ylabel('Corrupted') end

Создайте еще одну поврежденную версию слова. Поиск шумной версии буквы «А». Отображение расстояния между массивом поиска и ближайшим к нему сегментом данных. Сегмент разливается в «Т», поскольку горизонтальные оси являются жесткими.
corr = [c(M) c(A) c(T) c(L) c(A) c(B)]; sgn = c(A); [ist,ind,dst] = findsignal(corr,sgn); clf subplot(2,1,1) spy(sgn) subplot(2,1,2) spy(corr) chk = zeros(size(corr)); chk(:,ist:ind) = corr(:,ist:ind); hold on spy(chk,'*k') hold off

dst
dst = 11
Разрешить растягивание горизонтальных осей. Ближайшим сегментом является пересечение массива поиска и первого экземпляра «A». Расстояние между сегментом и массивом равно нулю.
[ist,ind,dst] = findsignal(corr,sgn,'TimeAlignment','dtw'); subplot(2,1,1) spy(sgn) subplot(2,1,2) spy(corr) chk = zeros(size(corr)); chk(:,ist:ind) = corr(:,ist:ind); hold on spy(chk,'*k') hold off

dst
dst = 0
Повторите вычисления, используя встроенные функциональные возможности findsignal. Делите на локальное среднее для нормализации данных и сигнала. Используйте симметричную метрику Куллбэка-Лейблера.
findsignal(corr,sgn,'TimeAlignment','dtw', ... 'Normalization','power','Metric','symmkl','Annotate','all')

data - Массив данныхМассив данных, заданный как вектор или матрица.
Типы данных: single | double
Поддержка комплексного номера: Да
signal - Массив поискаМассив поиска, заданный как вектор или матрица.
Типы данных: single | double
Поддержка комплексного номера: Да
Укажите дополнительные пары, разделенные запятыми Name,Value аргументы. Name является именем аргумента и Value - соответствующее значение. Name должен отображаться внутри кавычек. Можно указать несколько аргументов пары имен и значений в любом порядке как Name1,Value1,...,NameN,ValueN.
'MaxNumSegments',2,'Metric','squared','Normalization','center','NormalizationLength',11 находит два сегмента массива данных, которые имеют наименьшие квадратные евклидовы расстояния до сигнала поиска. И данные, и сигнал нормализуются путем вычитания среднего значения скользящего окна. Окно имеет пять выборок с каждой стороны каждой точки, для общей длины 5 + 5 + 1 = 11 выборок.'Normalization' - Статистика нормализации'none' (по умолчанию) | 'center' | 'power' | 'zscore'Статистика нормализации, указанная как пара, разделенная запятыми, состоящая из 'Normalization' и одно из этих значений:
'none' - Не нормализуйтесь.
'center' - Вычесть локальное среднее.
'power' - Делить на местное среднее.
'zscore' - Вычитание локального среднего и деление на локальное стандартное отклонение.
'NormalizationLength' - Длина нормализацииlength(data) (по умолчанию) | целочисленный скалярДлина нормализации, заданная как разделенная запятыми пара, состоящая из 'NormalizationLength' и целочисленный скаляр. Это значение представляет минимальное количество выборок для нормализации каждой выборки как в данных, так и в сигнале. Если сигнал является матрицей, то 'NormalizationLength' представляет собой ряд столбцов.
Типы данных: single | double
'MaxDistance' - Максимальное расстояние между сегментамиInf (по умолчанию) | положительный вещественный скалярМаксимальное расстояние между сегментами, указанное как пара, разделенная запятыми, состоящая из 'MaxDistance' и положительный действительный скаляр. При указании 'MaxDistance', то findsignal возвращает начальный и конечный индексы всех сегментов data чьи расстояния от signal являются локальными минимумами и меньше, чем 'MaxDistance'.
Типы данных: single | double
'MaxNumSegments' - Максимальное количество возвращаемых сегментов1 (по умолчанию) | целочисленный скалярМаксимальное количество возвращаемых сегментов, указанное как разделенная запятыми пара, состоящая из 'MaxNumSegments' и положительный целочисленный скаляр. При указании 'MaxNumSegments', то findsignal локализует все сегменты data чьи расстояния от сигнала являются локальными минимумами и возвращаются до 'MaxNumSegments' сегменты с наименьшими расстояниями.
Типы данных: single | double
'TimeAlignment' - Техника временной юстировки'fixed' (по умолчанию) | 'dtw' | 'edr'Метод временной синхронизации, указанный как пара, разделенная запятыми, состоящая из 'TimeAlignment' и одно из этих значений:
'fixed' - Не растягивайте и не повторяйте образцы, чтобы минимизировать расстояние.
'dtw' - Попытка уменьшить расстояние путем растяжения временной оси и повторения выборок либо в данных, либо в сигнале. Посмотрите dtw для получения дополнительной информации.
'edr' - минимизировать количество изменений, чтобы расстояние между каждой оставшейся выборкой сегмента данных и его аналогом сигнала находилось в пределах заданного допуска. Правка состоит из удаления образца из данных, сигнала или того и другого. Задайте допуск с помощью 'EDRTolerance' аргумент. Используйте эту опцию, если любой из входных массивов имеет отклонения. Посмотрите edr для получения дополнительной информации.
'EDRTolerance' - Редактировать допуск расстоянияРедактировать допуск расстояния, заданный как разделенная запятыми пара, состоящая из 'EDRTolerance' и реальный скаляр. Используйте этот аргумент для поиска сигнала при 'TimeAlignment' аргумент пары имя-значение имеет значение 'edr'.
Типы данных: single | double
'Metric' - Метрика расстояния'squared' (по умолчанию) | 'absolute' | 'euclidean' | 'symmkl'Метрика расстояния, заданная как разделенная запятыми пара, состоящая из 'Metric' и один из 'squared', 'absolute', 'euclidean', или 'symmkl'. Если X и Y оба являются K-мерными сигналами, то Metric предписывает dmn (X, Y), расстояние между m-м образцом X и n-м образцом Y. Для получения дополнительной информации о dmn (X, Y) см. Динамическое искажение времени.
'squared' - квадрат евклидовой метрики, состоящий из суммы квадратичных разностей:
xk, m − yk, n)
'euclidean' - корневая сумма квадратных разностей, также известная как евклидова или ℓ2 метрика:
xk, m − yk, n)
'absolute' - Сумма абсолютных разностей, также известная как Манхэттен, городской блок, таксаб или ℓ1 метрика:
xk, m − yk, n)
'symmkl' - симметричная метрика Куллбэка-Лейблера. Эта метрика действительна только для вещественных и положительных X и Y:
m − logyk, n)
'Annotate' - Стиль печати'signal' (по умолчанию) | 'data' | 'all'Стиль печати, заданный как разделенная запятыми пара, состоящая из 'Annotate' и одно из этих значений:
'data' строит график данных и выделяет области, которые лучше всего соответствуют сигналу.
'signal' строит график сигнала на отдельном вложенном графике.
'all' строит график сигнала, данных, нормализованного сигнала и нормализованных данных на отдельных вложенных графиках.
Этот аргумент игнорируется при вызове findsignal с выходными аргументами.
istart,istop - Начальный и конечный индексы сегментаНачальный и конечный индексы сегмента, возвращаемые как целочисленные скаляры или векторы.
dist - Минимальное расстояние между данными и сигналамиМинимальное расстояние между данными и сигналом, возвращаемое как скаляр или вектор.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.