求matlab中fft函数的源代码 用matlab编写实现fft的程序。

\u5982\u4f55\u67e5\u770bmatlab fft\u51fd\u6570\u6e90\u4ee3\u7801

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...

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

一般是用:type 函数名,但有些是看不到的比如fft,sin等。
给你个c++实现的fft
#include <iostream>
  #include <fstream>
  #include <math.h>
  using namespace std;
  const double PI = 3.14159265358979323846;
  int n; // 数据个数 = 2的logn次方
  int logn;
  /// 复数结构体
  struct stCompNum
  {
  double re;
  double im;
  };
  stCompNum* pData1 = NULL;
  stCompNum* pData2 = NULL;
  /// Examda提示: 正整数位逆序后输出
  int reverseBits(int value, int bitCnt)
  {
  int i;
  int ret = 0;
  for(i=0; i<bitCnt; i++)
  {
  ret |= (value & 0x1) << (bitCnt - 1 - i);
  value >>= 1;
  }
  return ret;
  }
  void main()
  {
  ifstream fin("data.txt");
  int i,j,k;
  // input logn
  fin>>logn;
  // calculate n
  for(i=0, n=1; i<logn; i++) n *= 2;
  // malloc memory space
  pData1 = new stCompNum[n];
  pData2 = new stCompNum[n];
  // input raw data
  for(i=0; i<n; i++) fin>>pData1[i].re;
  for(i=0; i<n; i++) fin>>pData1[i].im;
  // FFT transform
  int cnt = 1;
  for(k=0; k<logn; k++)
  {
  for(j=0; j<cnt; j++)
  {
  int len = n / cnt;
  double c = - 2 * PI / len;
  for(i=0; i<len/2; i++)
  {
  int idx = len * j + i;
  pData2[idx].re = pData1[idx].re + pData1[idx + len/2].re;
  pData2[idx].im = pData1[idx].im + pData1[idx + len/2].im;
  }
  for(i=len/2; i<len; i++)
  {
  double wcos = cos(c * (i - len/2));
  double wsin = sin(c * (i - len/2));
  int idx = len * j + i;
  stCompNum tmp;
  tmp.re = pData1[idx - len/2].re - pData1[idx].re;
  tmp.im = pData1[idx - len/2].im - pData1[idx].im;
  pData2[idx].re = tmp.re * wcos - tmp.im * wsin;
  pData2[idx].im = tmp.re * wsin + tmp.im * wcos;
  }
  }
  cnt <<= 1;
  stCompNum* pTmp = NULL;
  pTmp = pData1;
  pData1 = pData2;
  pData2 = pTmp;
  }
  // resort
  for(i=0; i<n; i++)
  {
  int rev = reverseBits(i, logn);
  stCompNum tmp;
  if(rev > i)
  {
  tmp = pData1[i];
  pData1[i] = pData1[rev];
  pData1[rev] = tmp;
  }
  }
  // output result data
  for(i=0; i<n; i++) cout<<pData1[i].re<<"\t";
  cout<<endl;
  for(i=0; i<n; i++) cout<<pData1[i].im<<"\t";
  cout<<endl;
  // free memory space
  delete []pData1;
  delete []pData2;
  fin.close();
  system("pause");
  }

我也想要MATLAB里fft的源代码。。。。。。。。

  • matlab骞呭艰氨鍑芥暟婧绋嬪簭鐨淇敼闂
    绛旓細绋嬪簭鎻愮ず鐨勯敊璇槸鍑芥暟hua_fft()鐨勮緭鍏ュ弬鏁颁釜鏁颁笉瓒炽備綘鍦ㄥ畾涔鍑芥暟鐨鏃跺 function hua_fft(y,fs,style,varargin)琛ㄦ槑閲岄潰鏈3涓浐瀹氬弬鏁帮紝杩樻湁鍙彉鐨勫弬鏁帮紝鍥犳鍑芥暟鍦ㄨ皟鐢ㄧ殑鏃跺欒嚦灏戝緱3涓緭鍏ュ弬鏁般備絾鏄紝浣犲湪鍑芥暟璋冪敤鐨勬椂鍊欙紝鍗存槸2涓緭鍏ュ弬鏁 subplot(212);hua_fft(y,fs);title('鍘熷淇″彿棰戣氨');...
  • 鍝綅澶т緺浼氬啓matlab姹傝В鍒嗘鍑芥暟FFT鐨绋嬪簭
    绛旓細t6=50:Ts:60;y6=1.2*sin(2.5*pi*t6) %(50<t<60)y=[y1 y2 y3 y4 y5 y6];figure;plot(y);yLength=length(y);Y=fft(y);Pyy = Y.* conj(Y) / yLength;haflength=floor(yLength/2);f=0:fs/2/haflength:fs/2;bar(f,Pyy(1:haflength+1));xlabel('Hz');grid on;
  • MATLAB涓師甯鐨凢FT鍑芥暟鎬庝箞璋冪敤
    绛旓細鍦ㄥ懡浠ょ獥鍙i敭鍏ワ細help fft 灏辫兘鏌ョ湅FFT鍑芥暟鐨浣跨敤璇存槑浜嗐傜畝鍗曟潵璇达細a=fft锛坆,n锛夊氨鑳藉緱鍒版暟鎹産鐨刵鐐筬ft缁撴灉a浜
  • MATLAB 鐨刦ft鍑芥暟杩斿洖鍊兼槸浠涔堝晩
    绛旓細fft鑳藉垎杈ㄧ殑鏈楂橀鐜囦负閲囨牱棰戠巼鐨勪竴鍗婏紙鍗砃yquist棰戠巼锛夛紝鍑芥暟fft杩斿洖鍊兼槸浠yqusit棰戠巼涓鸿酱瀵圭О鐨勶紝Y鐨勫墠涓鍗婁笌鍚庝竴鍗婃槸澶嶆暟鍏辫江鍏崇郴銆侳FT锛堝揩閫熷倕閲屽彾鍙樻崲锛夋槸鍒╃敤澶嶆暟褰㈠紡鐨勭鏁e倕閲屽彾鍙樻崲鏉ヨ绠楀疄鏁板舰寮忕殑绂绘暎鍌呴噷鍙跺彉鎹紝matlab涓殑fft()鍑芥暟鏄疄鐜拌绠楁硶鐨勫疄鐜般傝繖绉嶇畻娉曞彲浠ュ噺灏戣绠桪FT鐨勬椂闂达紝澶...
  • 姹傛暀matlab瀹炵幇闂鍑芥暟鐨刦ft
    绛旓細fx=heaviside(x+0.5)-heaviside(x-0.5);ezplot(fx,[-1,1]);鑰屼笖matlab閲岃竟杩樻湁瀵圭鍙疯〃杈惧紡鍋氬倕閲屽彾鍙樻崲鐨勫嚱鏁fourier()锛岀敤娉曞涓嬶細FX=fourier(fx);ezplot(FX,[-30,30]);title('fourier transformation of fx')鑰屽鏋滀綘闈炴兂鐢fft鍋氾紝灏卞繀椤诲姞澶ч噰鏍风偣鏁帮紝灏ゅ叾鏄棬涔嬪鐨勯儴鍒嗭紝鎵嶈兘澶熷畬鏁寸殑...
  • MATLAB涓殑FFT鐨閲囨牱棰戠巼鍜岄噰鏍风偣鎬庢牱纭畾?
    绛旓細鍦∕ATLAB涓鍋FFT锛岄鍏堢紪鍐鍑芥暟锛屽涓嶅悓鐨勯噰鏍烽鐜囧拰閲囨牱鐐规暟锛岃绠桭FT鍚庣殑棰戠巼搴忓垪鍙婂叾瀵瑰簲鐨勫箙鍊硷細function [f amplitude] = yopheeFFT(sampleRate,FFT_points)n = 0:FFT_points-1;t = n/sampleRate; %閲囨牱鏃堕棿搴忓垪 f_All = n*sampleRate/FFT_points; %棰戠巼搴忓垪 %鏋勯犳贩鏈夊櫔澹扮殑鍛ㄦ湡淇″彿骞...
  • 姹傜敤matlab瀹炵幇FFT鍑芥暟鐨鍔熻兘
    绛旓細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...
  • matlab涓IFFT鍑芥暟鐨鐢ㄦ硶
    绛旓細matlab涓IFFT鍑芥暟鍙互瀹炵幇涓缁村弽DFT绠楁硶銆傝皟鐢ㄦ牸寮忎负A锛滻FF锛圶锛孨锛孌IM锛夈俋琛ㄧず杈撳叆鍥惧儚锛汵琛ㄧず閲囨牱闂撮殧鐐癸紝濡傛灉X灏忎簬璇ユ暟鍊硷紝閭d箞Matlab灏嗕細瀵筙杩涜闆跺~鍏咃紝鍚﹀垯灏嗚繘琛屾埅鍙栵紝浣夸箣闀垮害涓篘锛汥IM琛ㄧず瑕佽繘琛岀鏁e倕绔嬪彾鍙樻崲銆侷FFT鍑芥暟鍜岀鏁e倕绔嬪彾鍙樻崲鍑芥暟FFT瀹屽叏鐩稿悓銆
  • matlab鍌閲鍙跺彉鎹㈡ユ眰!
    绛旓細绂绘暎鏃堕棿鍌呯珛鍙跺彉鎹細灏嗙鏁e嚱鏁板彉鎹负杩炵画棰戠巼鐨勫嚱鏁 绂绘暎鍌呯珛鍙跺彉鎹細灏嗘湁闄愰暱绂绘暎鍑芥暟鍙樻崲涓虹鏁i鐜囩偣涓婄殑鍑芥暟 鍏朵腑FFT鏄鏁e倕绔嬪彾鍙樻崲鐨勫揩閫熻绠楁柟娉曪紝閫傜敤浜庣鏁d俊鍙凤紝骞朵笖娉ㄦ剰鍙樻崲鍚庣殑鐐规暟涓庝俊鍙风殑閲囨牱鐐规暟涓鑷淬傚敖绠″彲浠ュ皢淇″彿琛0锛屼絾琛0涓嶈兘鎻愰珮棰戝煙鐨勫垎杈ㄧ巼銆matlab涓鎻愪緵浜鍑芥暟fft鍋氫竴缁鐨凢FT銆
  • MATLAB涓殑FFT鐨閲囨牱棰戠巼鍜岄噰鏍风偣鎬庢牱纭畾
    绛旓細x=IFFT(X);x=IFFT(X,N)鐢MATLAB杩涜璋卞垎鏋愭椂娉ㄦ剰锛氾紙1锛鍑芥暟FFT杩斿洖鍊肩殑鏁版嵁缁撴瀯鍏锋湁瀵圭О鎬с備緥锛歂=8;n=0:N-1;xn=[4 3 2 6 7 8 9 0];Xk=fft(xn)鈫 Xk = 39.0000 -10.7782 + 6.2929i 0 - 5.0000i 4.7782 - 7.7071i 5.0000 4.7782 + 7.7071i ...
  • 扩展阅读:matlab中fftshift函数 ... fftshift函数的用法matlab ... matlab fft2 ... plot函数matlab用法 ... matlab fft 振幅问题 ... matlab中fft补零 ... matlab中fft函数怎么运用 ... matlab中dft函数用法 ... matlab中fft变换 ...

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