语音识别中快速傅里叶(FFT)的实现(补充二)

有了第一次实现,这便打开了魔盒(黑客的盒子),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);
                        }

简单的东西被自己搞复杂化了,好像速度并没什么改观。(研究之初便是这样,因为别人说的什么蝶形变换,自己笨,不懂,只能自己琢磨,从熟悉的地方出发!)

(待续,慢慢来。。。。。。。。。。。)每天一点小改变☺

发布了66 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/ganggangwawa/article/details/93488845