我正在 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 的幅度呢?