matlab中长加速度计数据除以短加速度计数据进行fft

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

我用加速计记录了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
现在,我有了采样率为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