周波数応答解析におけ​る、セグメントに関す​るエラーについて

10 ビュー (過去 30 日間)
Takahiro OHASHI
Takahiro OHASHI 2019 年 11 月 23 日
コメント済み: Takahiro OHASHI 2019 年 12 月 4 日
■実現したいこと
今回解決したいことはエラーですが、自身が実現したいことを最初に記しておきます。
私がしたいことは、Matlab Simulinkでのシミュレーションにおいて、0.10~200 [Hz]の周波数応答(入出力から得た伝達関数の推定)を見るということです。
■現状問題となっているエラー
現状出ているエラーは「セグメントの長さを入力信号の長さより大きく設定することはできません。」というものです。
周波数応答を得るために"tfestimate"という関数を用いているのですが、必要なパラメータの一つである「サンプリング点数」を大きくすると今回のエラーが発生しました。
■使用している関数やパラメータなどについて
先ほど説明したように、現状は"tfestimate"という関数を用いて周波数応答を得ようとしています。実際には次のように表される関数です。
[Txy,f] = tfestimate(x,y,wind,overlap,nfs,Fs)
これはFFTを用いて周波数応答を得ています。カッコ内のパラメータやその他のパラメータはそれぞれ、以下のように定めています。
・x:(Matlab Simulinkにおける)入力
・y:(Matlab Simulinkにおける)出力
・nfs = 131072:サンプリング点数。2^nで表す必要があります。
・N = 8:窓長の長さをサンプリング点数の何分の1にするかを決めます。
・wind = hann(nfs/N):何の窓関数をしようするか。現状はハニング窓を使用しています。カッコ内は窓長の長さを示しています。
・overlap = nfs/(2*N):オーバーラップ値。現状は窓長の半分の長さにしています。
・Fs = 1000 [Hz]:サンプリング周波数。今回であればシミュレーションのものと一致させます。
・今回使用している入力と出力のデータ数 = 30000
これにより、得られる最大の周波数と最小の周波数は次のようになります。
ただし、
https://www.onosokki.co.jp/HP-WK/c_support/faq/fft_common/CF_9.htm
を参考にしました。
・最大の周波数 = Fs/2.56 = 1000/2.56 = 約390 [Hz]
・最小の周波数 = (最大の周波数*2.56*N)/nfs = 1000*8/131072 = 約0.061 [Hz]
これは当初指定していた周波数の範囲を含みます。
■自身のエラーの解釈
セグメントは窓長を意味するため、窓長に着目すると、現状の窓長は nfs/N = 131072/8 = 16384となります。
また、今回の入力データの数は30000です。
以上のことからサンプリング点を131072にしても、セグメントは入力データよりも小さい値となっているはずなのですが、エラーが出てしまいます。
※サンプリング点が65536の時点ではエラーが出ていませんでした。
以上、分かる方がいれば、教えていただければ幸いです。
  2 件のコメント
Naoya
Naoya 2019 年 12 月 2 日
頂きました入力条件で実行してみましたが、特に報告頂いたエラーは再現されず、実行できました。
>> x = rand(1,30000);
>> y = rand(1,30000);
>> txy = tfestimate(x,y, hann(16384), 8192, 131072, 1000);
エラーメッセージはご指摘の通り、 x,y の信号の長さよりも セグメントの長さ (窓関数の長さ) の方が大きい時に発生します。
whos コマンドなどを使って、 x,y の信号の長さが 窓関数で指定する窓の長さよりも大きくなっているか今一度確認できますでしょうか?
Takahiro OHASHI
Takahiro OHASHI 2019 年 12 月 4 日
返信が遅くなり申し訳ありません。
わざわざ試していただきありがとうございます。
結論から言えば、MATLABを再起動すると出来るようになりました。
おそらく一過性のエラーだったのだと思います。
(whosコマンドにより信号長さを確認すると、無事30000となっていました。)
ありがとうございました。

サインインしてコメントする。

回答 (0 件)

カテゴリ

Help Center および File Exchange信号属性とインデックス付け についてさらに検索

製品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!