在 Scilab 中使用 flts 函数

Using the flts function in Scilab

我正在 Scilab 中进行信号处理。选择低通巴特沃斯滤波器应用于实验数据。首先,我创建了一个测试信号,butterworth 过滤器工作正常。但是,当我尝试对实验数据执行相同的步骤时,出现了错误。

函数 flts 显示一条消息 "flts: Arguments #1 and #2: Incompatible sizes."。我该如何调试?

系统功能我已经试过了,没有用。 z 变量接收实验数据。有一些葡萄牙语评论(抱歉)。

这是 Scilab 代码:

//artificial signal for the butterworth filter
//
//clear all 
    clear
//
//Data
//
//acceleration data (z)
    z=[];
//
//
//Sampling frequency (Hz);
    wap=428;
//
//Signal frequency (Hz)
    //fs=6; 
//
//Noise frequency (Hz)
    fn=10;
//
//Cut off frequecy (fcut)
    fcut=fn/wap;
//
//Butteworth filter order (k)
    k=2;
//
//Time unit=2^n (unidTempo)
    n=9;
    unidTempo=2^n; 
//
//Time length (tempoMaximo)
    tempoMaximo=(1/wap)*unidTempo; 
//time
    tt=0:(1/wap):((unidTempo-1)*(1/wap)); 
    t=tt';
//
//
//Extract data length from z equals to 2^n

    sn=z(1:unidTempo,1);
//
//
//
//
///////////////////////////////////// FAST FOURIER TRANSFORM - FFT ////////////////////////////////////////////////////////////////////////////////////////////
//Total time and lenght of the sample
    ttotal=t($);
    N=length(sn);
//
    //Tempo para cada amostra (tamostra)
    tamostra=ttotal/N;
//
    //Taxa de aquisição (T)
    T=1/tamostra;
//
//Determinar 2^n, onde n deve ser menor ou igual a Nrdt1
    //n= ;
    _2n=N;
//
//FFT
    FFT=fft(sn);
//
//Para determinar a frequência é necessário realizar N-1. Neste caso, cria-se um vetor de uma linha e depois transforma-o em colunna. Deve-se incluir a
//variável (Nfft=1:1:___), onde o último espaço deve ser igual ao número de registros de aceleração.Assim:
    Nfft=1:1:N;
//
//A transformação da linha em coluna é:
    Nfft_t=Nfft';
//
//O N-1 sempre apresenta o primeiro valor da célula igual a zero e é realizado com:
    N_1=Nfft_t-1;
//
//Dados de frequência - o primeiro valor é sempre zero:
    fft_freq=(T/N)*(N_1);
//
//Dados de magnitude
    fft_mag=(T/N)*abs(FFT);
//
//Gráfico de frequência resultante - selecionar apenas metade do gráfico
    plot(fft_freq,fft_mag);xlabel('Frequência (Hz)');ylabel('Magnitude (dB)');title('Frequência x Magnitude');
//
//
//
//
//
//
///////////////////////////////////////////////////////////////////////////Filtro Butterworth from iir function//
    hz=iir(k,'lp','butt',[fcut 0],[])
//Change from transfer function to linear system
    sl= tf2ss(hz)
//
//Filter the signal
    fs=flts(sn,sl); 

flts 的输入参数在您的情况下必须为 1xn(sl 有一个输入),因此将最后一行更改为

fs=flts(sn',sl); 

或者确保输入向量始终是行向量。