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