2012-02-08 10 views
0

私は、信号の実数/虚数サンプル値でいっぱいのバッファを持ち、正弦波を掛けて周波数領域の信号をシフトしたいと考えています。IPPを使用した中間バッファを使用しない周波数シフト

私は4つのオプションで自分自身を参照してください

:手動(IPPよりもおそらく遅い)

  • 別々での正弦波を発生させる結果を計算

    • 一部のIPP機能(私もものを見つけることができませんでした)
    • バッファ(おそらく多くのメモリを必要とする)
    • は別のバッファで正弦波の部分を生成する(トーン・バッファを再計算する必要があります)

    私はここで最善のアプローチが何か、そして/または、私はちょうど、複雑な信号を周波数シフトするためのレディメイド機能がないのかどうか疑問に思っています。

  • 答えて

    0

    スピードを上げようとしている場合は、周波数領域で行います。

    FFT -> circular shift by N bins -> IFFT 
    

    私はffw ++ラッパーが非常に便利であることを発見しました。あなたが本当に時間領域でそれを行う上で設定されている場合

    、あなたはこのようないくつかの方法でインテルのVML関数を使用することができます

    // Create a single period of frequency offset wave 
    vector<complex<float> > cxWave(period); 
    for(int i = 0; i < period; ++i) 
        cxWave = i * 2 * M_PI/period; 
    vcExp(period, &cxWave.at(0), &cxWave.at(0)); 
    
    // Multiply entire signal by the complex sinusoid 
    for(int frame=0; frame < numFrames; ++frame) 
    { 
        vcMul(period, &input.at(frame*period), &cxWave.at(0), &cxWave.at(0)); 
    } 
    

    はもちろんの空白を埋めるために必要があるだろう。

    +0

    いいえ、それはひどく遅く、基本周波数の倍数しか処理しません。 –

    +0

    相対速度はおそらくアプリケーションによって異なります。私はFFTを使用して周波数シフトがはるかに高速であることを発見しました。おそらくあなたの実装は遅いでしょうか? OPの信号が複雑であるという事実に基づいて、目標は単純な低レートのボーカルピッチシフトではないように思われる。ビンの分解能は、基本周波数だけでなく、FFTサイズにも(さらに重要なことに)依存します。ここでは、よく書かれた概念の概要[概要](http://www.dspdimension.com/admin/pitch-shifting-using-the-ft/)があります。 – Ethereal

    関連する問題