如何为 Matlab fft 选择采样频率

信息处理 matlab fft 频率
2022-02-02 19:37:29

我正在使用 adxl335 加速度计记录振动数据。在保存来自该传感器的读数之前,我有大约 50 毫秒的延迟,所以很可能每秒我有大约 20 个读数。我通过检查两个连续读数之间的差异来验证,因为我正在记录阅读时间,但是由于我的电脑不是实时的,我猜 matlab 是变化的,但我发现两个连续读数之间的平均时间是 0.0517,所以我的采样应该约为 19 赫兹?这是应该选择的值吗?

2个回答

传感器是模拟的,输入到 Arduino 进行模数转换。Arduino 有一个函数Micros(),它返回自 Arduino 板开始运行当前程序以来的微秒数,我建议使用它来准确节省 Arduino 上模拟读取的时间。计算如下代码所示的差异,并将其与传感器读数一起发送到 Matlab。然后只需平均由t2-t1 计算的时间差值,这几乎是恒定的,您将尽可能准确地使用所使用的采样时间/采样频率,因此您可以使用此信息非常准确地进行 FFT 分析。希望这会有所帮助。

//Define Analogue Ports for Sensor input
const int xpin1 = A2; // x-axis of the accelerometer 1

//Define variable t1 for timing
unsigned long t1 = micros();

void loop()
{
  int x1 = analogRead(xpin1);  //read x from 1

  Serial.print(x1);  //print x1 value on serial monitor
  Serial.print("\t");

  unsigned long t2 = micros();
  Serial.print(t2-t1);
  Serial.print("\t");
  t1 = t2;
}

采样率 = 每秒样本数。由于您的 fft 帧将有几个样本长,您可以考虑:

  1. 记录您读取帧的第一个样本的时间
  2. 读入一定数量的样本
  3. 再次查询时间
  4. 以秒为单位计算时间差
  5. 然后,将记录的样本数除以时间差以找到平均采样率