我正在尝试将FFT算法应用于过滤数据集。要求我实现的滤波器是二阶高通IIR滤波器。我得到过滤数据的数组,然后我传递给我的FFT函数。每次我这样做,我只是将所有最大峰值都设为1。
我这样用:
leastsq
这就是我的 getFFT()函数的样子
double[] fft = getFFT(iirFiltered);
return fft;
这是我执行分析的方式:
private double[] getFFT(double[] m1){
double sum = 0;
for (int i = 0; i < m1.length; i++) {
sum += m1[i];
}
double mean = sum / m1.length;
for (int i = 0; i < m1.length; i++) {
m1[i] = m1[i] - mean;
}
int neft = 0;
int count = 0;
while (neft <= m1.length) {
neft = (int) Math.pow(2, count);
count++;
}
DSPLib.nFft(neft, m1);
double[][] filtered = DSPLib.getFFT();
double[] returnFiltered = new double[filtered.length];
for(int i=1;i< returnFiltered.length;i++){
//returnFiltered[i]= filtered[i][0]; // old one
returnFiltered[i]= Math.sqrt(filtered[i][0]* filtered[i][0] + filtered[i][1]*filtered[i][1]); //new one
}
return returnFiltered;
}
我的输出给了我一个奇怪的FFT图,无论我在什么频率,maxPeak总是在1
请指导我,因为我不熟悉信号处理。
PS:采样率为4d,心率为240 bpm,我获得224个RR间隔值和256个FFT输出值(此代码仅以某种方式给出所有实数值),最大幅度:19202.405718996466,HF :: 5.35238130772106E7,LF :: 6.235056793402985E7