具有不规则采样率的傅立叶变换
fourier transform with an irregular sampling rate
我有一些数据以每秒 100 个样本的采样率测量,例如
a = [1, 4, 5, 6, 7, 8, 9, 6, 3, 2, 7, 1, 6]
此数据表示汽车长时间行驶时的振动(位移),假设我只想查看以特定速度行驶时的振动,所以在我对此进行采样之后(可能通过设置无用的值到 0) 我得到类似
的东西
b = [1, 4, 5, 0, 0, 0, 0, 6, 3, 0, 0, 1, 6]
现在如果我想看这个数据的傅里叶变换数据,我用什么作为域和采样率?
我用
b = [1, 4, 5, 0, 0, 0, 0, 6, 3, 0, 0, 1, 6]
像以前一样使用 1/100 的采样率?
或者我是否删除其他值
c = [1, 4, 5, 6, 3, 1, 6]
和不同的采样率?
这几个信息不太容易判断,但我会尝试根据我的经验来猜测:
你不能像那样丢弃你不感兴趣的值。您正在尝试在频域中转换时间信号,并且通过这种方式,我认为您正在改变测试的物理学。您要做的是删除与特定速度相对应的信号频率内容。
我会尝试使用低通滤波器,而不是删除或设置为 0 您不想要的值。这样,您可以保持相同的采样率,而您正在人为地修改测试数据。
振动频率应该与行驶速度有某种关系(猜测频率越高速度越高)。
希望对您有所帮助
再见
我想你混淆了什么是采样率。采样率是由你的传感器产生的。如果没有恒定的采样率,您将无法计算出正确的频率。歌曲和麦克风的标准采样频率为 44kHz。它没有改变。它的标准。
计算频谱的标准方法是将信号切割成时间块并对这些时间块进行频谱分析。与使用吉他调音器完全相同的方式。
所以,你有采样频率 fs = 100hz
。假设您的块将是 0.5s
-> 这意味着您的块将具有 fs*0.5s = 50
值。您将对这些块而不是整个块进行频谱分析 time_signal
因此,以这种态度,您可以过滤您感兴趣的块 -> 高于特定车速。
代码示例:
all_data = [1,2,8,1,2,6,4,7,8,1,3.........]
chunks = [[1,2,8...],[4,5,7,8,],...]
>>>len(chunks[0])
50
interesting_chunks = chunks that were measured when car reached 40mph
for interesting_chunk in interesting_chunks:
FFT = np.fft(interesting_chunk)
简单来说:
你不能削减纯信号中的值,但如果你将信号分组,你可以削减这些块,只取你感兴趣的那些
你当然可以只有一个块——恰好涵盖汽车达到你的速度的那段时间。但请记住,您不能将不同的信号连接在一起。块需要是连续的,而不是从这里那里粘在一起
注意块越大,FFT越准确,但时间越大window。
块越小,FFT 精度越低,但您的时间很少 window - 适合实时应用程序
我有一些数据以每秒 100 个样本的采样率测量,例如
a = [1, 4, 5, 6, 7, 8, 9, 6, 3, 2, 7, 1, 6]
此数据表示汽车长时间行驶时的振动(位移),假设我只想查看以特定速度行驶时的振动,所以在我对此进行采样之后(可能通过设置无用的值到 0) 我得到类似
的东西b = [1, 4, 5, 0, 0, 0, 0, 6, 3, 0, 0, 1, 6]
现在如果我想看这个数据的傅里叶变换数据,我用什么作为域和采样率?
我用
b = [1, 4, 5, 0, 0, 0, 0, 6, 3, 0, 0, 1, 6]
像以前一样使用 1/100 的采样率?
或者我是否删除其他值
c = [1, 4, 5, 6, 3, 1, 6]
和不同的采样率?
这几个信息不太容易判断,但我会尝试根据我的经验来猜测: 你不能像那样丢弃你不感兴趣的值。您正在尝试在频域中转换时间信号,并且通过这种方式,我认为您正在改变测试的物理学。您要做的是删除与特定速度相对应的信号频率内容。 我会尝试使用低通滤波器,而不是删除或设置为 0 您不想要的值。这样,您可以保持相同的采样率,而您正在人为地修改测试数据。 振动频率应该与行驶速度有某种关系(猜测频率越高速度越高)。
希望对您有所帮助
再见
我想你混淆了什么是采样率。采样率是由你的传感器产生的。如果没有恒定的采样率,您将无法计算出正确的频率。歌曲和麦克风的标准采样频率为 44kHz。它没有改变。它的标准。
计算频谱的标准方法是将信号切割成时间块并对这些时间块进行频谱分析。与使用吉他调音器完全相同的方式。
所以,你有采样频率 fs = 100hz
。假设您的块将是 0.5s
-> 这意味着您的块将具有 fs*0.5s = 50
值。您将对这些块而不是整个块进行频谱分析 time_signal
因此,以这种态度,您可以过滤您感兴趣的块 -> 高于特定车速。
代码示例:
all_data = [1,2,8,1,2,6,4,7,8,1,3.........]
chunks = [[1,2,8...],[4,5,7,8,],...]
>>>len(chunks[0])
50
interesting_chunks = chunks that were measured when car reached 40mph
for interesting_chunk in interesting_chunks:
FFT = np.fft(interesting_chunk)
简单来说:
你不能削减纯信号中的值,但如果你将信号分组,你可以削减这些块,只取你感兴趣的那些
你当然可以只有一个块——恰好涵盖汽车达到你的速度的那段时间。但请记住,您不能将不同的信号连接在一起。块需要是连续的,而不是从这里那里粘在一起
注意块越大,FFT越准确,但时间越大window。 块越小,FFT 精度越低,但您的时间很少 window - 适合实时应用程序