我对 DSP 技术不是很熟悉,我目前正在从事我的研究项目,使用 C/Linux 开发 DSP 处理器的固件。它涉及使用二进制 FSK 和跳频 Tx 和 Rx 算法对数据集进行调制和解调。我能够调制信号并使用 MATLAB 验证了输出。但是我有点卡在解调上。
我用于解调的技术是比较在每个跳频序列接收到的信号的 FFT 幅度,并在此基础上确定接收到的位是 1 还是 0。我有一个预定义的函数,用于计算 FFT的信号。功能如下:
void fft(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;
在函数fft()
N
中定义了 FFT 点的数量。
我面临的问题是如何确定fft()
函数返回的数组中各个元素的频点。在 MATLAB 中,这很容易实现 MATLAB 中的 FFT 函数考虑了采样频率并相应地绘制了功率谱。然而,在fft()
上面定义的函数中没有涉及频率,因此我对如何找到任何特定频率的信号功率,或者如何确定重新调谐阵列的任何元素的频率点感到困惑。