「みんな教えて! 選手権!!」開催のお知らせ

よろしくお願いします。

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解析で他の方法があれば
教えてください。

A 回答 (1件)

> ”添字に誤りがあります”



と言われているのですから、添字が正しいかどうかを中心に見直すことです。

> 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.h …
によると、 zeros(1,N2) は1×N2の行列です。
https://help.scilab.org/docs/5.5.0/ja_JP/fft.html
によると、 fftが返すのはベクトルです。
「行列+ベクトル」って計算できましたっけ?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

上記エラー部分ですが、
http://www.kumikomi.net/archives/2010/09/ep30rir …
こちらを参考にさせていただいていたのですが。


今回ご指摘頂いた部分を見直してみます。
『行列+ベクトル』⇒修正してみます。

お礼日時:2014/08/04 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報