答案 0 :(得分:1)
这取决于你想要达到的目标。 Haar矩阵是2x2 DCT矩阵,所以反过来,您可以将NxN DCT(II)矩阵视为该块大小的Haar矩阵。
或者如果N是二元的,N = 2 ^ n,那么你可能要求哈尔变换的n个阶段的变换矩阵。由于每个步骤中的采样率抽取,这可能是一个问题。
答案 1 :(得分:1)
总而言之。维基百科给出了'等式':
我写了一个递归解决方案,用于在八度音阶中生成非标准化的NxN Haar矩阵。
function [h] = haar(n)
h = [1];
if n > 2
h = haar(n/2);
endif
% calculate upper haar part
h_n = kron(h,[1,1]);
% calculate lower haar part
h_i = kron(eye(length(h)),[1,-1]);
% combine parts
h = [h_n; h_i];
endfunction
disp(haar(8));
答案 2 :(得分:1)
以下是基于recursive formula for the Haar matrix
的规范化和非规范化Haar matrix的算法:
来自论文"离散小波和扰动理论"作者:W-H Steeb,et al。这是Python中的实现
def haarMatrix(n, normalized=False):
# Allow only size n of power 2
n = 2**np.ceil(np.log2(n))
if n > 2:
h = haarMatrix(n / 2)
else:
return np.array([[1, 1], [1, -1]])
# calculate upper haar part
h_n = np.kron(h, [1, 1])
# calculate lower haar part
if normalized:
h_i = np.sqrt(n/2)*np.kron(np.eye(len(h)), [1, -1])
else:
h_i = np.kron(np.eye(len(h)), [1, -1])
# combine parts
h = np.vstack((h_n, h_i))
return h