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

Введение

Этот пример показывает, как использовать преобразование Уолша-Адамара (WHT) и некоторые из его свойств путем демонстрации двух приложений: связи с использованием расширенного спектра и обработки сигналов ЭКГ.

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

WHT является субоптимальным, не синусоидальным, ортогональным преобразованием, которое разлагает сигнал на набор ортогональных, прямоугольных сигналов, называемых функциями Уолша. Преобразование не имеет умножителей и реально, потому что амплитуда функций Уолша (или Адамара) имеет только два значения, + 1 или -1.

Функции Уолша (или Адамара)

Функции Уолша являются прямоугольной или квадратной формой волны со значениями -1 или + 1. Важной характеристикой функций Уолша является последовательность, которая определяется из количества пересечений нулем на единичный временной интервал. Каждая функция Уолша имеет уникальное значение последовательности .

Функции Уолша могут быть сгенерированы многими способами (см. [1]). Здесь мы используем hadamard функция в MATLAB ® для генерации функций Уолша. Длина восьми функций Уолша сгенерированы следующим образом.

N = 8;  % Length of Walsh (Hadamard) functions
hadamardMatrix = hadamard(N)
hadamardMatrix = 8×8

     1     1     1     1     1     1     1     1
     1    -1     1    -1     1    -1     1    -1
     1     1    -1    -1     1     1    -1    -1
     1    -1    -1     1     1    -1    -1     1
     1     1     1     1    -1    -1    -1    -1
     1    -1     1    -1    -1     1    -1     1
     1     1    -1    -1    -1    -1     1     1
     1    -1    -1     1    -1     1     1    -1

Строки (или столбцы) симметричного hadamardMatrix содержат функции Уолша. Функции Уолша в матрице не расположены в порядке увеличения их последовательностей или количества пересечений нулем (то есть 'порядок последовательности'), а расположены в 'порядке Адамара'. Матрица Уолша, содержащая функции Уолша вдоль строк или столбцов в порядке возрастания их последовательностей, получается изменением индекса hadamardMatrix следующим образом.

HadIdx = 0:N-1;                          % Hadamard index
M = log2(N)+1;                           % Number of bits to represent the index

Каждый столбец индекса последовательности (в двоичном формате) задается сложением по модулю-2 столбцов обратного по битам индекса Адамара (в двоичном формате).

binHadIdx = fliplr(dec2bin(HadIdx,M))-'0'; % Bit reversing of the binary index
binSeqIdx = zeros(N,M-1);                  % Pre-allocate memory
for k = M:-1:2
    % Binary sequency index 
    binSeqIdx(:,k) = xor(binHadIdx(:,k),binHadIdx(:,k-1));
end
SeqIdx = binSeqIdx*pow2((M-1:-1:0)');    % Binary to integer sequency index
walshMatrix = hadamardMatrix(SeqIdx+1,:) % 1-based indexing
walshMatrix = 8×8

     1     1     1     1     1     1     1     1
     1     1     1     1    -1    -1    -1    -1
     1     1    -1    -1    -1    -1     1     1
     1     1    -1    -1     1     1    -1    -1
     1    -1    -1     1     1    -1    -1     1
     1    -1    -1     1    -1     1     1    -1
     1    -1     1    -1    -1     1    -1     1
     1    -1     1    -1     1    -1     1    -1

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

Пара прямого и обратного преобразования Уолша для сигнала x (t) длины N

yn=1Ni=0N-1xiWAL(n,i),n=1,2,,N-1

xi=n=0N-1ynWAL(n,i),i=1,2,,N-1

Быстрые алгоритмы, подобные алгоритму Кули-Тьюки, были разработаны, чтобы реализовать преобразование Уолша-Адамара со сложностью O(NlogN) (см. [1] и [2]). Поскольку матрица Уолша симметрична, и прямое, и обратное преобразования являются идентичными операциями, за исключением масштабного коэффициента 1/N. Функции fwht и ifwht реализуйте прямой и обратный WHT соответственно.

Пример 1 Выполните WHT на матрице Уолша. Ожидаемым результатом является матрица тождеств, потому что строки (или столбцы) симметричной матрицы Уолша содержат функции Уолша.

y1 = fwht(walshMatrix)                % Fast Walsh-Hadamard transform
y1 = 8×8

     1     0     0     0     0     0     0     0
     0     1     0     0     0     0     0     0
     0     0     1     0     0     0     0     0
     0     0     0     1     0     0     0     0
     0     0     0     0     1     0     0     0
     0     0     0     0     0     1     0     0
     0     0     0     0     0     0     1     0
     0     0     0     0     0     0     0     1

Пример 2 Создайте прерывистый сигнал путем масштабирования и добавления произвольных столбцов матрицы Адамара. Этот сигнал формируется с использованием взвешенных функций Уолша, поэтому WHT должен возвращать ненулевые значения, равные весам при соответствующих индексах последовательности. При оценке WHT ordering задается как 'hadamard', потому что для получения функций Уолша используется матрица Адамара (вместо матрицы Уолша).

N = 8;
H = hadamard(N);                      % Hadamard matrix
% Construct a signal by adding a few weighted Walsh functions
x = 8.*H(1,:) + 12.*H(3,:) + 18.*H(5,:) + 10.*H(8,:);           
y = fwht(x,N,'hadamard')
y = 1×8

     8     0    12     0    18     0     0    10

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

xHat = ifwht(y,N,'hadamard');
norm(x-xHat)
ans = 0

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

Приложения преобразования Уолша

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

Сигнал ЭКГ и соответствующее ему преобразование Уолша-Адамара оценены и показаны ниже.

x1 = ecg(512);                    % Single ecg wave
x = repmat(x1,1,8);                 
x = x + 0.1.*randn(1,length(x));  % Noisy ecg signal
y = fwht(x);                      % Fast Walsh-Hadamard transform

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.

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

y(1025:length(x)) = 0;            % Zeroing out the higher coefficients    
xHat = ifwht(y);                  % Signal reconstruction using inverse WHT  

figure
plot(x)
hold on
plot(xHat,'r')
xlabel('Sample index')
ylabel('ECG signal amplitude')
legend('Original Signal','Reconstructed Signal')

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

Воспроизведенный сигнал очень близок к исходному сигналу.

Чтобы восстановить исходный сигнал, мы хранили только первые 1024 коэффициента и длину сигнала ЭКГ. Это представляет степень сжатия приблизительно 4:1.

req = [length(x) y(1:1024)];   
whos x req
  Name      Size              Bytes  Class     Attributes

  req       1x1025             8200  double              
  x         1x4096            32768  double              

Связь с использованием технологий связи на основе спектра Spreed Spectrum, таких как CDMA, использует коды Уолша (выведенные из функций Уолша), чтобы расширить сигналы сообщений и преобразования WHT, чтобы сжать их. Поскольку коды Уолша являются ортогональными, любой сигнал, кодированный Уолшем, появляется как случайный шум для терминала, если только этот терминал не использует тот же самый код для кодирования. Ниже мы покажем процесс расширения, определения кодов Уолша, используемых для расширения, и сжатия, чтобы восстановить сигнал сообщения.

Два терминала МДКР расширяют свои соответствующие сигналы сообщений, используя два различных кода Уолша (также известных как коды Адамара) длины 64. Сигналы расширенного сообщения повреждаются аддитивным белым Гауссовым шумом с отклонением 0,1.

В приемнике (базовой станции) обработка сигнала является некогерентной, и принятая последовательность длины N должна быть коррелирована с 2 ^ N кодовыми словами Уолша, чтобы извлечь коды Уолша, используемые соответствующими передатчиками. Это может быть эффективно сделано путем преобразования принятых сигналов в область последовательности с помощью быстрого преобразования Уолша-Адамара. Используя расположение последовательности, в котором происходит пик, может быть определен соответствующий код Уолша-Адамара (или функция Уолша), используемый. График ниже показывает, что коды Уолша-Адамара с последовательностью (с ordering = 'hadamard') 60 и 10 использовались в первом и втором передатчиках, соответственно.

load mess_rcvd_signals.mat
N = length(rcvdSig1);
y1 = fwht(rcvdSig1,N,'hadamard');
y2 = fwht(rcvdSig2,N,'hadamard');
figure
plot(0:63,y1,0:63,y2)
xlabel('Sequency index')
ylabel('WHT of the Received Signals')
title('Walsh-Hadamard Code Extraction')
legend('WHT of Tx - 1 signal','WHT of Tx - 2 signal')

Figure contains an axes. The axes with title Walsh-Hadamard Code Extraction contains 2 objects of type line. These objects represent WHT of Tx - 1 signal, WHT of Tx - 2 signal.

Сжатие (или декодирование) для извлечения сигнала сообщения может быть выполнено простым способом путем умножения принятых сигналов на соответствующие коды Уолша-Адамара, сгенерированные с использованием hadamard функция. (Обратите внимание, что индексация в MATLAB ® начинается с 1, поэтому коды Уолша-Адамара с последовательностью 60 и 10 получаются из путем выбора столбцов (или строк) 61 и 11 в матрице Адамара.)

N = 64; 
hadamardMatrix = hadamard(N);
codeTx1 = hadamardMatrix(:,61);         % Code used by transmitter 1  
codeTx2 = hadamardMatrix(:,11);         % Code used by transmitter 2

Операция декодирования для восстановления исходного сигнала сообщения

xHat1 = codeTx1 .* rcvdSig1;            % Decoded signal at receiver 1
xHat2 = codeTx2 .* rcvdSig2;            % Decoded signal at receiver 2

Восстановленные сигналы сообщения на стороне приемника показаны ниже и наложены на исходные сигналы для сравнения.

subplot(2,1,1)
plot(x1)
hold on
plot(xHat1)
legend('Original Message','Reconstructed Message','Location','Best')
xlabel('Sample index')
ylabel('Message signal amplitude')
subplot(2,1,2)
plot(x2)
hold on
plot(xHat2)
legend('Original Message','Reconstructed Message','Location','Best')
xlabel('Sample index')
ylabel('Message signal amplitude')

Figure contains 2 axes. Axes 1 contains 2 objects of type line. These objects represent Original Message, Reconstructed Message. Axes 2 contains 2 objects of type line. These objects represent Original Message, Reconstructed Message.

Ссылки

  1. К. Г. Бошан, Приложения Уолша и связанные функции - с введением в теорию секвенсации, академическая пресса, 1984

  2. T. Beer, Walsh Transforms, American Journal of Physics, Vol. 49, Issue 5, May 1981

См. также

|

Для просмотра документации необходимо авторизоваться на сайте