毛毛 asked in 電腦與網際網路軟體 · 1 decade ago

matlab FFT轉換問題

我有一筆實驗數據

y=[-11.1412,-11.0856,-11.0078,-10.9004,-10.7967,-10.7338]

取樣頻率為20k 我想做FFT畫出頻譜圖

y_fft=fft(y)

那我x軸想要畫出來的事他的頻率

請問我該怎麼寫呢~?

另外想請問我用這樣畫跟用pwelch計算出來的頻譜有什麼不同呢~?

Update:

我的y大概一千筆左右

那我就把256那邊改成1000就可以了嗎~?

Update 2:

請問chaos老師

我的程式碼如下

trot_10000是我存在excel的檔名 裡面有一萬筆實驗數據

clear all;

y1=xlsread('trot_10000.xls','a1:a8192');

y=y1+12;

y_fft=fft(y,8192);

x=linspace(0,20000,8192/2+1);

subplot(2,1,1)

plot(x,abs(y_fft(1:4097))*2)

subplot(2,1,2)

stem(x,abs(y_fft(1:4097))*2)

請問這樣寫對嗎~?

Update 3:

y1+12是我要扣掉儀器所測得數據的誤差

1 Answer

Rating
  • Chaos
    Lv 7
    1 decade ago
    Favorite Answer

    取樣頻率為20k 我想做FFT畫出頻譜圖

    y_fft=fft(y)

    那我x軸想要畫出來的事他的頻率

    請問我該怎麼寫呢~?

    頻率與取樣頻率有關,也與你的FFT解析度有關,也就是你取少條y,為了確認所取的y數,建議你上行改為

    >>y_fft=fft(y,256);

    我不確定你的數據真的只有你所說的那麼少嗎?多一點比較能看出準確的頻譜

    接著產生頻率的數據,X軸

    >>x=linspace(0,20000,256/2+1);

    除以二是因為nyquest的原理,所能看到的頻譜範圍只有取樣頻率的一半

    再來就可以畫頻譜圖

    >>plot(x,abs(y_fft(1:129))*2)

    成以二是因為你會發現y_fft左右對稱,因為只看一半,必須把其能量計算到左邊一半的部份

    這樣畫跟用pwelch計算出來的頻譜有什麼不同呢

    pwelch的方法還有考量到windowing, overlap的問題,你必需學過數位訊號處理才能跟你解釋

    2009-08-03 05:19:03 補充:

    我就把256那邊改成1000就可以了嗎~?

    可以的

    2009-08-05 00:45:15 補充:

    看起來應該沒問題

    Source(s): 教學經驗
Still have questions? Get your answers by asking now.