我正在 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);