2

我正在使用此功能在 Android 中调制自己的 AFSK 信号

public static double[] MyFSK(char bit) //bit 1 or 0
{
    double[] a = new double[SamplesPerBit]; // SamplesPerBit =  44100 / 1200 (baudrate)
    for (int i = 0; i < a.length ; i++)
    {           
        if(bit == '1')
            a[i] = Math.sin(2 * Math.PI * i * C.FreqHigh / SamplesRate);
        else
            a[i] = Math.sin(2 * Math.PI * i * C.FreqLow / SamplesRate);
    }
    return a;
}

现在我的问题是解调部分,我成功地使用了 FFT 算法找到了频率,但是 FFT 的缺点是它需要很长的数据流(1024-2048 个样本)才能找到频率,这导致波特率非常低。

那么有没有更合适的方法来找到具有较低样本数的频率?让我处理 1200 波特?

4

1 回答 1

1

对于您的用例,Goertzel 的算法需要的样本少得多,并且比 FFT 的性能更高。它可用于区分两个或多个已知频率。这是关于它的PDF(包括代码示例)...

http://www.cs.washington.edu/education/courses/cse466/12au/calendar/Goertzel-EETimes.pdf

于 2013-08-12T08:01:05.030 回答