cos-lab3-vorontsov / ЦОС лаба 3 Воронцов
.odtБелорусский Государственный Университет
Информатики и Радиоэлектроники
Кафедра РТС
Отчет по лабораторной работе №3
«Преобразование Уолша-Адамара»
Выполнил ст. гр. 942802 Воронцов М.А. |
Проверил
Ходыко Д.Л. |
Минск 2012
Цель работы
-
Изучить свойства преобразования Уолша-Адамара.
-
Получить навыки моделирования преобразования Уолша-Адамара в
среде Matlab.
Выполнение
1. Построил матрицу Адамара 8-го порядка.
Код:
H2=[1 1; 1 -1];
H4=[H2 H2; H2 -H2];
H8=[H4 H4; H4 -H4];
Результат:
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
2. Проверил свойства ортогональности и мультипликативности строк матрицы Адамара.
а) Ортогональность
Код:
k=2;
l=2;
sum( H8(k,:).*H8(l,:) ) % при k = l
k=2;
l=3;
sum( H8(k,:).*H8(l,:) ) % при k != l
Результат:
ans = 8
ans = 0
б) Мультипликативность
Код:
k=2;
l=3;
H8(k+1,:).*H8(l+1,:) % умноженные строки
bitxor(k,l); % суммируем по модулю 2
H8(ans+1,:) % строка с номером суммы по модулю 2
Результат:
ans =
1 -1 1 -1 1 -1 1 -1
ans =
1 -1 1 -1 1 -1 1 -1
3. Вычислил прямое и обратное преобразования Уолша-Адамара случайного действительного сигнала. Построил графики сигнала и спектра. Определил вычислительные затраты. Сделал выводы.
Код:
s=rand(1,8) % формируем действительный сигнал
B=s*H8 % преобразование Уолша-Адамара
s_inv=(1/8)*B*H8 % обратное преобразование Уолша-Адамара
subplot(2,1,1) % график сигнала
plot( s )
subplot(2,1,2) % график спектра
plot( abs(B) )
Результат:
s = 0.68485 0.20709 0.83728 0.89675 0.26263 0.39086 0.75622 0.91425
B = 4.94994 0.13204 -1.85906 0.56703 0.30201 0.70454 0.17490 0.50742
s_inv = 0.68485 0.20709 0.83728 0.89675 0.26263 0.39086 0.75622 0.91425
сигнал
спектр
Выводы: вычислительные затраты составляют: N2 произведений и N2-N сумм. (В данном случае N=8).
4. Проверил свойство линейности и инвариантности к диадному сдвигу преобразования Уолша-Адамара. Сделал выводы.
Код:
N=8;
H = hadamard(N);
s=rand(1,N) % сигнал
tau=4;
for c = 0:(length(s)-1) % выполняем диадный сдвиг
s_diad(c+1) = s(bitxor(c,tau)+1);
end
% выводим значения
s_diad
B = s*H
B_diad = s_diad*H
% рисуем графики
subplot(2,1,1)
plot( abs(B) )
subplot(2,1,2)
plot( abs(B_diad) )
Результат:
s = 0.323688 0.056303 0.588267 0.661792 0.301716 0.559631 0.613680 0.932707
s_diad = 0.301716 0.559631 0.613680 0.932707 0.323688 0.056303 0.588267 0.661792
B = 4.03778 -0.38308 -1.55511 0.40202 -0.77768 0.77080 -0.18503 0.27980
B_diad = 4.03778 -0.38308 -1.55511 0.40202 0.77768 -0.77080 0.18503 -0.27980
спектр исходного сигнала
спектр сигнала, подвергнутого диадному сдвигу
Выводы: Преобразование Уолша-Адамара инвариантно к диадному сдвигу.
5. Вычислил корреляционную функцию дискретного случайного действительного сигнала с помощью матричного преобразования Уолша- Адамара. Построил график корреляционной функции.
Код:
N = 8;
H = hadamard(N);
s = rand(1,N) % сигнал
B = s*H % ПУА
R = (1/N) * (B.*B) * H % корреляционная функция
subplot(2,1,1) % рисуем графики
plot(s)
subplot(2,1,2)
plot(R)
Результат:
s = 0.51428 0.52470 0.68830 0.73858 0.88928 0.57721 0.40518 0.25943
B = 4.59696 0.39714 0.41399 0.20618 0.33477 -0.51852 -1.18979 -0.12647
R = 2.9145 2.7933 2.5032 2.4111 2.4614 2.4825 2.7658 2.8002
сигнал
корреляционная функция
6. Вычислил корреляционную функцию с помощью графа быстрого преобразования Уолша-Адамара. Графы построил в Simulink. Определил вычислительные затраты. Сделал выводы.
а) Предварительная проверка на языке Matlab
Код:
H = hadamard(8);
s = floor(rand(1,N)*10)
B = s*H
R = (1/N) * (B.*B) * H
Результат:
s = 7 8 3 4 3 8 1 7
B = 41 -13 11 1 3 9 5 -1
R = 261 198 224 162 232 210 208 186
б) Построения в Simulink
Граф быстрого преобразования Уолша-Адамара в Simulink
Корреляционная функция, вычисленная с помощью графа быстрого преобразования Уолша-Адамара.
Выводы: быстрое преобразование Уолша-Адамара потребовало N log2N операций, таким образом оно на (N2-N)-(N log2N) = N(N-log2N-1) операций выгоднее, чем обычное преобразование Уолша-Адамара.
Предварительное задание
1. Вычислил корреляционную функцию сигнала, используя диадный сдвиг.
Код:
N = 8;
H = hadamard(N);
s=rand(1,N)
B=s*H;
tau=4; % диадный сдвиг
for c = 0:(length(s)-1)
s_diad(c+1) = s(bitxor(c,tau)+1);
end
B_diad = s_diad*H;
R = (1/N) * (abs(B).*abs(B_diad)) * H
Результат:
s = 0.2611899 0.1092484 0.1562387 0.3692023 0.8770364 0.5803670 0.7307694 0.0019343
R = 1.88092 1.19327 1.44635 1.07862 0.81473 1.03501 1.08476 0.98964
2. Вычислил корреляционную функцию того же сигнала, используя преобразование Уолша-Адамара.
Код:
R = (1/N) * (B.*B) * H
Результат:
R = 1.88092 1.19327 1.44635 1.07862 0.81473 1.03501 1.08476 0.98964
Выводы: В этой лабораторной работе мы изучили свойства преобразования Уолша-Адамара. Получили навыки моделирования преобразования Уолша-Адамара в среде Matlab и среде Simulink. Научились выполнять диадный сдвиг и вычислять корреляционную функцию.