関数の合成方法に関する質問
Show older comments
地震波のノイズを取るためにバンドパスフィルターを作成しようとしています。
しかし,最後のコードで,エラーが発生し,
”インデックスの配列要素数(10000)を超えています”とメッセージが表示され,回りません。
解決コードと回らない理由をご教授して頂けたら幸いです。
何卒よろしくお願いいたします。
N=20000 %データ数
T=0.005 %サンプリング周期
fs = 1/T; %サンプリング周波数
f = fs*(1:(N/2))/N; % 周波数
% 周期効果関数窓
winX = sqrt(1 ./ f);
winX(1,1)=0;
% ハイカット関数窓
Y = f ./ 10;
winY = 1./sqrt(ones(1,num/2) + 0.694*Y.^2 + 0.241*Y.^4 + 0.0557*Y.^6 + 0.009664*Y.^8 + 0.00134*Y.^10 + 0.000155*Y.^12);
% ローカット関数窓
winZ = sqrt(ones(1,num/2) - exp(-(f./0.5).^3));
% 関数窓合成
win1 = winX .* winY .* winZ; % 前半分用
win2 = fliplr(winX) .* fliplr(winY) .* fliplr(winZ); % 後半用
%ナイキスト周波数考慮
nn = N/2;
%バンドパスフィルターの作成
win = [win1(1:nn),win2(nn+1:num)];
% ↑の関数でエラーが出ます。
2 Comments
Keiji Kitajima
on 2 Nov 2020
Naoya
on 5 Nov 2020
win2 は 1x10000 のベクトル になっていると思いますが、
10001 要素め以降にアクセスしようとしているためエラーが発生しています。
例えば、
win = [win1(1:nn),win2(nn+1:num)];
の部分を
win = [win1(1:nn),win2(1;nn)];
として所望の結果が得られますでしょうか?
Answers (0)
Categories
Find more on Acoustics, Noise and Vibration in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!