Mercurial > hg > jslab
view src/samer/units/SpectralFIR.java @ 8:5e3cbbf173aa tip
Reorganise some more
author | samer |
---|---|
date | Fri, 05 Apr 2019 22:41:58 +0100 |
parents | bf79fb79ee13 |
children |
line wrap: on
line source
/* * Copyright (c) 2000, Samer Abdallah, King's College London. * All rights reserved. * * This software is provided AS iS and WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. */ package samer.units; import samer.core.*; import samer.maths.*; import samer.tools.*; public class SpectralFIR implements Task { FFT fft; Vec spectrum; VVector A; int n, m; public SpectralFIR(int n, VVector input) { this.n = n; fft=new FFT(n); fft.setWindow(new Constant(1)); fft.invert(); spectrum = input; A=new VVector("coeffs",n); } public VVector coefficients() { return A; } public void dispose() { A.dispose(); } public void run() { Vec.Iterator it=spectrum.iterator(); double [] _A=A.array(); Mathx.zero(fft.real); Mathx.zero(fft.imag); fft.real[fft.bitrev[0]]=it.next(); // zero frequency for (int i=1; it.more(); i++) { fft.real[fft.bitrev[i]] = fft.real[fft.bitrev[n-i]] = it.next(); // pos and neg freqs } fft.calculate(); // copy FFT results to filter coefficients // with some reordering System.arraycopy( fft.real, n/2, _A, 0, n/2); System.arraycopy( fft.real, 0, _A, n/2, n/2); A.changed(); } // private static double pos(double t) { if (t<0) return 0; else return t; } public void starting() {} public void stopping() {} }