exponenta event banner

wextend

Удлинить вектор или матрицу

Описание

пример

YEXT= wextend(TYPE,MODE,X,LEN) расширяет действительный входной вектор или матрицу X по длине LEN, с использованием TYPE метод и MODE расширение. TYPE определяет размер удлинения. MODE определяет правило, применяемое для заполнения значений в расширении.

YEXT = wextend(___,LOC) также указывает местоположение внутреннего абонента.

Примеры

свернуть все

Удлинить вектор

Расширение вектора с помощью различных методов.

Создайте вектор и задайте длину удлинения равной 2.

len = 2;
x = [1 2 3]
x = 1×3

     1     2     3

Выполните удлинение нулевой площадки. Для проверки возможности использования различных форм входных аргументов дважды выполните это расширение. Результат одинаков оба раза.

xextzpd1 = wextend('1','zpd',x,len)
xextzpd1 = 1×7

     0     0     1     2     3     0     0

xextzpd2 = wextend('1D','zpd',x,len,'b')
xextzpd2 = 1×7

     0     0     1     2     3     0     0

Выполнение симметричного расширения в половине точки.

xextsym = wextend('1D','sym',x,len)
xextsym = 1×7

     2     1     1     2     3     3     2

Выполнение периодического расширения. Поскольку входной вектор имеет нечетную длину, перед расширением с использованием режима «ppd» wextend добавляет к концу дополнительный пример. Этот образец равен последнему значению справа.

xextper = wextend('1D','per',x,len)
xextper = 1×8

     3     3     1     2     3     3     1     2

Расширить матрицу

Расширение небольшой матрицы с помощью ряда различных методов.

Создайте матрицу и установите длину удлинения равной 2.

len = 2;
X = [1 2 3; 4 5 6]
X = 2×3

     1     2     3
     4     5     6

Выполните расширение массива с нулевой площадкой.

Xextzpd = wextend(2,'zpd',X,len)
Xextzpd = 6×7

     0     0     0     0     0     0     0
     0     0     0     0     0     0     0
     0     0     1     2     3     0     0
     0     0     4     5     6     0     0
     0     0     0     0     0     0     0
     0     0     0     0     0     0     0

Выполните симметричное расширение массива в половине точки.

Xextsym = wextend('2D','sym',X,len)
Xextsym = 6×7

     5     4     4     5     6     6     5
     2     1     1     2     3     3     2
     2     1     1     2     3     3     2
     5     4     4     5     6     6     5
     5     4     4     5     6     6     5
     2     1     1     2     3     3     2

Наблюдайте влияние симметричных, антисимметричных и гладких расширений на uint8 вектор, если значения находятся в пределах или вблизи пределов диапазона типа данных.

Симметричные расширения

Самое маленькое uint8 целое число равно 0, а наибольшее - 255. Создание вектора uint8 целые числа, включающие эти пределы.

dataVector = uint8([0 1 2 253 254 255])
dataVector = 1x6 uint8 row vector

     0     1     2   253   254   255

Получение полноточечного и полуточечного симметричного расширений вектора. Удлините вектор на два значения слева и справа.

wholePointSym = wextend('1','symw',dataVector,2)
wholePointSym = 1x10 uint8 row vector

     2     1     0     1     2   253   254   255   254   253

halfPointSym = wextend('1','symh',dataVector,2)
halfPointSym = 1x10 uint8 row vector

     1     0     0     1     2   253   254   255   255   254

Расширение симметрично никогда не приводит к значениям вне uint8 диапазон.

Антисимметричные расширения

Создание типа double копия вектора, а затем получить антисимметричное расширение копии целиком. Расширение включает отрицательные значения и значения больше 255.

dataVectorDouble = double(dataVector);
wholePointAsymDouble = wextend('1','asymw',dataVectorDouble,2)
wholePointAsymDouble = 1×10

    -2    -1     0     1     2   253   254   255   256   257

Получение антисимметричного расширения оригинала, состоящего из целых точек uint8 вектор. Значения за пределами uint8 диапазон сопоставлен с ближайшим uint8 целое число, которое равно 0 для отрицательных значений и 255 для значений больше 255.

wholePointAsym = wextend('1','asymw',dataVector,2)
wholePointAsym = 1x10 uint8 row vector

     0     0     0     1     2   253   254   255   255   255

Теперь получите полуточечные антисимметричные расширения double копия и оригинал uint8 вектор.

halfPointAsymDouble = wextend('1','asymh',dataVectorDouble,2)
halfPointAsymDouble = 1×10

    -1     0     0     1     2   253   254   255  -255  -254

halfPointAsym = wextend('1','asymh',dataVector,2)
halfPointAsym = 1x10 uint8 row vector

     0     0     0     1     2   253   254   255     0     0

Как и в случае многоточечного антисимметричного расширения, отрицательные значения в расширенном uint8 данные сопоставлены с 0.

Плавные расширения

Получение плавных расширений заказа 0 double копия и оригинал uint8 вектор.

smooth0Double = wextend('1','sp0',dataVectorDouble,2)
smooth0Double = 1×10

     0     0     0     1     2   253   254   255   255   255

smooth0 = wextend('1','sp0',dataVector,2)
smooth0 = 1x10 uint8 row vector

     0     0     0     1     2   253   254   255   255   255

Результаты идентичны. Затем получите плавное расширение порядка 1 для каждого вектора.

smooth1Double = wextend('1','sp1',dataVectorDouble,2)
smooth1Double = 1×10

    -2    -1     0     1     2   253   254   255   256   257

smooth1 = wextend('1','sp1',dataVector,2)
smooth1 = 1x10 uint8 row vector

     0     0     0     1     2   253   254   255   255   255

Значения в double результат, который находится вне uint8 диапазон сопоставлен с ближайшим uint8 значения в uint8 расширение.

Наблюдайте за эффектами симметричных, антисимметричных и гладких расширений int8 данные, если значения находятся на или вблизи пределов диапазона типа данных.

Симметричные расширения

Самое маленькое int8 целое число равно -128, а наибольшее - 127. Создание вектора int8 целые числа, включающие эти пределы.

dataVector = int8([-128 -127 -126 125 126 127])
dataVector = 1x6 int8 row vector

   -128   -127   -126    125    126    127

Получение полноточечных и полуточечных симметричных расширений данных. Удлините вектор на два значения слева и справа.

wholePointSym = wextend('1','symw',dataVector,2)
wholePointSym = 1x10 int8 row vector

   -126   -127   -128   -127   -126    125    126    127    126    125

halfPointSym = wextend('1','symh',dataVector,2)
halfPointSym = 1x10 int8 row vector

   -127   -128   -128   -127   -126    125    126    127    127    126

Расширение симметрично никогда не приводит к значениям вне int8 диапазон.

Антисимметричные расширения

Создание типа double копия вектора, а затем получение цельного антисимметричного расширения копии. Расширение включает отрицательные значения менее -128 и значения более 127.

dataVectorDouble = double(dataVector);
wholePointsAsymDouble = wextend('1','asymw',dataVectorDouble,2)
wholePointsAsymDouble = 1×10

  -130  -129  -128  -127  -126   125   126   127   128   129

Получение антисимметричного расширения оригинала, состоящего из целых точек int8 вектор. Значения за пределами int8 диапазон сопоставлен с ближайшим int8 целое число, которое равно -128 для значений меньше -128 и 127 для значений больше 127.

wholePointAsym = wextend('1','asymw',dataVector,2)
wholePointAsym = 1x10 int8 row vector

   -128   -128   -128   -127   -126    125    126    127    127    127

Теперь получите полуточечные антисимметричные расширения double копия и оригинал int8 вектор.

halfPointAsymDouble = wextend('1','asymh',dataVectorDouble,2)
halfPointAsymDouble = 1×10

   127   128  -128  -127  -126   125   126   127  -127  -126

halfPointAsym = wextend('1','asymh',dataVector,2)
halfPointAsym = 1x10 int8 row vector

    127    127   -128   -127   -126    125    126    127   -127   -126

В double в результате первое значение составляет 127, которое может быть представлено как int8 целое число. Второе значение - 128, которое не может быть представлено как int8 целое число. Поэтому в int8 результат отображается на 127. Остальные значения в типе double результат может быть представлен как int8 целые числа.

Плавные расширения

Получение плавных расширений заказа 0 double копия и оригинал int8 вектор.

smooth0Double = wextend('1','sp0',dataVectorDouble,2)
smooth0Double = 1×10

  -128  -128  -128  -127  -126   125   126   127   127   127

smooth0 = wextend('1','sp0',dataVector,2)
smooth0 = 1x10 int8 row vector

   -128   -128   -128   -127   -126    125    126    127    127    127

Результаты идентичны. Теперь получите плавное расширение порядка 1 для каждого вектора.

smooth1Double = wextend('1','sp1',dataVectorDouble,2)
smooth1Double = 1×10

  -130  -129  -128  -127  -126   125   126   127   128   129

smooth1 = wextend('1','sp1',dataVector,2)
smooth1 = 1x10 int8 row vector

   -128   -128   -128   -127   -126    125    126    127    127    127

Значения в double результат за пределами int8 диапазон сопоставлен с ближайшим int8 значения в int8 расширение.

Входные аргументы

свернуть все

Метод расширения, используемый на входе, указанный как одно из значений, перечисленных здесь.

TYPEОписание
1'1''1d', или '1D'

1-D расширение

2'2''2d', или '2D'

2-D расширение

'ar' или 'addrow'

Добавить строки

'ac' или 'addcol'

Добавить столбцы

Типы данных: double | char

Конкретный метод расширения для расширения входных данных, указанный как одно из значений, перечисленных здесь. Дополнительные сведения см. в разделе dwtmode.

MODE

Описание

'zpd'

Нулевое расширение

'sp0'

Плавное расширение порядка 0

'spd' (или 'sp1')

Плавное расширение порядка 1

'sym' или 'symh'

Симметричное заполнение (половина точки): граничное значение симметричной репликации

'symw'

Симметричное заполнение (целая точка): граничное значение симметричной репликации

'asym' или 'asymh'

Антисимметричное заполнение (половина точки): граничное значение антисимметричной репликации

'asymw'

Антисимметричное заполнение (целая точка): граничное значение антисимметричной репликации

'ppd'

Периодизированное удлинение (1)

'per'

Периодизированное удлинение (2)

Если длина сигнала нечетная, wextend добавляет справа копию последнего значения и выполняет расширение с помощью 'ppd' режим. В противном случае 'per' уменьшает до 'ppd'. Это правило также применяется к изображениям.

Для получения дополнительной информации о симметричных режимах расширения см. [1].

Примечание

Режимы расширения 'sp0' и 'spd' (или 'sp1') приведите данные к удвоенной точности перед выполнением расширения. Для целочисленных типов данных: wextend предупреждает, если происходит одно из следующих действий.

  • Преобразование в двойное приводит к потере точности.

  • Запрошенное расширение приводит к появлению целых чисел за пределами диапазона, где числа с двойной точностью могут точно представлять последовательные целые числа.

Типы данных: char

Входные данные, заданные как действительный вектор или матрица.

Типы данных: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

Длина расширения, заданная как неотрицательное целое число или двухэлементный вектор неотрицательных целых чисел. Можно расширить матрицу, выразив LEN как [LROW,LCOL], где LROW - количество добавляемых строк и LCOL - количество добавляемых столбцов. Можно выполнить 2-D расширение матрицы на одинаковую величину в обоих направлениях, указав LEN как одно целое число.

Расширение длиной 0 эквивалентно нулевому расширению.

Пример: wextend('2D','sym',[1 2 3 4;5 6 7 8],[2 0]) удлиняет только два ряда вверх и два ряда вниз.

Расположение внутреннего абонента, указанного как один или пара следующих элементов:

  • 'l' - Внутренний номер слева

  • 'u' - Расширение вверх

  • 'r' - Право внутреннего абонента

  • 'd' - Внутренний абонент не работает

  • 'b' - Удлинение с обеих сторон

  • 'n' - Расширение NULL

Допустимые значения и значения по умолчанию для LOCи поведение LEN, зависит от указанного TYPE.

НАПЕЧАТАТЬМЕСТОПОЛОЖЕНИЕ
1, '1', 1d' или '1D''l', 'u', 'r', 'd', 'b', или 'n'

Пример: wextend('1D','zpd',X,3,'r') расширяет входной вектор X три элемента справа.

По умолчанию: 'b'

LEN - длина расширения.
2, '2', '2d' или '2D' [LOCROW,LOCCOL], где LOCROW и LOCCOL являются 1-D местоположениями расширения или 'n' Ничего.

Пример: wextend('2D','zpd',X,[2 3],'ub') расширяет входной вектор или матрицу X два ряда вверх и три столбца с обеих сторон.

По умолчанию: 'bb'

LEN, указано как [LROW,LCOL], - количество добавляемых строк и столбцов.
'ar' или 'addrow''l', 'u', 'r', 'd', 'b', или 'n'

Пример: wextend('addrow','zpd',X,4,'d') расширяет входной вектор или матрицу X четыре ряда вниз.

По умолчанию: 'b'

LEN - количество добавляемых строк.
'ac' или 'addcol''l', 'u', 'r', 'd', 'b', или 'n'

Пример: wextend('addcol','zpd',X,1,'l') расширяет входной вектор или матрицу X один столбец слева.

По умолчанию: 'b'

LEN - количество добавляемых столбцов.

Совет

Для большинства вейвлет-приложений работает либо периодическое расширение, либо симметричное расширение.

Алгоритмы

Если значение выходит за пределы диапазона типа входных данных, wextend сопоставляет его с ближайшим значением типа входных данных. Примеры расширения данных за пределы диапазона типа данных см. в разделах Расширение данных uint8 за пределы диапазона и Расширение данных int8 за пределы диапазона.

Ссылки

[1] Странг, G. и Т. Нгуен. Вейвлеты и банки фильтров. Уэлсли, Массачусетс: Уэлсли-Кембридж Пресс, 1996.

Расширенные возможности

.

См. также

Представлен до R2006a