Intel IPPライブラリのインストールとテストvs 2015-win 10-ipp 2020

2508 ワード

参考ブログ:1.https://blog.csdn.net/csdn409517589/article/details/87881749 2.https://blog.csdn.net/DJason43/article/details/80171079?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

1.Intel IPPライブラリのインストール


公式サイトで必要なIPPバージョンを登録してダウンロードするか、ネット上でIPPSを探してダウンロードし、説明通りにインストールします.

2.テスト


2.1.プロジェクト設定——IPPライブラリを自動的に開く

   — —Intel Performance Library—Use Intel @Ipp—>Default Linking Method;

2.2.ヘッダファイルを参照--#include"ipp.h"


これにより、IPP関数を正常に使用できます.

2.3.プロジェクト設定-手動関連ライブラリ関数


チュートリアルポイント参照

4.スペクトルの計算


4.1.関数機能の説明


信号のスペクトルを計算し,主にIPP関数ライブラリにおける高速フーリエ変換(FFT)相関関数といくつかの一般的な乗算,加算などの基本演算を用いた.FFTを計算して、主にippsFFTInitAlloc_を使いますC()とippsFFTFwd_CToC()の2つの関数で、ippsFFTInitAlloc_C()関数は変数空間を初期化し、関連キャッシュを開くために使用され、ippsFFTFwd_CToC()関数はFFTの計算を実現するために用いられる.関連関数の紹介と入出力インタフェースの定義は公式ドキュメントippsmanで行うことができる.pdfで見つかりました.

4.2.スペクトル計算関数

int   CalculateSpectrumByReal(int* rData, int samplePoint, float* specturmData, int &outSpecturmDataLength, 
    int winOpt, int fftOrder)/* */
{
    IppStatus status;
    int segement,fftPoint;
    IppsFFTSpec_R_32f* spec;
    
    fftPoint = (int)pow(2.0,fftOrder);        //FFT  
    outSpecturmDataLength = fftPoint/2;       // 
    if (fftOrder < 10)
    {
        return -2; //FFT ,FFT 10 
    }
    else if (samplePoint < fftPoint)
    {
        return -1; // 
    }
 
    Ipp32f *fData = ippsMalloc_32f(samplePoint);// 
    Ipp32f *x = ippsMalloc_32f(fftPoint);      
    Ipp32f *X = ippsMalloc_32f(fftPoint+2);    
    Ipp32f *mag = ippsMalloc_32f(outSpecturmDataLength);    // abs() 
    memset(fData,0,sizeof(Ipp32f)*samplePoint);
    memset(x,0,sizeof(Ipp32f)*fftPoint);
    memset(X,0,sizeof(Ipp32f)*(fftPoint+2));
    memset(mag,0,sizeof(Ipp32f)*outSpecturmDataLength);
 
    memset(specturmData,0,sizeof(Ipp32f)*outSpecturmDataLength);
    
    ippsConvert_32s32f(rData,fData,samplePoint);
    status = ippsFFTInitAlloc_R_32f(&spec,fftOrder,IPP_FFT_DIV_INV_BY_N,ippAlgHintNone);
 
    segement = (int)(samplePoint/fftPoint);  // FFT 
    for (int i=0;i