?? wht.m
字號:
function y = WHT(x_in, n)
% x 輸入向量,列向量
% n 即Walsh-Hardma變換的點數(shù),必須是2的冪次方
% alpha 即重疊保留的因子,在我們的方案中alpha = 2
% y 輸出向量
% alpha=2;
alpha=2;
% 判斷輸入?yún)?shù)n
n1 = log2(n);
n2 = mod(n1,1);
if (n2 ~= 0)
error('wht.m模塊的輸入?yún)?shù)n必須是2的冪次方');
end
% 輸入向量應(yīng)該是一個列向量
% 判斷輸入向量x是行向量還是列向量
[a , b] = size(x_in);
if (a>1)
x = x_in;
else
x = x_in.'; % 注意.'是轉(zhuǎn)置,'是共軛轉(zhuǎn)置
end
y = zeros(length(x),1);
%% 構(gòu)成[n*2n]的Walsh-Hardma變換矩陣
% [n*n]的Walsh-Hardma變換矩陣
W = zeros(n,n);
W(1,1) = 1;
for t = 1 : n1 % t 的標記單位是log2(n)
for i = 1 : n
for j = 1 : n
if (i <= 2^(t-1) && j <= 2^(t-1))
W(i ,j) = W(i ,j);
elseif (i <= 2^(t-1) && j > 2^(t-1))
W(i ,j) = W (i , j-2^(t-1));
elseif (i > 2^(t-1) && j <= 2^(t-1))
W(i ,j) = W (i-2^(t-1) , j);
else
W(i ,j) = -W (i-2^(t-1) , j-2^(t-1));
end
end
end
end
% 構(gòu)成[n*2n]的Walsh-Hardma變換矩陣
W1 = zeros(n,2*n);
for i1 = 1 : n
W1(i1,1:n) = W(i1,:);
W1(i1,n+1:2*n) = W(i1,:);
end
%% 生成變換向量 x1
len = n*2;
x1 = zeros(len, 1);
tlen = length(x) / n;
for i = 1:tlen
if (i == 1)
for i1 = 1 : n/2
x1(i1, 1) = 0;
end
x1(n/2+1:1.5*n,1) = x((i-1)*n+1:i*n,1);
x1((1.5*n+1):2*n,1) = x((i*n+1):(i*n+0.5*n),1);
elseif (i < tlen )
x1(1:2*n) = x((i-1)*n+1-n/2:i*n+n/2,1);
else
x1(1:1.5*n) = x((i-1)*n+1-n/2:i*n,1);
for i1 = 1.5*n+1 : 2*n
x1(i1, 1) = 0;
end
end
y((i-1)*n+1:i*n,1) = W1*x1;
end
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -