exponenta event banner

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

Введение

В этом примере показано, как использовать преобразование Уолша-Адамара (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=1N∑i=0N-1xiWAL (n, i), n = 1,2,..., N-1

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

Быстрые алгоритмы, подобные алгоритму Кули-Туки, были разработаны для реализации преобразования Уолша-Адамара со сложностью O (N log N) (см. [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              

Связь с использованием технологий связи с расширенным спектром, основанных на расширенном спектре, таких как 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

См. также

|