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