欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java 傅里葉變換和濾波

錢艷冰1年前9瀏覽0評論

Java中,傅里葉變換是一種非常重要且基礎的算法,它可以將一個函數在時間域內的表達轉換成在頻率域內的表達。通過對時間域內的信號進行傅里葉變換,我們可以得到對應的頻域內的信號譜,進而方便地對信號進行濾波處理。

/**
 * 計算離散傅里葉變換
 *
 * @param x 實數部分序列
 * @param y 虛數部分序列
 * @param ifft 是否執行反變換
 * @return 變換結果
 */
public static double[] dft(double[] x, double[] y, boolean ifft) {
int n = x.length;
double[] re = new double[n];
double[] im = new double[n];
double pi = ifft ? -Math.PI : Math.PI;
for (int i = 0; i< n; i++) {
for (int j = 0; j< n; j++) {
double angle = pi * 2 * i * j / n;
re[i] += x[j] * Math.cos(angle) + y[j] * Math.sin(angle);
im[i] += -x[j] * Math.sin(angle) + y[j] * Math.cos(angle);
}
if (ifft) {
re[i] /= n;
im[i] /= n;
}
}
return ifft ? re : complexMagnitude(re, im);
}

以上代碼實現了離散傅里葉變換,其中x和y為序列的實部和虛部,ifft表示是否進行反變換。我們可以利用該函數對信號進行變換,得到頻域內的信號譜,然后進行濾波處理。

/**
 * 對時域信號譜進行低通濾波
 *
 * @param signal 信號譜
 * @param threshold 閾值
 * @return 濾波后的信號譜
 */
public static double[] lpFilter(double[] signal, double threshold) {
int n = signal.length;
for (int i = 1; i< n / 2; i++) {
if (i<= threshold) {
signal[i] = 0.0;
signal[n - i] = 0.0;
}
}
return signal;
}

以上代碼實現了低通濾波,其中signal為時域內的信號譜,threshold為閾值。低通濾波可以過濾掉高于一定頻率的信號成分,實現去噪和信號平滑的目的。