私は、周波数シフトのために見つけることができるいくつかの異なるテクニックを試してきました (具体的には、高周波数信号を低周波数にシフトしたい)。現時点では、私はこのテクニックを使用しようとしています -
元の信号 x(t) を次のように乗算します: cos(2 PI dF t), sin(2 PI dF t) R(t) = x(t) cos(2 PI dF t) I(t) = x(t) sin(2 PI dF t) ここで、dF はシフトするデルタ周波数です。これで、R(t) と I(t) の 2 つの時系列信号が得られました。R(t) を実部、I(t) を虚部として複素フーリエ変換を行います。結果は、周波数シフトされたスペクトルになります。
これを次のコードに解釈しました-
for(j=0;j<(BUFFERSIZE/2);j++)
{
Partfunc = (((double)j)/2048);
PreFFTShift[j+x] = PingData[j]*(cos(2*M_PI*Shift*(Partfunc)));
PreFFTShift[j+1+x] = PingData[j]*(sin(2*M_PI*Shift*(Partfunc)));
x++;
}
//INITIALIZE FFT
status = arm_cfft_radix4_init_f32(&S, fftSize, ifftFlag, doBitReverse);
//FFT on FFTData
arm_cfft_radix4_f32(&S, PreFFTShift);
これにより、インターリーブされた real データと imag データと FFT を含む配列が構築されます。次にFFTを逆にしますが、得られる出力はかなり文字化けしています。結果は、私が考えているものと比較して巨大に見えます。周波数がシフトされた信号の痕跡がいくつかありますが、結果はほとんどかなりノイズが多いように見えるため、判断するのは困難です.
また、元の信号の標準 FFT の配列値を単純に回転させて周波数シフトを取得しようとしましたが、役に立ちませんでした。これを行うためのより良い方法はありますか?