[TOC]
基本概念
-
序號和 頻率成分的關系 因為0頻的存在,最高頻率為Fs-df即df*(N-1)
需要解決的問題
- 理解FFT產生序列的意義承桥,即幅度和相位
- 找到頻率序列,對應的頻率軸肩狂,恢復x軸為頻率。重要的頻率Fs蟹漓,頻率軸最大點為Fs-df
- 找到頻率序列模值和信號真實幅度的轉換關系顿痪。
- 區(qū)分0頻和其他頻率
- 在只使用正頻率時,乘以系數2/N耿眉,其中N為FFT的點數
頻域分析的意義
- 信號變換到頻域的功能
- FFT是離散傅立葉變換的快速算法,可以將一個信號變換到頻域鱼响,將信號的頻譜提取出來鸣剪,做頻譜分析
- 有些信號在時域上是很難看出什么特征的,但是如果變換到頻域之后丈积,就很容易看出特征了筐骇。這就是很多信號分析采用FFT變換的原因。
數字信號處理基礎
采樣
- 模擬信號->ADC采樣->數字信號
- 采樣定理: 采樣頻率需要大于信號頻率的2倍
FFT變換
- 數字信號序列江滨,有N個采樣點铛纬,經過FFT變換得到N個點的FFT結果
- 當N點是2的整數次方,FFT因對稱結構唬滑,計算復雜度降低告唆,會算的很快
- 假設 采樣率Fs莫秆,信號頻率F,采樣點數N悔详,經過FFT計算得到一個N點的復數序列 sf(N)
- sf(N)中每個點對應一個頻率點。點的模值 abs(sf(N))惹挟,表征幅度特性茄螃。點的角度表征相位特性。
- 對于正頻譜连锯,幅度恢復归苍,第一個點直流分量,模值/N运怖;其他點模值*2/N拼弃,即可恢復頻譜的幅值。
- 第一個點直流分量摇展,第N+1個點對應采樣頻率Fs(實際上只有N個點)吻氧。頻率分辨率df=Fs/N,那么第N個點對應的真實頻率為F_N=(N-1)*Fs/N
- T=N/Fs咏连,因此T=1/df盯孙。如果要提高頻率分辨率,提高采樣時間祟滴,或者在采樣率不變的情況下振惰,提高采樣點數即可。頻率分辨率和采樣時間是倒數關系垄懂。
FFT復數的意義
- 如果FFT后N點數據用復數a+bi表示骑晶,則,相位
- 如果只取正頻率桶蛔,各個分量的信號表達式為
舉例
- 直流Adc=2
- 頻率F1=50 A1=2 相位P1=-30
- 頻率 F2=75 A2=1.5 相位P2=90
- 數學表達如下
- matlab中cos用弧度制,采樣率Fs=256 Hz冠蒋。采樣點數N=256羽圃,采樣時間T=Fs/N=1
- 頻率間隔df=1/T=1
- F_N=(N-1)*Fs/N,第一個點直流抖剿,那么50Hz分量在第51點朽寞,75Hz分量在76點
close all; %先關閉所有圖片
Adc=2; %直流分量幅度
A1=3; %頻率F1信號的幅度
A2=1.5; %頻率F2信號的幅度
F1=50; %信號1頻率(Hz)
F2=75; %信號2頻率(Hz)
Fs=256; %采樣頻率(Hz)
P1=-30; %信號1相位(度)
P2=90; %信號相位(度)
N=256; %采樣點數
t=[0:1/Fs:N/Fs]; %采樣時刻
%信號
S=Adc+A1*cos(2*pi*F1*t+pi*P1/180)+A2*cos(2*pi*F2*t+pi*P2/180);
%顯示原始信號
plot(S);
title('原始信號');
figure;
Y = fft(S,N); %做FFT變換
Ayy = (abs(Y)); %取模
plot(Ayy(1:N)); %顯示原始的FFT模值結果
title('FFT 模值');
figure;
Ayy=Ayy/(N/2); %換算成實際的幅度, 針對半頻譜
Ayy(1)=Ayy(1)/2; %直流和奈奎斯特頻率處還需要/2
F=([1:N]-1)*Fs/N; %換算成實際的頻率值
% F=[0:N-1]*Fs/N; %F=0:Fs/N:Fs/2-Fs/N
plot(F(1:N/2),Ayy(1:N/2)); %顯示換算后的FFT模值結果
title('幅度-頻率曲線圖');
figure;
Pyy=[1:N/2];
for i=1:N/2
Pyy(i)=phase(Y(i)); %計算相位
Pyy(i)=Pyy(i)*180/pi; %換算為角度
end;
plot(F(1:N/2),Pyy(1:N/2)); %顯示相位圖
title('相位-頻率曲線圖');
結果