matlab中长加速度计数据除以短加速度计数据进行fft
我用加速计记录了2个小时(它的采样率是100Hz)。为了分析数据,我想进行fft。我认为整个数据太长了,所以我想把它除以10秒或5秒。可能吗matlab中长加速度计数据除以短加速度计数据进行fft,matlab,fft,accelerometer,Matlab,Fft,Accelerometer,我用加速计记录了2个小时(它的采样率是100Hz)。为了分析数据,我想进行fft。我认为整个数据太长了,所以我想把它除以10秒或5秒。可能吗 no_point = 512; %% for 5seconds data of 10ms data point Fs=100; %% sample rate acc = data; no_frame = length(data)/no_point; frame_data = reshape(acc, no_point, no_frame)'; f
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end
现在,我有了采样率为100Hz的数据(1479168x1;x,y,z中的一个)。我想分析它除以5秒的时间窗口。(512x2889)。然后,对512个样本执行fft(作为一个帧样本,总共2889帧)正确吗?下面是我的代码
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end
你想分析什么还不太清楚。我想你应该读一下
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end
关于STFT有很多信息。例如,参见免费书籍-
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end
Matlab在信号处理工具箱中具有特殊的功能
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end
我用加速计记录了2个小时(它的采样率是100Hz)。为了分析数据,我想进行fft。我认为整个数据太长了,所以我想把它除以10秒或5秒。可能吗
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end
为了回答这一部分,您必须了解FFT的分辨率取决于观察时间,因此在您的例子中,您将完整的读数划分为时间窗口。这种影响会降低分辨率。
此外,如果您执行的窗口中不存在某些频率,您将错过这些频率。此外,由于突然剪切,侧窗将非常高
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end
如果分辨率对您的情况不重要,答案是肯定的,您可以这样做,并在部分上执行FFT,但分辨率最差,并且存在上述所有问题。FFT的时间复杂度为O(n*log(n)),因此我怀疑它是否需要更长的时间,如果它确实需要更长的时间。更改采样率谢谢您的回答,伙计们,我不明白。你能告诉我更多的细节吗?
no_point = 512; %% for 5seconds data of 10ms data point
Fs=100; %% sample rate
acc = data;
no_frame = length(data)/no_point;
frame_data = reshape(acc, no_point, no_frame)';
f = hann(no_point);
hann_window = repmat(f',no_frame,1);
fspace = Fs/2*linspace(0,1,no_point/2+1);
fp = zeros(no_frame, no_point);
for iframe = 1:no_frame
mean_data = mean(frame_data(iframe,:));
std_data = std(frame_data(iframe,:));
fp(iframe,:) = (frame_data(iframe,:)-mean_data)*100/mean_data;
end
fp_hann = hann_window.*fp;
abs_fp = zeros(no_frame, no_point/2+1);
for iframe = 1:no_frame
Y = fft(fp_hann(iframe,:),no_point);
abs_fp(iframe,:) = 2*abs(Y(1:no_point/2+1));
end