求用matlab实现FFT函数的功能 求教matlab实现门函数的fft

\u7528matlab\u7f16\u5199\u5b9e\u73b0fft\u7684\u7a0b\u5e8f\u3002

function y=myditfft(x)
%\u672c\u7a0b\u5e8f\u5bf9\u8f93\u5165\u5e8f\u5217\u5b9e\u73b0DIT-FFT\u57fa2\u7b97\u6cd5\uff0c\u70b9\u6570\u53d6\u5927\u4e8e\u7b49\u4e8e\u957f\u5ea6\u76842\u7684\u5e42\u6b21
%------------------------------------
%


myditfft.c
%------------------------------------
m=nextpow2(x);





%\u6c42\u7684x\u957f\u5ea6\u5bf9\u5e94\u76842\u7684\u6700\u4f4e\u5e42\u6b21m
N=2^m;
if length(x)<N

x=[x,zeros(1,N-length(x))];


%\u82e5\u7684\u957f\u5ea6\u4e0d\u662f2\u7684\u5e42\uff0c\u88650\u52302\u7684\u6574\u6570\u5e42
end
nxd=bin2dec(fliplr(dec2bin([1:N]-1,m)))+1;
%\u6c421\uff1a2^m\u6570\u5217\u7684\u5012\u5e8f
y=x(nxd);






%\u5c06\u5012\u5e8f\u6392\u5217\u4f5c\u4e3a\u7684\u521d\u59cb\u503c
for mm=1:m






%\u5c06DFT\u505am\u6b21\u57fa2\u5206\u89e3\uff0c\u4ece\u5de6\u5230\u53f3\uff0c\u5bf9\u6bcf\u6b21\u5206\u89e3\u4f5cDFT\u8fd0\u7b97

Nmr=2^mm;

u=1;







%\u65cb\u8f6c\u56e0\u5b50u\u521d\u59cb\u5316

WN=exp(-i*2*pi/Nmr);



%\u672c\u6b21\u5206\u89e3\u7684\u57fa\u672cDFT\u56e0\u5b50WN\uff1dexp(-i*2*pi/Nmr)

for j=1:Nmr/2




%\u672c\u6b21\u8de8\u8d8a\u95f4\u9694\u5185\u7684\u5404\u6b21\u789f\u5f62\u8fd0\u7b97


for k=j:Nmr:N




%\u672c\u6b21\u789f\u5f62\u8fd0\u7b97\u7684\u8de8\u8d8a\u95f4\u9694\u4e3aNmr=2^mm



kp=k+Nmr/2;



%\u786e\u5b9a\u789f\u5f62\u8fd0\u7b97\u7684\u5bf9\u5e94\u5355\u5143\u4e0b\u6807



t=y(kp)*u;



%\u789f\u5f62\u8fd0\u7b97\u7684\u4e58\u79ef\u9879



y(kp)=y(k)-t;



%\u789f\u5f62\u8fd0\u7b97\u7684\u52a0\u6cd5\u9879



y(k)=y(k)+t;


end


u=u*WN;





%\u4fee\u6539\u65cb\u8f6c\u56e0\u5b50\uff0c\u591a\u4e58\u4e00\u4e2a\u57fa\u672cDFT\u56e0\u5b50WN

end
end

\u5982\u679c\u4f60\u53ea\u5bf9[-0.5,0.5]\u4e4b\u95f4\u7684\u4fe1\u53f7\u8fdb\u884c\u91c7\u6837\uff0c\u90a3\u4e48\u4f60\u91c7\u7684\u5c06\u4f1a\u662f\u5e38\u65701\uff0c\u8fd9\u6837\u505a\u51fa\u7684FFT\u5e94\u8be5\u662f\u4e00\u4e2adelta\u51fd\u6570\uff0c\u4e5f\u5c31\u662f\u4e00\u4e2a\u51b2\u51fb\uff0c\u6240\u4ee5\u4f60\u5e94\u8be5\u91c7\u5305\u62ec\u5916\u8fb9\u7684\u503c\u624d\u80fd\u591f\u53cd\u6620\u51fa\u4fe1\u53f7\u7684\u7279\u6027\u3002
\u8fd9\u6837\u7ed3\u679c\u6ca1\u6709\u4efb\u4f55\u95ee\u9898\uff0c\u95ee\u9898\u662f\u4f60\u91c7\u6837\u7684\u503c\u592a\u5c11\u4e86\uff0c\u6362\u53e5\u8bdd\u8bf4\u5c31\u662f\u4f60\u91c7\u6837\u7684\u4fe1\u53f7\u53cd\u6620\u4e0d\u51fa\u8fd9\u662f\u4e2a\u95e8\u51fd\u6570\u7684\u7279\u6027\u6765\u3002

matlab\u91cc\u8fb9\u662f\u53ef\u4ee5\u5229\u7528\u5355\u8fb9\u51fd\u6570\u8868\u793a\u95e8\u51fd\u6570\u7684\u3002\u4f60\u53ef\u4ee5\u8dd1\u4e00\u4e0b\u4e0b\u8fb9\u7684\u7a0b\u5e8f\uff0c\u770b\u4e00\u4e0b\u95e8\u51fd\u6570\uff1a
fx=heaviside(x+0.5)-heaviside(x-0.5);
ezplot(fx,[-1,1]);




\u800c\u4e14matlab\u91cc\u8fb9\u8fd8\u6709\u5bf9\u7b26\u53f7\u8868\u8fbe\u5f0f\u505a\u5085\u91cc\u53f6\u53d8\u6362\u7684\u51fd\u6570fourier()\uff0c\u7528\u6cd5\u5982\u4e0b\uff1a
FX=fourier(fx);
ezplot(FX,[-30,30]);
title('fourier transformation of fx')



\u800c\u5982\u679c\u4f60\u975e\u60f3\u7528fft\u505a\uff0c\u5c31\u5fc5\u987b\u52a0\u5927\u91c7\u6837\u70b9\u6570\uff0c\u5c24\u5176\u662f\u95e8\u4e4b\u5916\u7684\u90e8\u5206\uff0c\u624d\u80fd\u591f\u5b8c\u6574\u7684\u63cf\u8ff0\u4fe1\u53f7\u3002

function xn=myfft(x)
N=length(x);
M=log2(N);
xtmp=zeros(1,N);
value=zeros(1,M);
for i=0:N-1
repr=i;
for t=1:1:M
repr=bitshift(i,1-t);
value(t)=bitand(repr,1);
end
pos=0;
for k=1:1:M
pos=pos+value(k)*2^(M-k);
end
xtmp(pos+1)=x(i+1);
end

for i=1:M
deepth=2^(i-1);
width=2^(M-i);
for t=1:2^i:N
for k=1:deepth
tmp=xtmp(t+k-1);
wn=width*(k-1);
xtmp(t+k-1)=tmp+exp(-j*2*pi*wn/N)*xtmp(t+k+deepth-1);
xtmp(t+k+deepth-1)=tmp-exp(-j*2*pi*wn/N)*xtmp(t+k+deepth-1);
end
end
end
xn=xtmp;

function xn=myfft(x)
N=length(x);
M=log2(N);
xtmp=zeros(1,N);
value=zeros(1,M);
for i=0:N-1
repr=i;
for t=1:1:M
repr=bitshift(i,1-t);
value(t)=bitand(repr,1);
end
pos=0;
for k=1:1:M
pos=pos+value(k)*2^(M-k);
end
xtmp(pos+1)=x(i+1);
end

for i=1:M
deepth=2^(i-1);
width=2^(M-i);
for t=1:2^i:N
for k=1:deepth
tmp=xtmp(t+k-1);
wn=width*(k-1);
xtmp(t+k-1)=tmp+exp(-j*2*pi*wn/N)*xtmp(t+k+deepth-1);
xtmp(t+k+deepth-1)=tmp-exp(-j*2*pi*wn/N)*xtmp(t+k+deepth-1);
end
end
end
xn=xtmp;

  • matlab濡備綍鐢╢ft
    绛旓細matlab鑷甫鐨刦ft鍑芥暟鏄揩閫熷倕閲屽彾鍙樻崲鍑芥暟銆備富瑕佺敤浜庨檷鍣鐞嗭紝閫氳繃浣跨敤鍌呴噷鍙跺彉鎹㈡眰鍣0涓殣钘忕殑淇″彿鐨勯鐜囧垎閲忋傝鍑芥暟浣跨敤鏂规硶锛氭柟娉曚竴锛歒 = fft(X) 鐢ㄥ揩閫熷倕閲屽彾鍙樻崲 (FFT) 绠楁硶璁$畻 X 鐨勭鏁e倕閲屽彾鍙樻崲 (DFT)銆傚鏋 X 鏄悜閲忥紝鍒 fft(X) 杩斿洖璇ュ悜閲忕殑鍌呴噷鍙跺彉鎹傚鏋 X 鏄煩闃碉紝鍒 fft...
  • matlab鎬庝箞鍋歠ft棰戣氨鍥
    绛旓細n=0:N-1;t=n/fs; %鏃堕棿搴忓垪 x1=sin(2*pi*100*t);x2=sin(2*pi*200*t);x3=sin(2*pi*3800*t);y1=fft(x1,N); %瀵逛俊鍙杩涜蹇烣ourier鍙樻崲 mag1=abs(y1); %姹傚緱Fourier鍙樻崲鍚庣殑鎸箙 y2=fft(x2,N); %瀵逛俊鍙疯繘琛屽揩閫烣ourier鍙樻崲 mag2=abs(y2); %姹傚緱Fourier...
  • 濡備綍鐢╩atlab璁$畻鍌呴噷鍙剁骇鏁?
    绛旓細F(蠅) = 鈭 f(t) e^(-i蠅t) dt 鍏朵腑蠅鏄鐜囷紝i鏄櫄鏁板崟浣嶃傜劧鑰岋紝浣犵粰鍑虹殑鍑芥暟f(t) = e^(-2|t|)鍦╩atlab涓眰鍌呴噷鍙剁骇鏁版槸鏈変簺澶嶆潅鐨勶紝鍥犱负瀹冪殑绉垎鍙兘娑夊強鍒颁竴浜涚壒娈婂嚱鏁般傛澶栵紝鐢变簬璇ュ嚱鏁版槸鍋跺嚱鏁帮紝鍏跺倕閲屽彾鍙樻崲鐨勫疄閮ㄥ拰铏氶儴鏄绉扮殑锛屽洜姝ゅ彧闇瑕佽绠椾竴鍗婄殑棰戠巼鑼冨洿鍗冲彲銆備笉杩囷紝...
  • 鐢╩atlab缂栧啓瀹炵幇fft鐨勭▼搴忋
    绛旓細function y=myditfft(x)鏈▼搴忓杈撳叆搴忓垪瀹炵幇DIT-FFT鍩2绠楁硶锛岀偣鏁板彇澶т簬绛変簬闀垮害鐨2鐨勫箓娆 --- myditfft.c --- m=nextpow2(x);姹傜殑x闀垮害瀵瑰簲鐨2鐨勬渶浣庡箓娆 N=2^m;if length(x)<N x=[x,zeros(1,N-length(x))];鑻ョ殑闀垮害涓嶆槸2鐨勫箓锛岃ˉ0鍒2鐨勬暣鏁板箓 end nxd=bin2dec(fliplr(...
  • 濡備綍鐢╩atlab缁樺埗E=1,t=1,T=2,鍛ㄦ湡鐭╁舰鑴夊啿淇″彿鐨勪笁瑙鍑芥暟褰㈠紡鐨勫箙搴...
    绛旓細瑕佺粯鍒禘=1锛宼=1锛孴=2鐨勫懆鏈熺煩褰㈣剦鍐蹭俊鍙风殑涓夎鍑芥暟褰㈠紡鐨勫箙搴﹂璋卞浘锛屼綘鍙互浣跨敤MATLAB鐨凢FT锛團ast Fourier Transform锛夊嚱鏁般備互涓嬫槸涓涓彲鑳界殑绋嬪簭锛歮atlab澶嶅埗浠g爜 鍙傛暟瀹氫箟 E = 1; % 骞呭害 t = 1; % 鏃堕棿鍋忕Щ T = 2; % 鍛ㄦ湡 Fs = 1000; % 閲囨牱棰戠巼 t_sample = 0:1/Fs:T; % 鏃堕棿...
  • MATLAB涓殑FFT鐨勯噰鏍烽鐜囧拰閲囨牱鐐规庢牱纭畾?
    绛旓細鍦∕ATLAB涓鍋欶FT锛岄鍏堢紪鍐鍑芥暟锛屽涓嶅悓鐨勯噰鏍烽鐜囧拰閲囨牱鐐规暟锛岃绠桭FT鍚庣殑棰戠巼搴忓垪鍙婂叾瀵瑰簲鐨勫箙鍊硷細function [f amplitude] = yopheeFFT(sampleRate,FFT_points)n = 0:FFT_points-1;t = n/sampleRate; %閲囨牱鏃堕棿搴忓垪 f_All = n*sampleRate/FFT_points; %棰戠巼搴忓垪 %鏋勯犳贩鏈夊櫔澹扮殑鍛ㄦ湡淇″彿骞...
  • 濡備綍鐢╩atlab瀹炵幇fft
    绛旓細matlab涓fft鏈1d鍜2d鐨勶紝fft寰楀埌鐨勬槸淇″彿鐨勯璋卞嵆t锛嶃媐 濡 clear 缂栧啓楠嗛仴 fs=1000 t=0:1/fs:0.6;f1=100;f2=300;x=sin(2*pi*f1*t)+sin(2*pi*f2*t);subplot(711)plot(x);title('f1锛100hz锛塡f2(300hz)鐨勬寮︿俊鍙凤紝鍒濈浉0')xlabel('搴忓垪锛坣锛')grid on number=512 y=fft(x...
  • 鐢∕atlab 缂栧啓涓涓鍑芥暟,瀹炵幇FFT銆
    绛旓細fft鏄揩閫熷倕绔嬪彾鍙樻崲锛屽彲鐩存帴璋冪敤锛屽fft(A)绂绘暎鍌呯珛鍙跺彉鎹㈡槸dft 杩欐槸鎴戣嚜宸鍋鐨刣ft function X=dft(x)N=length(x);W=exp(-2i*pi/N);X=zeros(1,N);for k=1:N X(k)=sum(x.*W.^((0:N-1)*(k-1)));end
  • 濡備綍鐢╩atlab缂栫▼姹傚嚱鏁鐨勫倕閲屽彾鍙樻崲棰戣氨鍑芥暟
    绛旓細Y = fft(y,N)/N*2; %闄や互N涔樹互2鎵嶆槸鐪熷疄骞呭硷紝N瓒婂ぇ锛屽箙鍊肩簿搴﹁秺楂 f = Fs/N*(0:1:N-1); %棰戠巼 A = abs(Y); %骞呭 P = angle(Y); %鐩稿 figure;subplot(211);plot(f(1:N/2),A(1:N/2)); %鍑芥暟fft杩斿洖鍊肩殑鏁版嵁缁撴瀯鍏锋湁瀵圭О鎬,鍥犳鎴戜滑鍙彇鍓嶄竴鍗 title...
  • matlab涓浣曞涓缁勬暟鎹杩涜fft鍙樻崲鍚庡緱鍒伴璋卞浘??
    绛旓細1銆佺洿鎺ュ鍏浣跨敤ceil鍑芥暟锛屽彲浠ュ悜涓婂彇鏁达細鍗冲ぇ浜庣瓑浜庣粰瀹氭暟鎹殑鏈灏忔暣鏁般2銆佷娇鐢╢loor鍑芥暟鍙互杩涜鍚戜笅鍙栨暣銆傚鍥撅紝灏嗙煩闃礎涓殑姣忎釜鍏冪礌鍙栧皬浜庣瓑浜庤鍏冪礌鐨勬渶澶ф暣鏁般3銆佷娇鐢╢ix鍑芥暟鍒欏彲浠ュ幓闄ゅ皬鏁伴儴鍒嗐傚浜庡ぇ浜0鐨勫厓绱犵浉褰撲簬floor锛屽浜庡皬浜0鐨勫厓绱犵浉褰撲簬ceil銆4銆佷娇鐢╮ound鍑芥暟鍙互鎶婃暟鎹洓鑸嶄簲鍏ュ埌鏈杩...
  • 扩展阅读:fft2 matlab ... matlab fft函数用法 ... matlab实现fft代码 ... matlab实现二维傅里叶变换 ... matlab fft 振幅问题 ... matlab ifft函数 ... 代码注释自动生成matlab ... 中英文自动翻译器 ... matlab进行快速傅里叶变换 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网