• <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>

    Matlab中的FFT函數示例

    這個例子展示了如何使用FFT函數來分析太陽黑子活動在過去300年中的變化。太陽黑子活動是周期性的,大約每11年達到一個最大值。讓我們確認一下。這是一個叫做蘇黎世黑子相對數的數量圖,它測量了黑子的數量和大小。天文學家已經把這個數字列了將近300年了。

    東西/原料

    • 電腦
    • Matlab軟件

    方式/步調

    1. 1

      在號令行窗口,輸入如下號令:

      load sunspot.dat

      year = sunspot(:,1);

      relNums = sunspot(:,2);

      plot(year,relNums)

      title('Sunspot Data')

      如圖1所示。

    2. 2

      按“Enter鍵”,獲得Figure1。

      如圖2所示。

    3. 3

      以下是前50年的現狀。

      在號令行窗口,輸入如下號令:

      plot(year(1:50),relNums(1:50),'b.-');

      如圖3所示。

    4. 4

      旌旗燈號處置的根基東西是快速傅立葉變換(FFT)。要獲取太陽黑子數據的FFT,請鍵入以下內容。

      Y的第一部門Y(1)只是數據的和,可以刪除。

      在號令行窗口,輸入如下號令:

      Y = fft(relNums);

      Y(1) = [];

      復平面上Fourier系數(由Y給出)的分布圖很標致,但很難詮釋。我們需要一種更有效的方式來查抄Y中的數據。

      在號令行窗口,輸入如下號令:

      plot(Y,'ro')

      title('Fourier Coefficients in the Complex Plane');

      xlabel('Real Axis');

      ylabel('Imaginary Axis');

      如圖4所示。

    5. 5

      Y的復震級平方稱為功率,功率與頻率的關系圖稱為“周期圖”。

      在號令行窗口,輸入如下號令:

      n = length(Y);

      power = abs(Y(1:floor(n/2))).^2;

      nyquist = 1/2;

      freq = (1:n/2)/(n/2)*nyquist;

      plot(freq,power)

      xlabel('cycles/year')

      title('Periodogram')

      如圖5所示。

    6. 6

      周期/年的比例有些不便利。

      我們可以用年/周期來作圖,估量一個周期的長度。

      在號令行窗口,輸入如下號令:

      plot(freq(1:40),power(1:40))

      xlabel('cycles/year')

      如圖6所示。

    7. 7

      為了便利起見,我們繪制了功率與周期的關系圖(此中period=1./freq)。正如預期的那樣,有一個很是顯著的周期,其長度約為11年。

      在號令行窗口,輸入如下號令:

      period = 1./freq;

      plot(period,power);

      axis([0 40 0 2e+7]);

      ylabel('Power');

      xlabel('Period (Years/Cycle)');

      如圖7所示。

    8. 8

      最后,我們可以經由過程選擇最強的頻率來更切確地確定周期長度。紅點定位這一點。

      在號令行窗口,輸入如下號令:

      hold on;

      index = find(power == max(power));

      mainPeriodStr = num2str(period(index));

      plot(period(index),power(index),'r.', 'MarkerSize',25);

      text(period(index)+2,power(index),['Period = ',mainPeriodStr]);

      hold off;

      如圖8所示。

    原作者:Matlab 教程舉報
    • 發表于 2020-02-10 20:00
    • 閱讀 ( 851 )
    • 分類:其他類型

    你可能感興趣的文章

    相關問題

    0 條評論

    請先 登錄 后評論
    聯系我們:uytrv@hotmail.com 問答工具
  • <noscript id="ecgc0"><kbd id="ecgc0"></kbd></noscript>
    <menu id="ecgc0"></menu>
  • <tt id="ecgc0"></tt>
    久久久久精品国产麻豆