exponenta event banner

ifwht

Обратное быстрое преобразование Уолша-Адамара

Синтаксис

y = ifwht(x)
y = ifwht(x,n)
y = ifwht(x,n,ordering)

Описание

y = ifwht(x) возвращает коэффициенты обратного дискретного быстрого преобразования Уолша-Адамара входного сигнала x. Если x является матрицей, обратное быстрое преобразование Уолша-Адамара вычисляется для каждого столбца x. Обратное быстрое преобразование Уолша-Адамара работает только с сигналами длиной, равной степени 2. Если длина x меньше степени 2, его длина заполняется нулями до следующей большей степени двух перед обработкой.

y = ifwht(x,n) возвращает значение n-точное обратное дискретное преобразование Уолша-Адамара, где n должна быть силой 2.

y = ifwht(x,n,ordering) задает порядок, используемый для возвращаемых коэффициентов обратного преобразования Уолша-Адамара. Чтобы указать порядок, необходимо ввести значение длины n или, чтобы использовать поведение по умолчанию, укажите пустой вектор ([]) для n. Допустимыми значениями для заказа являются:

ЗаказОписание
'sequency'Коэффициенты в порядке возрастания значения последовательности, где каждая строка имеет дополнительное пересечение нуля. Это порядок по умолчанию.
'hadamard'Коэффициенты в нормальном порядке Адамара.
'dyadic'Коэффициенты в порядке кода Грея, где происходит изменение одного бита от одного коэффициента к следующему.

Примеры

свернуть все

Используйте сигнал электрокардиограммы (ЭКГ), чтобы проиллюстрировать работу с преобразованием Уолша-Адамара. Сигналы ЭКГ обычно очень велики и должны храниться для анализа и поиска в будущем. Преобразования Уолша-Адамара особенно хорошо подходят для этого применения, поскольку они обеспечивают сжатие и, таким образом, требуют меньшего пространства для хранения. Они также обеспечивают быструю реконструкцию сигналов.

Начните с сигнала ЭКГ. Реплицируйте его, чтобы создать более длинный сигнал и вставить дополнительный случайный шум.

xe = ecg(512);
xr = repmat(xe,1,8);
x = xr + 0.1.*randn(1,length(xr));

Преобразование сигнала с помощью быстрого преобразования Уолша-Адамара. Постройте график исходного сигнала и преобразованного сигнала.

y = fwht(x);

subplot(2,1,1)
plot(x)
xlabel('Sample index')
ylabel('Amplitude')
title('ECG Signal')

subplot(2,1,2)
plot(abs(y))
xlabel('Sequency index')
ylabel('Magnitude')
title('WHT Coefficients')

Figure contains 2 axes. Axes 1 with title ECG Signal contains an object of type line. Axes 2 with title WHT Coefficients contains an object of type line.

График показывает, что большая часть энергии сигнала находится в более низких значениях последовательности, ниже приблизительно 1100. Сохраните только первые 1024 коэффициента (из 4096). Попробуйте точно восстановить сигнал только из этих сохраненных коэффициентов.

y(1025:length(x)) = 0;
xHat = ifwht(y);

figure
plot(x)
hold on
plot(xHat)
xlabel('Sample Index')
ylabel('ECG Signal Amplitude')
legend('Original','Reconstructed')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Original, Reconstructed.

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

Алгоритмы

Алгоритм обратного быстрого преобразования Уолша-Адамара аналогичен алгоритму Кули-Туки, используемому для обратного БПФ. Оба используют структуру бабочки для определения коэффициентов преобразования. Дополнительные сведения см. в ссылках.

Ссылки

[1] Бошам, Кеннет Г. Применение Уолша и связанных с ним функций: с введением в теорию последовательности. Лондон: Академическая пресса, 1984.

[2] Пиво, Том. «Преобразования Уолша.» Американский журнал физики. т. 49, 1981, стр. 466-472.

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.

См. также

| | | |

Представлен в R2008b