Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用联合变换法反演原始信号_Java_Signal Processing_Fft - Fatal编程技术网

Java 用联合变换法反演原始信号

Java 用联合变换法反演原始信号,java,signal-processing,fft,Java,Signal Processing,Fft,我正在使用JTransforms realForwardFull和realReverse来测试它们是如何工作的。 我的理解是,在您将音频信号传递给realForwardFull,然后应用RealReverse之后,您应该返回相同的信号。 这就是我正在做的 double[] a1 = getAudioSignal(); DoubleDDT_1D fft = new DoubleFFT_1D(a1.length); double[] fftData = new double[a1.length *

我正在使用JTransforms realForwardFull和realReverse来测试它们是如何工作的。 我的理解是,在您将音频信号传递给realForwardFull,然后应用RealReverse之后,您应该返回相同的信号。 这就是我正在做的

double[] a1 = getAudioSignal();

DoubleDDT_1D fft = new DoubleFFT_1D(a1.length);
double[] fftData = new double[a1.length * 2];
for(int i=0; i<fftData.length; i++) {
        fftData[i] = a1[i]; // real part
        fftData[fftData.length+i] = 0; // imaginary parts
}
fft.realForwardFull(fftData);

//Do an inverse to get back the signal
fft.realInverse(fftData, false);
double[]a1=getAudioSignal();
DoubleDDT_1D fft=新的DoubleFFT_1D(a1.长度);
double[]fftData=新的双精度[a1.长度*2];
对于(int i=0;i根据的javadoc,您需要调用
complexInverse
来恢复原始信号。由于您需要原始点,您应该启用缩放,该缩放将值除以
N

fft.realForwardFull(fftData);

//Do an inverse to get back the signal
fft.complexInverse(fftData, true);
此外,您的检查逻辑被破坏。由于舍入错误,您无法像那样检查双重相等。您应该使用epsilon错误容差进行如下检查:

for(int k=0; k<a1.length; k++) {
   if(Math.abs(a1[k] - fftData[2*k]) < 1e-6) {
      printSame();
   } else {
      printDiff();
}

for(int k=0;kYou的代码中似乎有一些错误,这将阻止它编译。您是指
DoubleFFT\u 1D fft
而不是
DoubleDDT\u 1D fft
?循环也应该使用
a1.length
for(int k=0; k<a1.length; k++) {
   if(Math.abs(a1[k] - fftData[2*k]) < 1e-6) {
      printSame();
   } else {
      printDiff();
}