單譜線插值FFT的MATAB實現

2021-09-25 02:46:21 字數 1821 閱讀 9263

f0=50.1; % 基波頻率

fs=1500; % 取樣頻率

n=512; % 資料長度

n=0:n-1; % 資料索引

rad=pi/180; % 角度和弧度的轉換因子

xb=[1,0.02,0.1,0.01,0.05,0,0.02,0,0.01]; % 諧波幅值

q=[-23,115.6,59.3,52.4,123.8,0,-31.8,0,-63.7]rad; % 諧波初始相位

s=zeros(1,n); % 初始化

m=9; % 諧波個數

for i=1:m % 產生諧波訊號

s=s+xb(i)cos(2pif0in./fs+q(i));

endw=0.5-0.5cos(2pi*n./n); % 海寧窗

x=s.*w; % 訊號乘以窗函式

v=fft(x,n); % fft

u=abs(v); % 取頻譜的幅值

k1=zeros(1,m); % 初始化

k2=zeros(1,m);

a=zeros(1,m);

ff=zeros(1,m);

ph=zeros(1,m);

df=fs/n; % 頻率分瓣率

for i=1:m % 計算基波和各階諧波的引數

if i==1 % 若計算基波,在40-60hz區間中尋找最大峰值

n1=fix(35/df); n2=fix(65/df); % 求出40hz和60hz對應的索引號

else % 若計算諧波,從該諧波理論值-10和+10的區間中尋找最大值

n1=fix((iff(1)-15)/df); % 求出區間對應的索引號

n2=fix((iff(1)+15)/df);

end[um,ul]=max(u(n1:n2)); % 在區間中找出最大值

k1(i)=ul+n1-1; % 給出最大值的索引號

% 判斷峰值在最大值左邊還是右邊,如果峰值在最大值左邊,把k1(i)進行修正

if u(k1(i)-1)>u(k1(i)+1),

k1(i)=k1(i)-1;

endk2(i)=k1(i)+1; % 求出k2(i),使峰值永遠在k1(i)和k2(i)之間

y1=u(k1(i)); % 求出y1和y2

y2=u(k2(i));

b=y2/y1; % 按式(7-2-5)計算出beta

% 海寧窗的beta對alpha的表示式

a=-0.985782+2.871279b-2.481274b2+1.747132*b3-0.91095b^4+…

0.320022b5-0.066571*b6+0.0061436b^7;

% 按alpha的數值決定最大值的索引號和gamma值

if y1>=y2 % 若k1是最大值索引

yk=y1;

gama=a;

endif y1(3.999998+2.580052*(gama)2+0.989796*(gama)4+…

0.352636*(gama)^6)/n;

ff(i)=(k1(i)-1+a)fs/n; % 求出諧波的頻率

ph(i)=phase(v(k1(i)))-pia; % 求出諧波的初始相位

ph(i)=ph(i)-(ph(i)>pi)2pi+(ph(i)<-pi)2pi; % 對相位進行修正

% 若幅值過小設為0,並對頻率相位修正

if a(i)<0.0005, a(i)=0; ff(i)=i*ff(1); ph(i)=0; end

% 顯示諧波引數

fprintf(』%4d %5.6f %5.6f %5.6f\n』,i,a(i),ff(i),ph(i)/rad);

end

matlab的fft譜振幅

對應的是真實的單邊譜的振幅,這裡的真實值指的是訊號的幅度 如果除以n,則對應雙邊譜的振幅。其實,直接傅利葉變換對應的積分什麼也不用除,當然抽樣定理 要乘以抽樣的週期才是對應原函式的積分值。雙邊的幅度譜除以了取樣點數n,0.01頻率真實的譜分量為2 pi,下圖最高的為 2 pi 2,設定的引數 100...

一維FFT的頻率幅值關係

本文的引數變數 訊號頻率 本文後續採用fsign 來表示。取樣頻率 本文後續採用fsample來表示 必須是fsign的兩倍以上 頻率的模 abs fft s 也就是 轉頻率後的 根號下 實數的平方 虛數的平方 的絕對值。頻率的幅值 a abs fft s n 2 n點頻率 n 1 fsample ...

用FFT估計單頻正弦訊號的幅度

用fft估計單頻正弦訊號的幅度 fft是數字訊號處理中最常用,也是最重要的演算法。在實踐中,人們常用fft來估計訊號的頻率。但有時候,也需要估計單頻正弦訊號的幅度,這時候用fft還能做得到嗎?答案是顯然的,用fft同樣可以估計單頻正弦訊號的幅度。假定訊號的幅度為a,頻率為f,訊號取樣點數為n。fft...