matlab 基2時間抽取(DIT)快速傅利葉變換

2021-08-13 04:39:38 字數 1367 閱讀 7708

clear;

%訊號fs=1000;%?取樣頻率?

t=1/fs;%? 取樣時間間隔??

n=1024;%? 訊號長度??

t=(0:n-1)*t;%?時間點向量

x=sin(2*pi*50*t)+0.7*sin(2*pi*200*t);

figure(1)

plot(t,x)

%係數矩陣

m=log2(n);

xishu=zeros(n,m+1);

%計算旋轉因子

k=0:1:n-1;

w=exp(-1i*2*pi/n);

wk=w.^k;

%先碼位倒置得到序號

xuhao=zeros(n,2);

xuhao(:,1)=0:1:n-1;

for i=1:1:n

xuhao(i,2)=bin2dec(fliplr(dec2bin(xuhao(i,1),m)));

end%得到序號後變換位置

x_=zeros(1,n);

for i=1:1:n

x_(i)=x(xuhao(i,2)+1);

endxishu(:,1)=x_;

%迴圈m次,計算得到結果

for i=0:1:m-1%i為級數

step=2^i;

%計算每級組數

zushu=n/2^(i+1);

%每次計算之前對係數進行處理,也是分組,每組的後半組*wk

for j=1:1:zushu%一組一組的來

for k=(n/zushu/2+1):1:n/zushu

xishu((j-1)*(n/zushu)+k,i+1)=xishu((j-1)*(n/zushu)+k,i+1)*wk(1+2^(m-i-1)*(k-((n/zushu/2+1))));

endend

for j=1:1:zushu%一組一組的來

for k=1:1:n/zushu/2

%計算向下的

xishu((j-1)*(n/zushu)+k,i+2)=xishu((j-1)*(n/zushu)+k,i+1)+xishu((j-1)*(n/zushu)+k+step,i+1);

endfor k=(n/zushu/2+1):1:n/zushu

%計算向上的

xishu((j-1)*(n/zushu)+k,i+2)=xishu((j-1)*(n/zushu)+k-step,i+1)-xishu((j-1)*(n/zushu)+k,i+1);

endend

endfigure(2)

f=1/(n*t)*(0:n/2);

plot(f,2*abs(xishu(1:n/2+1,m+1))/n)

基2FFT時間抽取和頻域抽取演算法比較

基二fft演算法 include math.h include stdio.h struct compx compx struct compx ee struct compx b1,struct compx b2 複數相乘 void fft struct compx xin,int n 求出m為lo...

DB2時間函式

獲取當前日期 select current date from sysibm.sysdummy1 values current date 獲取當前日期 select current time from sysibm.sysdummy1 values current time 獲取當前時間戳 sele...

Redis 事件 2 時間事件

redis時間事件分為以下兩類 1.定時事件 程式在指定時間執行一次。2.週期性事件 程式每隔指定時間執行一次。時間事件的屬性 1.id 伺服器為時間事件建立的全域性唯一id,id號從小到大遞增。2.when 毫秒精度的unix時間戳,記錄時間事件的到達時間。3.timeproc 時間事件處理器,乙...