注:该stft是类似于librosa中的同名函数,与tensorflow中的有区别,当然我也用tf实现了,问题是tflite都不支持这种操作,如果用tf底层(tf造轮子)编写,其速度肯定小于Java或者CPP。
接上一篇:java数组写的fft
我特么又想放弃了java,从入门到放弃,搞个复数数据结构都费劲,比C难多了,繁琐。
老子给你看看C版的复数是咋定义的数据结构,简直不要太简单。
typedef struct{
float imag;
float real;
}Complex;
Complex a[] = { {1,2},{3,4} };
JAVA版FFT没有问题,而且也得到了幅度谱和相位谱,纯手造。我要积分!!!
import numpy as np
x=np.arange(1,17)
>>> x
array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16])
这几个数的幅度谱和相位谱python和Java结果一样。
Java代码在此:
请问您付出积分了吗??
package com.comlex.rfft;
import java.lang.Math;
public class ComplexRfft {
private static int log2(int x) {
return (int) (Math.log(x) / Math.log(2));
}
private static float get_angle(complex c){
return (float) Math.atan2(c.imag,c.real);
}
private static float get_angle(float imag,float real){
return (float) Math.atan2(imag,real);
}
private static magangle complexfft(float[] rin, int n_fft) {
int ii, m, is, i, j, nv, jj, k = log2(n_fft);
float p, q, s, vr, vi,...;
float[] pi = new float[n_fft];
float[] fr = new float[n_fft];
float[] fi = new float[n_fft];
float[] rout = new float[n_fft];
for (i = 0; i < n_fft; i++) {
pi[i] = 0;
fr[i] =