我正在使用 adxl335 加速度计记录振动数据。在保存来自该传感器的读数之前,我有大约 50 毫秒的延迟,所以很可能每秒我有大约 20 个读数。我通过检查两个连续读数之间的差异来验证,因为我正在记录阅读时间,但是由于我的电脑不是实时的,我猜 matlab 是变化的,但我发现两个连续读数之间的平均时间是 0.0517,所以我的采样应该约为 19 赫兹?这是应该选择的值吗?
如何为 Matlab fft 选择采样频率
信息处理
matlab
fft
频率
2022-02-02 19:37:29
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 帧将有几个样本长,您可以考虑:
- 记录您读取帧的第一个样本的时间
- 读入一定数量的样本
- 再次查询时间
- 以秒为单位计算时间差
- 然后,将记录的样本数除以时间差以找到平均采样率
其它你可能感兴趣的问题