注意到用matlab分析信號頻譜時必須要乘個2/N才能得到正確的幅度譜幅值,如下:
A=50; % A 幅度值
fs=500; % fs 採樣率
F=50; % F 頻率,小於採樣率的一半(奈奎斯特)
N=100; % N 採樣個數
dt=1/fs; %時間間隔
t=0:dt:(N-1)*dt; %時間向量
freqPixel=fs/N; %頻率分辨率,即點與點之間頻率單位
y=A*sin(2*pi*F*t); %正弦波
%信號頻譜
freq=fft(y,N)*2/N;%做離散傅里葉
freq_d=abs(fftshift(freq));
w=(-N/2:1:N/2-1)*fs/N; %雙邊
plot(w,freq_d);
可以看到結果正確
之後查詢書本發現,我之前以爲信號x(n)的DFT變換X(K)的幅值就是其頻譜幅值,這個想法是錯誤的!
首先,DFT的定義爲:
由於的週期性,所以DFT具有隱含週期性,X(K)實質上是x(n)的以N爲週期延拓的序列x((n))N的離散傅里葉級數的頻譜特性,故要搞清楚DFT與其模擬信號頻譜的關係還要從週期序列傅里葉變換入手;
由,則有
即
,
到這一步可以看出,模擬信號傅里葉變換是將信號以正弦信號爲形式的各次諧波,而正弦信號的傅里葉變換與其DFT之間正好差一個2/N的係數
以上只是我的個人理解,如有錯誤還請指正,謝謝閱讀!