フーリエ解析を使用した周波数解析について

5 ビュー (過去 30 日間)
Ryosuke Takahashi
Ryosuke Takahashi 2017 年 7 月 25 日
コメント済み: Ryosuke Takahashi 2017 年 7 月 25 日
フーリエ解析について質問です。
現在、0.5Hz 1Hz 2Hzのsin波に対して周波数解析を行っています。
結果、0.5Hz 1Hzにピークが出現し、2Hzにはピークが出現しません。 コードのどこか不足している部分があると考えましたが、原因がわからなく質問いたしました。
下記にコードを記載したのですが、修正必要な個所はありますでしょうか?
ご教示いただけると幸いです。 よろしくお願いいたします。
fs = 1000;% sample frequency(Hz)
model_timestep1 = (0:1/fs:10);
model_timestep2 = (10:1/fs:30);
model_timestep3 = (30:1/fs:40);
sinwave1 = sin(1*pi*0.5*model_timestep1);
sinwave2 = sin(1*pi*1*model_timestep2);
sinwave3 = sin(1*pi*2*model_timestep3);
S1 = horzcat(sinwave1(1:fs*10), sinwave2(1:fs*20), sinwave3(1:fs*10));
L = length(S1); % Window length
T = 1/fs; % sec sample
t = (0:L-1)*T;
Y = fft(S1);
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f1 = fs*(0:(L/2))/L;
subplot(2,1,1);
plot(S1);
axis([0 inf -inf inf]);
subplot(2,1,2);
plot(f1,P1)
ylabel('FFT');
axis([0 5 0 inf]);

採用された回答

Jiro Doke
Jiro Doke 2017 年 7 月 25 日
編集済み: Jiro Doke 2017 年 7 月 25 日
正弦波は sin(2*pi*f*t) なので定義は以下のようになるのではないでしょうか。
sinwave1 = sin(2*pi*0.5*model_timestep1);
sinwave2 = sin(2*pi*1*model_timestep2);
sinwave3 = sin(2*pi*2*model_timestep3);
するとこんな感じになります。
  3 件のコメント
Naoya
Naoya 2017 年 7 月 25 日
1Hz の 信号が 0.5Hz, 2Hz の信号に比べ持続時間が2倍になっているからとなります。
0.5Hz : 10 sec
1 Hz : 20 sec
2 Hz : 10 sec
例えば、1Hz の信号の持続時間を 10sec に変更頂けますと、同じレベルのパワーを確認できます。
Ryosuke Takahashi
Ryosuke Takahashi 2017 年 7 月 25 日
回答ありがとうございました。
とても理解できました。 またよろしくお願いいたします。

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

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeアセンブリ についてさらに検索

Community Treasure Hunt

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

Start Hunting!