Android中的AFSK解调

时间:2013-04-12 17:00:24

标签: android signal-processing

我正在使用此功能在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波特?

1 个答案:

答案 0 :(得分:1)

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

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