我正在使用此功能在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波特?
答案 0 :(得分:1)
对于您的用例,Goertzel的算法需要的样本少得多,并且比FFT更高效。它可用于区分两个或多个已知频率。这是关于它的PDF(包括代码示例)......
http://www.cs.washington.edu/education/courses/cse466/12au/calendar/Goertzel-EETimes.pdf