Performs a 2D FHT (Fast Hartley Transform).
(float[] x, boolean inverse, int maxN)
| 232 | |
| 233 | /** Performs a 2D FHT (Fast Hartley Transform). */ |
| 234 | public void rc2DFHT(float[] x, boolean inverse, int maxN) { |
| 235 | if (S==null) initializeTables(maxN); |
| 236 | for (int row=0; row<maxN; row++) |
| 237 | dfht3(x, row*maxN, inverse, maxN); |
| 238 | progress(0.4); |
| 239 | transposeR(x, maxN); |
| 240 | progress(0.5); |
| 241 | for (int row=0; row<maxN; row++) |
| 242 | dfht3(x, row*maxN, inverse, maxN); |
| 243 | progress(0.7); |
| 244 | transposeR(x, maxN); |
| 245 | progress(0.8); |
| 246 | |
| 247 | int mRow, mCol; |
| 248 | float A,B,C,D,E; |
| 249 | for (int row=0; row<=maxN/2; row++) { // Now calculate actual Hartley transform |
| 250 | for (int col=0; col<=maxN/2; col++) { |
| 251 | mRow = (maxN - row) % maxN; |
| 252 | mCol = (maxN - col) % maxN; |
| 253 | A = x[row * maxN + col]; // see Bracewell, 'Fast 2D Hartley Transf.' IEEE Procs. 9/86 |
| 254 | B = x[mRow * maxN + col]; |
| 255 | C = x[row * maxN + mCol]; |
| 256 | D = x[mRow * maxN + mCol]; |
| 257 | E = ((A + D) - (B + C)) / 2; |
| 258 | x[row * maxN + col] = A - E; |
| 259 | x[mRow * maxN + col] = B + E; |
| 260 | x[row * maxN + mCol] = C + E; |
| 261 | x[mRow * maxN + mCol] = D - E; |
| 262 | } |
| 263 | } |
| 264 | progress(0.95); |
| 265 | } |
| 266 | |
| 267 | void progress(double percent) { |
| 268 | if (showProgress) |
no test coverage detected