Найдите местоположение сигнала с помощью поиска подобия
[istart,istop,dist]
= findsignal(data,signal)
[istart,istop,dist]
= findsignal(data,signal,Name,Value)
findsignal(___)
[
возвращает запуск и индексы остановки сегмента массива данных, 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
на схеме Аргана.
Если массивы являются действительными матрицами, то функция отображает 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')
данные
Массив данныхМассив данных, заданный как вектор или матрица.
Типы данных: single | double
Поддержка комплексного числа: Да
signal
— Поисковый массивПоисковый массив, заданный как вектор или матрица.
Типы данных: single | double
Поддержка комплексного числа: Да
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (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'
Не нормировать.
центр
Вычтите локальное среднее значение.
'power'
— Разделитесь на локальное среднее значение.
'zscore'
— Вычтите локальное среднее значение и разделитесь на локальное стандартное отклонение.
'NormalizationLength'
— Продолжительность нормализацииlength(data)
(значение по умолчанию) | целочисленный скалярПродолжительность нормализации, заданная как пара, разделенная запятой, состоящая из 'NormalizationLength'
и целочисленного скаляра. Это значение представляет минимальное количество выборок, по которым можно нормировать каждую выборку и в данных и в сигнале. Если сигнал является матрицей, то 'NormalizationLength'
представляет много столбцов.
Типы данных: single | double
'MaxDistance'
— MaximumInf
(значение по умолчанию) | положительный действительный скалярМаксимальное расстояние сегмента, заданное как пара, разделенная запятой, состоящая из '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 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.