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'Коэффициенты в порядке кода Грея, где одно битовое изменение происходит от одного коэффициента к следующему.

Примеры

свернуть все

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

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

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.

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

Алгоритмы

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

Ссылки

[1] Beauchamp, Kenneth G. Applications of Walsh and Related Functions: With a Introduction to Sequency Theory. Лондон: Академическая пресса, 1984.

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

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

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.

См. также

| | | |

Введенный в R2008b