我找不到生成非标准化 NxN Haar 矩阵的定义。那么方程是什么?
见:http ://en.wikipedia.org/wiki/Haar_wavelet
谢谢,克里斯
这是基于 的归一化和非归一化Haar 矩阵的算法recursive formula for the Haar matrix
:
来自 WH Steeb 等人的论文“离散小波和微扰理论”。这是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
这取决于您想要实现的目标。Haar 矩阵是 2x2 DCT 矩阵,因此反过来,您可以将 NxN DCT(II) 矩阵视为该块大小的 Haar 矩阵。
或者,如果 N 是二元的,N=2^n,那么您可能会要求 Haar 变换的 n 个阶段的变换矩阵。由于每个步骤中的采样率抽取,这可能是一个问题。
谢谢大家。维基百科给出了“方程式”:
我编写了一个递归解决方案,用于在八度音程中生成未归一化的 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));
def HT(N):
if N == 1: return np.array([[1]])
return 1/np.sqrt(2)*np.concatenate(
(
np.kron(HT(N//2),[1,1])
,
np.kron(np.identity(N//2),[1,-1])
),axis = 0
)
我在 Wikipedia 中使用了添加归一化因子的方程1/sqrt(2)
。矩阵变为正交。它有效吗?