有了第一次实现,这便打开了魔盒(黑客的盒子),DFT改进如下(为什么?因为他不够快,有人叫快速傅里叶变换,这是什么鬼?我也想实现它!是否可以快一点呢,应该没问题!):
int N = 1920;//为什么是这个数字,因为屏幕只有这么宽,奇葩的理由!
//x[n]以奇数偶数分开
float[] x奇数 = new float[N / 2];
float[] x偶数 = new float[N / 2];
for (int nn = 0; nn < N; nn++)
{
if (0 == nn % 2)
{
x偶数[nn / 2] = (btt[nn] - 128);//偶数项系数
}
else
{
x奇数[(int)(nn / 2)] = (btt[nn] - 128); //奇数项系数
}
}
//偶部所有项求和,奇部所有项求和。 //以下便是出现快速傅里叶变换的端倪
for (int ii = 0; ii < 128; ii++)//针对壹音低频,高频无意义
{
PointF[] wNK = new PointF[N / 2];
wNK = All1920[ii];
double realx偶 = 0;
double imagy偶 = 0;
double realx奇 = 0;
double imagy奇 = 0;
for (int j = 0; j < N / 2; j++)
{
realx偶 = realx偶 + wNK[j].X * x偶数[j];
imagy偶 = imagy偶 + wNK[j].Y * x偶数[j];
realx奇 = realx奇 + wNK[j].X * x奇数[j];
imagy奇 = imagy奇 + wNK[j].Y * x奇数[j];
}
//奇部与wN[]的乘积
double realx = 0;
realx = realx奇 * wN1920[ii].X - imagy奇 * wN1920[ii].Y;//复数相乘x部
double imagy = 0;
imagy = imagy奇 * wN1920[ii].X + wN1920[ii].Y * realx奇;//复数相乘y部
//奇部与偶部合并
realx = realx + realx偶;
imagy = imagy + imagy偶;
double[] resultFFT = new double[N];
resultFFT[ii] = Math.Sqrt(realx * realx + imagy * imagy);
int temp = (int)(resultFFT[ii] / 10);
if (temp < Convert.ToInt16(textBox门限.Text))//设门限
temp = 0;
histfft1920[ii] = (byte)(255 - temp); //resultFFT[ii] / 10);
}
简单的东西被自己搞复杂化了,好像速度并没什么改观。(研究之初便是这样,因为别人说的什么蝶形变换,自己笨,不懂,只能自己琢磨,从熟悉的地方出发!)
(待续,慢慢来。。。。。。。。。。。)每天一点小改变☺