DSP プロセッサでの BFSK 実装の実装に取り組んでおり、現在 C を使用して LINUX マシンでシミュレートしています。復調機能に取り組んでおり、着信データの FFT を取得する必要があります。シミュレーションの目的で、次のような DFT 用の定義済み関数があります。
void dft(complex_float* in, complex_float* out, int N, int inv)
{
int i, j;
float a, f;
complex_float s, w;
f = inv ? 1.0/N : 1.0;
for (i = 0; i < N; i++) {
s.re = 0;
s.im = 0;
for (j = 0; j < N; j++) {
a = -2*PI*i*j/N;
if (inv) a = -a;
w.re = cos(a);
w.im = sin(a);
s.re += in[j].re * w.re - in[j].im * w.im;
s.im += in[j].im * w.re + in[j].re * w.im;
}
out[i].re = s.re*f;
out[i].im = s.im*f;
}
ここでcomplex_float
は、次のように定義された構造体です。
typedef struct {
float re;
float im;
} complex_float;
このdft()
関数では、パラメーターN
は DFT ポイントの数を示します。
私の疑問は、アルゴリズムには周波数ホッピング シーケンスも含まれているため、信号の復調中に、さまざまな周波数成分で信号の DFT の振幅を確認する必要があるということです。
MATLAB では、FFT 関数にはサンプリング周波数も含まれているため、これは非常に単純であり、任意の周波数ポイントでの電力を次のように見つけることができました。
powerat_at_freq = floor((freq * fftLength) / Sampling_freq)
しかし、C 関数には周波数が含まれていないため、特定の周波数での DFT の大きさを特定するにはどうすればよいでしょうか?