- 締切済み
scilabのエラーについて
よろしくお願いします。 scilabにてオーバーラップを掛けてFFT解析をしたく、いくつかのWebを参考にさせて頂きながら 試しているのですが、”添字に誤りがあります”とエラーになってしまいます。 ソースは clear all; stacksize('max') v0=read_csv('C:\Users\*****\Desktop\scilab\data7.csv',",") v1 = evstr(v0);//上記v0データは文字列認識の為数値データに変換 //窓関数 N1=256; win_l = window('hn',N1); win_l_minus = win_l * -1; //FFTを実行 N=size(v1,1);//データ長 N2=N1/4; //N/2で50%オーバーラップ L = floor(N/N2)-1;//全サンプルに対するFFTの必要回数 y = 0;//出力ベクトルyの初期値 past_tail=zeros(1,N2);//ハーフオーバーラップ加算信号の初期値 for k=1:L n =N2*(k-1);//FFTの開始地点を更新 v2=win_l*v1( n+1 : n+N1 );//観測信号に窓を掛ける v3=fft(v2,-1);//FFT y1=fft(v3,1);//IFFT y=(y,past_tail + y1(1:N2)); //今回のIFFTの前半を前回のIFFT後半に加算してから出力ベクトルyに追加 past_tail=y1(N2+1:N1);//今回のIFFT結果の後半を記憶 end fv1dBuV=zeros(N,2); fv1dBuV(1,1) = 0;//DC =0Hzを入力 fv1dBuV(1,2) = 20*log10(abs(y(1)/N)/10.^-6);//dBuVに変換 sr = 4000; //sr:サンプリングレート[sample/sec] dt = 1/sr; // dt: サンプリング間隔[sec] T = N*dt; // T: 測定時間[sec] df =1/T; //Hz df: 1/測定時間->最低周波数、周波数分解能[Hz] for i=2:N fv1dBuV(i,1)=(i-1)*df///10^6;//周波数をMHzで記録 fv1dBuV(i,2)=20*log10(abs((y(i))/(N/2))/10.^-6); //N/2の左半分を使用して算出 end になります。(この後はPlot処理) y=(y,past_tail + y1(1:N2))で上記エラーが指摘されます。 プログラミングは初心者なのでどのように修正したらよいか 教えていただけると助かります。 また、オーバーラップを掛けてのFFT解析で他の方法があれば 教えてください。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
> ”添字に誤りがあります” と言われているのですから、添字が正しいかどうかを中心に見直すことです。 > y=(y,past_tail + y1(1:N2))で上記エラーが指摘されます。 ということなら、ここで使われている変数等に問題がある、ということです。 となると y pass_tail y1(1:N2) が関係していると考えます。 それぞれを見ると pass_tail=zeros(1,N2) y1=fft(v3,1);//IFFT です。 https://help.scilab.org/docs/5.5.0/ja_JP/zeros.html によると、 zeros(1,N2) は1×N2の行列です。 https://help.scilab.org/docs/5.5.0/ja_JP/fft.html によると、 fftが返すのはベクトルです。 「行列+ベクトル」って計算できましたっけ?
お礼
回答ありがとうございます。 上記エラー部分ですが、 http://www.kumikomi.net/archives/2010/09/ep30rir2.php?page=4 こちらを参考にさせていただいていたのですが。 今回ご指摘頂いた部分を見直してみます。 『行列+ベクトル』⇒修正してみます。