使用filtfilt()的Matlab错误'数据长度必须大于18个样本。"

时间:2018-04-20 19:38:36

标签: matlab filter neural-network

我制作了一个可以使用小波的神经网络,但是我遇到了以下错误:

  

使用filtfilt时出错> getCoeffsAndInitialConditions(第182行)   数据长度必须大于18个样本。

     

filtfilt出错(第97行)   [b,a,zi,nfact,L] = getCoeffsAndInitialConditions(b,a,Npts);

     

抽取时出错(第136行)       odata = filtfilt(b,a,idata);

     

ENGNeuralNetwork错误(第56行)       decdatae(CH,试验中,:)=挤压(抽取(CD1(CH,审判,:),32));

我对我应该改变的内容感到有点困惑,因为我确定这些都是相关的错误。这是第56行所指的代码:

for ch=1:2
    for trial=1:10
    decdatae(ch,trial,:)=squeeze(decimate(cD1(ch,trial,:),32));

    end 
end

这是第97行的代码:

for runs=1:10 

    % Create a neural net with 100 hidden neurons
    net=newff(P,T,1000,{'tansig','logsig'},'traingdx');
    net.TrainParam.epochs=1000;
    net.TrainParam.goal=0.04;
    net.TrainParam.min_grad=1e-20; %line 97
    net.TrainParam.show=3000;
    net.divideParam.trainRatio=0.6;
    net.divideParam.valRatio=0;
    net.divideParam.testRatio=0.4;

如果有人能让我了解如何对此进行排序,我将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

这是filtfilt帮助文本的开头:

%   The length of the input X must be more than three times the filter
%   order, defined as max(length(B)-1,length(A)-1).

您可以使用open filtfilthelp filtfilt看到它。很奇怪,但是doc filtfilt却看不到。

我不知道为什么对数据长度有此要求。

答案 1 :(得分:0)

请注意,通常应从底部开始读取Matlab错误。所以你想了解的是

  

ENGNeuralNetwork中的错误(第56行)decdatae(ch,trial,:)= squeeze(decimate(cD1(ch,trial,:),32));

当您在第56行呼叫decimate时,您的数据decimating就是32倍!是表示您的实际数据长度除以32:

  

y =抽取(x,r)将输入信号x的采样率降低r, length(y)= ceil(length(x)/ r) < / p>

我们不知道您的数据的原始大小,但是如果cD1(ch,trial,:)的长度太小,可能会出现问题。您应该检查cD1的大小。

然后,according用于抽取文档:

  

当r大于13时,为获得更好的结果,请将r分成较小的因子,并多次抽取。