Найдите местоположение сигнала с помощью поиска подобия
[ возвращает запуск и индексы остановки сегмента массива данных, 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

Сгенерируйте еще одну поврежденную версию слова. Ищите шумную версию буквы "A". Отобразите расстояние между поисковым массивом и сегментом данных, самым близким к нему. Сегмент проникает в "T", потому что горизонтальные оси тверды.
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. Разделитесь на локальное среднее значение, чтобы нормировать данные и сигнал. Используйте симметричную метрику Kullback-Leibler.
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' — Максимальное количество сегментов, чтобы возвратиться (значение по умолчанию) | положительный целочисленный скалярМаксимальное количество сегментов, чтобы возвратиться в виде разделенной запятой пары, состоящей из '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 th выборка X и n th выборка Y. Смотрите Динамическую трансформацию временной шкалы для получения дополнительной информации о dmn (X, Y).
'squared' — Квадрат Евклидовой метрики, состоя из суммы различий в квадрате:
'euclidean' — Корневая сумма различий в квадрате, также известных как Евклидово или ℓ 2 метрики:
'absolute' — Сумма абсолютных разностей, также известных как Манхэттен, городской квартал, такси или ℓ 1 метрика:
'symmkl' — Симметричная метрика Kullback-Leibler. Эта метрика допустима только для действительных и положительных X и Y:
'Annotate' — Стиль графика'signal' (значение по умолчанию) | 'data' | 'all'Стиль графика в виде разделенной запятой пары, состоящей из 'Annotate' и одно из этих значений:
'data' отображает данные на графике и подсвечивает области, которые лучше всего совпадают с сигналом.
'signal' строит сигнал в отдельном подграфике.
'all' строит сигнал, данные, нормированный сигнал и нормированные данные в отдельных подграфиках.
Этот аргумент проигнорирован, если вы вызываете findsignal с выходными аргументами.
istart,istop — Индексы начала и конца сегментаИндексы начала и конца сегмента, возвращенные как целочисленные скаляры или векторы.
dist — Минимальное расстояние сигнала даннымиМинимальное расстояние сигнала данными, возвращенное как скаляр или вектор.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.