类 FastHadamardTransformer
java.lang.Object
org.hipparchus.transform.FastHadamardTransformer
- 所有已实现的接口:
-
Serializable
,RealTransformer
实现了快速哈达玛变换(FHT)。将输入向量x转换为输出向量y。
除了对实向量进行变换外,哈达玛变换还可以将整数向量转换为整数向量。然而,这种整数变换不能直接反转。由于存在缩放因子,可能导致有理数结果。例如,整数向量(0, 1, 0, 1)的逆变换是有理数向量(1/2, -1/2, 0, 0)。
- 另请参阅:
-
构造器概要
-
方法概要
修饰符和类型方法说明protected double[]
fht
(double[] x) 仅使用减法和加法的FHT(快速哈达玛变换)。protected int[]
fht
(int[] x) 返回指定整数数据集的正向变换。double[]
transform
(double[] f, TransformType type) 返回指定实数据集的(正向、反向)变换。int[]
transform
(int[] f) 返回指定整数数据集的正向变换。由于可能导致双精度结果的缩放因子,整数变换不能直接反转。double[]
transform
(UnivariateFunction f, double min, double max, int n, TransformType type) 返回指定实函数在指定区间上采样的(正向、反向)变换。
-
构造器详细资料
-
FastHadamardTransformer
public FastHadamardTransformer()空构造函数。这个构造函数并非必需,但它可以防止在JDK 18及更高版本中出现虚假的javadoc警告。
- 从以下版本开始:
- 3.0
-
-
方法详细资料
-
transform
返回指定实数据集的(正向、反向)变换。- 指定者:
-
transform
在接口中RealTransformer
- 参数:
-
f
- 要转换的实数据数组(信号) -
type
- 要执行的变换类型(正向、反向) - 返回:
- 转换后的实数组(频谱)
- 抛出:
-
MathIllegalArgumentException
- 如果数据数组的长度不是2的幂
-
transform
返回指定在指定区间上采样的实函数的(正向、反向)变换。- 指定者:
-
transform
在接口中RealTransformer
- 参数:
-
f
- 要采样和变换的函数 -
min
- 区间的(包含)下界 -
max
- 区间的(不包含)上界 -
n
- 样本点的数量 -
type
- 要执行的变换类型(正向、反向) - 返回:
- 转换后的实数组
- 抛出:
-
MathIllegalArgumentException
- 如果下界大于或等于上界 -
MathIllegalArgumentException
- 如果样本点数量为负 -
MathIllegalArgumentException
- 如果样本点数量不是2的幂
-
transform
public int[] transform(int[] f) 返回指定整数数据集的正向变换。由于可能导致双精度结果的缩放因子,整数变换不能直接反转。- 参数:
-
f
- 要转换的整数数据数组(信号) - 返回:
- 转换后的整数数组(频谱)
- 抛出:
-
MathIllegalArgumentException
- 如果数据数组的长度不是2的幂
-
fht
FHT(快速哈达玛变换)仅使用减法和加法。需要N * log2(N) = n * 2^n
次加法。- x 是要转换的输入向量,
- y 是输出向量(x 的快速哈达玛变换),
- a 和 b 是辅助行。
N=8 的手动计算简表 x a b y x0 a0 = x0 + x1 b0 = a0 + a1 y0 = b0+ b1 x1 a1 = x2 + x3 b0 = a2 + a3 y0 = b2 + b3 x2 a2 = x4 + x5 b0 = a4 + a5 y0 = b4 + b5 x3 a3 = x6 + x7 b0 = a6 + a7 y0 = b6 + b7 x4 a0 = x0 - x1 b0 = a0 - a1 y0 = b0 - b1 x5 a1 = x2 - x3 b0 = a2 - a3 y0 = b2 - b3 x6 a2 = x4 - x5 b0 = a4 - a5 y0 = b4 - b5 x7 a3 = x6 - x7 b0 = a6 - a7 y0 = b6 - b7 工作原理
- 构建一个具有
N
行和n + 1
列的矩阵,hadm[n+1][N]
。
(如果我使用 [x][y],它总是表示具有 n 行和 m 列的矩阵的 [行偏移][列偏移]。其条目从 M[0][0] 到 M[n][N]) - 将输入向量
x[N]
放入矩阵hadm
的第一列。 - 子矩阵
D_top
的条目计算如下D_top
从条目[0][1]
到[N / 2 - 1][n + 1]
,D_top
的列是前一列的成对互斥和。
- 子矩阵
D_bottom
的条目计算如下D_bottom
从条目[N / 2][1]
到[N][n + 1]
,D_bottom
的列是前一列的成对差异。
- 对
D_top
和D_bottom
的计算最好通过上述示例(对于N = 8
)理解。 - 输出向量
y
现在在hadm
的最后一列中。 - 算法来自 chipcenter。
可视化 0 1 2 3 … n + 1 0 x0 ↑
← Dtop →
↓1 x1 2 x2 … … N / 2 - 1 xN/2-1 N / 2 xN/2 ↑
← Dbottom →
↓N / 2 + 1 xN/2+1 N / 2 + 2 xN/2+2 … … N xN - 参数:
-
x
- 要转换的实数数据数组 - 返回:
-
实数转换后的数组,
y
- 抛出:
-
MathIllegalArgumentException
- 如果数据数组的长度不是2的幂
-
fht
返回指定整数数据集的正向变换。FHT(快速哈达玛变换)仅使用减法和加法。- 参数:
-
x
- 要转换的整数数据数组 - 返回:
-
整数转换后的数组,
y
- 抛出:
-
MathIllegalArgumentException
- 如果数据数组的长度不是2的幂
-