簡體   English   中英

正弦波一個周期的Matlab fft返回-pi / 2相位。 為什么?

[英]Matlab fft on one period of sinewave returns phase of -pi/2. Why?

在嘗試了解快速傅立葉變換時,我遇到了相位問題。 我將其分解為下面的簡單代碼。 計算50Hz正弦波的一個周期,並應用fft算法:

    fs = 1600;
    dt = 1/fs;
    L  = 32;      
    t=(0:L-1)*dt; 
    signal  = sin(t/0.02*2*pi); 

    Y = fft(signal);
    myAmplitude = abs(Y)/L *2 ;
    myAngle     = angle(Y);

    Amplitude_at_50Hz = myAmplitude(2);
    Phase_at_50Hz     = myAngle(2);

雖然振幅還可以,但我不了解相位結果。 為什么我得到-pi / 2? 因為只有一個純正弦波,所以我希望相位為0。或者我的數學有誤,或者我使用Matlab,或者兩者都...(自制的fft給我相同的結果。所以我想我是絆倒我的數學。)

這里有一個類似的帖子: MATLAB FFT Phase plot 但是,建議的“展開”命令不能解決我的問題。

謝謝和最誠摯的問候,

潮呼呼

FFT相位角為零時的默認波形是在FFT窗口中以1.0開始和結束的余弦波(不是在FFT窗口中以0.0或其零交叉開始和結束的正弦波)。通用術語是將FFT基向量的余弦函數分量(復指數)稱為“實數”分量。 正弦函數基礎分量稱為“虛數”,因此可以推斷出非零的復數相位。

那是應該的。 如果使用余弦,將發現相位為零。

暫時忽略數值傅立葉變換,並采用sin(x)一個很好的舊傅立葉變換,我懶得去遍歷它,我們得到了一對純虛構的增量。

出於直觀的原因,回想一下,離散傅里葉變換是在復雜平面中沿着曲線的一堆點求平均,同時以您正在計算的bin的角頻率轉動並使用與樣本相對應的幅度。 如果在以自己的頻率旋轉時對正弦曲線進行采樣,則得到的形狀是一個以虛軸為中心的圓(請參見下文)。 平均值當然在虛軸上。

正弦為圓

用Wolfram Alpha作圖。

正弦函數的傅立葉變換,例如A * sin((2 * pi * f)* t),其中f是頻率,將在+ f和-f的頻域中產生2個幅度為A / 2的脈沖,其中相關相位分別是-pi / 2和pi / 2。 您可以在這里查看其證明: http : //mathworld.wolfram.com/FourierTransformSine.html

因此,代碼工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM