我使用以下公式来计算一组点的 Hann 值:
为了在 java 中实现这一点,我使用以下代码:
private static void applyHannWindow(final double[] points) {
for (int i = 0; i < points.length; i++) {
points[i] = 0.5 * (1.0 - Math.cos(2.0 * Math.PI * points[i] / points.length));
}
}
取反,求解,我可以重新使用。因此,我提出的等式是:
为了在 Java 中实现这一点,我使用了以下代码:
private static void reverseHannWindow(final double[] points) {
for (int i = 0; i < points.length; i++) {
points[i] = points.length * (Math.acos(-2.0 * points[i] + 1.0) / (2.0 * Math.PI));
}
}
我编写了一个简单的测试,以确保在应用 Hann 窗口并将其反转后,我得到相同的结果。不过,我好像没有。
给定原始数组:
final double[] data = new double[5];
data[0] = 200;
data[1] = 210;
data[2] = 215;
data[3] = 207;
data[4] = 203;
我得到以下输出:
### applying Hann window
0.0
0.0
0.0
0.9045084971874686
0.9045084971874787
### Reversing Hann window
0.0
0.0
0.0
1.9999999999999862
2.0000000000000138
不确定我在将逆应用到 Hann 窗口时做错了什么?