【问题标题】:FFT when data set has varying vector lengths数据集具有不同向量长度时的 FFT
【发布时间】:2011-10-05 01:50:12
【问题描述】:

我有来自我正在运行的模型的数据。然而,数据是在每个时间步收集的,并且有不同数量的时间步。结果表明,虽然有不同的时间步长,但它通过时间步长的变化得到补偿,因此所有运行都在同一时间运行。

但是我认为,当我有一个长度为 200 的向量和一个长度为 900 的向量时,采用 FFT 会给我带来本质上不同的频率。我觉得我应该对所有样本的同一时间轴进行 FFT。

我现在拥有数据的方式就像行向量一样,每个条目都没有与时间空间相关联。

有没有办法获取每个向量的 fft 相对于它们在时间轴上的位置而不是它们在向量数组中的位置?

我的目标是编写一个 for 循环并获取许多数据集的 fft,然后绘制它们以比较频率特征变化。

【问题讨论】:

    标签: matlab time fft


    【解决方案1】:

    如果您在 1 秒 (200 Hz) 内收集 200 个样本,您可以将输入数据从 1 Hz (1/(1 秒)) 解析到 100 Hz。如果您采样 1 秒收集 900 个样本,您可以解析从 1 Hz 到 450 Hz 的输入。因此,您的两个样本具有相同的间距(频率轴上的采样为 1 Hz),但它们的最大频率不同!

    如果您的问题只是关于绘图,您可以丢弃并非所有绘图中都可用的高频:

    totaltime=1; %# common total time of all datasets, in seconds
    minsamplenumber=200;
    figure;
    hold all;
    cutofffreq=((minsamplenumber/2+1)/totaltime);
    freqscale=0:(1/totaltime):cutofffreq;
    datasetcount=42;
    ffts=NaN(minsamplenumber,datasetcount);
    for i=1:datasetcount
       data{i}=... %# collect your data; to make life easier always collect an even number..
       ffts(:,i)=fft(data{i},minsamplenumber);
       plot(freqscale,ffts{i}(1:end/2+1));
    end
    

    ...或与现实一起生活,并绘制您拥有的所有数据:

    totaltime=1; %# common total time of all datasets, in seconds
    figure;
    hold all;
    for i=1:42
       data{i}=... %# collect your data; to make life easier always collect an even number..
       ffts{i}=fft(data{i});
       maxfreq(i)=((numel(ffts{i})/2+1)/totaltime);
       freqscale{i}=0:(1/totaltime):maxfreq(i);
       plot(freqscale{i},ffts{i}(1:end/2+1));
    end
    

    【讨论】:

      【解决方案2】:

      您可以将数据重新采样(通过过滤插值)到恒定长度向量中,其中每帧中的采样率是相同的恒定速率。您可能还必须重叠 FFT 帧以获得恒定的帧或窗口偏移。

      【讨论】:

        猜你喜欢
        • 2018-12-22
        • 2017-02-19
        • 2017-10-31
        • 2018-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多