亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ffts.pas

?? fft源代碼
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{ Unit FFTs

  This unit provides a forward and inverse FFT pascal implementation
  for complex number series.

  The formal definition of the complex DFT is:
    y[k] = sum(x[m]*exp(-i*2*pi*k*m/n), m = 0..n-1), k = 0..n-1

  Copyright: Nils Haeck M.Sc. (email: n.haeck@simdesign.nl)
  For more information visit http://www.simdesign.nl
  Original date of publication: 10 Mar 2003

  This unit requires these other units:
  - Complexs: Complex number unit
  - Types:    Additional mathematical variable types
  - SysUtils: Delphi system utilities

  ****************************************************************

  The contents of this file are subject to the Mozilla Public
  License Version 1.1 (the "License"); you may not use this file
  except in compliance with the License. You may obtain a copy of
  the License at:
  http://www.mozilla.org/MPL/

  Software distributed under the License is distributed on an
  "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  implied. See the License for the specific language governing
  rights and limitations under the License.
}
unit FFTs;

interface

uses
  Complexs, Types, SysUtils;

const

  cMaxPrimeFactor     = 1021;
  cMaxPrimeFactorDiv2 = (cMaxPrimeFactor + 1) div 2;
  cMaxFactorCount     = 20;

resourcestring

  sErrPrimeTooLarge = 'Prime factor for FFT length too large. Change value for cMaxPrimeFactor in FFTs unit';

{ ForwardFFT:
  Perform a complex FFT on the data in Source, put result in Dest. This routine
  works best for Count as a power of 2, but also works usually faster than DFT
  by factoring the series. Only in cases where Count is a prime number will this
  method be identical to regular complex DFT.

  The largest prime factor in Count should be less or equal to cMaxPrimeFactor.

  The remaining factors are handled by optimised partial FFT code, that can be
  found in the FFT_X procedures

  Inputs:
    Source: this can be any zero-based array type of TComplex
    Count: The number of elements in the array.

  Outputs:
    Dest: this can be any zero-based array type of TComplex, and will contain
      the FFT transformed data (frequency spectrum). Source may be equal to
      Dest. In this case, the original series will be overwritten with the new
      fourier-transformed series.
}
procedure ForwardFFT(const Source: array of TComplex; var Dest: array of TComplex; Count: integer);

{ Perform the inverse FFT on the Source data, and put result in Dest. This is based
  on the forward FFT with some additional customisation. The result of a forward
  FFT followed by an inverse FFT should yield the same data, except for rounding
  errors.
}
procedure InverseFFT(const Source: array of TComplex; var Dest: array of TComplex; Count: integer);

implementation

const
  // Some helper constants for the FFT optimisations
  c31: TFloat = -1.5000000000000E+00; //  cos(2*pi / 3) - 1;
  c32: TFloat =  8.6602540378444E-01; //  sin(2*pi / 3);

  u5:  TFloat =  1.2566370614359E+00; //  2*pi / 5;
  c51: TFloat = -1.2500000000000E+00; // (cos(u5) + cos(2*u5))/2 - 1;
  c52: TFloat =  5.5901699437495E-01; // (cos(u5) - cos(2*u5))/2;
  c53: TFloat = -9.5105651629515E-01; //- sin(u5);
  c54: TFloat = -1.5388417685876E+00; //-(sin(u5) + sin(2*u5));
  c55: TFloat =  3.6327126400268E-01; // (sin(u5) - sin(2*u5));
  c8:  TFloat =  7.0710678118655E-01; //  1 / sqrt(2);

type
  // Base 1 and Base 0 arrays
  TIdx0FactorArray = array[0..cMaxFactorCount] of integer;
  TIdx1FactorArray = array[1..cMaxFactorCount] of integer;

// Factorise the series with length Count into FactorCount factors, stored in Fact
procedure Factorize(Count: integer; var FactorCount: integer; var Fact: TIdx1FactorArray);
var
  i: integer;
  Factors: TIdx1FactorArray;
const
  // Define specific FFT lengths (radices) that we can process with optimised routines
  cRadixCount = 6;
  cRadices: array[1..6] of integer =
    (2, 3, 4, 5, 8, 10);
begin

  if Count = 1 then begin
    FactorCount := 1;
    Factors[1]  := 1;
  end else begin
    FactorCount := 0;
  end;

  // Factorise the original series length Count into known factors and rest value
  i := cRadixCount;
  while (Count > 1) AND (i > 0) do begin
    if Count mod cRadices[i] = 0 then begin
      Count := Count div cRadices[i];
      inc(FactorCount);
      Factors[FactorCount] := cRadices[i];
    end else
      dec(i);
  end;

  // substitute factors 2*8 with more optimal 4*4
  if Factors[FactorCount] = 2 then begin
    i := FactorCount - 1;
    while (i > 0) AND (Factors[i] <> 8) do
      dec(i);
    if i > 0 then begin
      Factors[FactorCount] := 4;
      Factors[i] := 4;
    end;
  end;

  // Analyse the rest value and see if it can be factored in primes
  if Count > 1 then begin
    for i := 2 to trunc(sqrt(Count)) do begin
      while Count mod i = 0 do begin
        Count := Count div i;
        inc(FactorCount);
        Factors[FactorCount] := i;
      end;
    end;

    if (Count > 1) then begin
      inc(FactorCount);
      Factors[FactorCount] := Count;
    end;
  end;

  // Reverse factors so that primes are first
  for i := 1 to FactorCount do
    Fact[i] := Factors[FactorCount - i + 1];

end;

{ Reorder the series in X to a permuted sequence in Y so that the later step can
  be done in place, and the final FFT result is in correct order.
  The series X and Y must be different series!
}
procedure ReorderSeries(Count: integer; var Factors: TIdx1FactorArray; var Remain: TIdx0FactorArray;
  const X: array of TComplex; var Y: array of TComplex);
var
  i, j, k: integer;
  Counts: TIdx1FactorArray;
begin
  FillChar(Counts, SizeOf(Counts), 0);

  k := 0;
  for i := 0 to Count - 2 do begin
    Y[i] := X[k];
    j := 1;
    k := k + Remain[j];
    Counts[1] := Counts[1] + 1;
    while Counts[j] >= Factors[j] do begin
      Counts[j] := 0;
      k := k - Remain[j - 1] + Remain[j + 1];
      inc(j);
      inc(Counts[j]);
    end;
  end;

  Y[Count - 1] := X[Count - 1];
end;

procedure FFT_2(var Z: array of TComplex);
var
  T1: TComplex;
begin
  T1   := ComplexAdd(Z[0], Z[1]);
  Z[1] := ComplexSub(Z[0], Z[1]);
  Z[0] := T1;
end;

procedure FFT_3(var Z: array of TComplex);
var
  T1, M1, M2, S1: TComplex;
begin
  T1   := ComplexAdd(Z[1], Z[2]);
  Z[0] := ComplexAdd(Z[0], T1);
  M1   := ComplexScl(c31, T1);
  M2.Re := c32 * (Z[1].Im - Z[2].Im);
  M2.Im := c32 * (Z[2].Re - Z[1].Re);
  S1   := ComplexAdd(Z[0], M1);
  Z[1] := ComplexAdd(S1, M2);
  Z[2] := ComplexSub(S1, M2);
end;

procedure FFT_4(var Z: array of TComplex);
var
  T1, T2, M2, M3: TComplex;
begin
  T1 := ComplexAdd(Z[0], Z[2]);
  T2 := ComplexAdd(Z[1], Z[3]);

  M2 := ComplexSub(Z[0], Z[2]);
  M3.Re := Z[1].Im - Z[3].Im;
  M3.Im := Z[3].Re - Z[1].Re;

  Z[0] := ComplexAdd(T1, T2);
  Z[2] := ComplexSub(T1, T2);
  Z[1] := ComplexAdd(M2, M3);
  Z[3] := ComplexSub(M2, M3);
end;

procedure FFT_5(var Z: array of TComplex);
var
  T1, T2, T3, T4, T5: TComplex;
  M1, M2, M3, M4, M5: TComplex;
  S1, S2, S3, S4, S5: TComplex;
begin
  T1 := ComplexAdd(Z[1], Z[4]);
  T2 := ComplexAdd(Z[2], Z[3]);
  T3 := ComplexSub(Z[1], Z[4]);
  T4 := ComplexSub(Z[3], Z[2]);

  T5   := ComplexAdd(T1, T2);
  Z[0] := ComplexAdd(Z[0], T5);
  M1   := ComplexScl(c51, T5);
  M2   := ComplexScl(c52, ComplexSub(T1, T2));

  M3.Re := -c53 * (T3.Im + T4.Im);
  M3.Im :=  c53 * (T3.Re + T4.Re);
  M4.Re := -c54 * T4.Im;
  M4.Im :=  c54 * T4.Re;
  M5.Re := -c55 * T3.Im;
  M5.Im :=  c55 * T3.Re;

  S3 := ComplexSub(M3, M4);
  S5 := ComplexAdd(M3, M5);;
  S1 := ComplexAdd(Z[0], M1);
  S2 := ComplexAdd(S1, M2);
  S4 := ComplexSub(S1, M2);

  Z[1] := ComplexAdd(S2, S3);
  Z[2] := ComplexAdd(S4, S5);
  Z[3] := ComplexSub(S4, S5);
  Z[4] := ComplexSub(S2, S3);
end;

procedure FFT_8(var Z: array of TComplex);
var
  A, B: array[0..3] of TComplex;
  Gem: TFloat;
begin
  A[0] := Z[0]; B[0] := Z[1];
  A[1] := Z[2]; B[1] := Z[3];
  A[2] := Z[4]; B[2] := Z[5];
  A[3] := Z[6]; B[3] := Z[7];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线观看欧美| 日韩一区二区精品葵司在线| 国产精品久久久久久久浪潮网站| 国产一区二区三区免费在线观看| 欧美一区二区视频观看视频| 视频一区欧美日韩| 日韩一区二区在线看| 精品一区免费av| 国产色产综合色产在线视频| 成年人国产精品| 一区二区三区国产豹纹内裤在线| 欧美日本一区二区| 九九精品一区二区| 国产精品久久看| 91福利视频久久久久| 三级精品在线观看| 久久久久久久综合| 色婷婷精品久久二区二区蜜臂av | 亚洲第一成人在线| 欧美一区午夜视频在线观看| 国产一区二区三区精品欧美日韩一区二区三区| 精品国产亚洲一区二区三区在线观看| 国产伦精品一区二区三区免费| 国产嫩草影院久久久久| 欧美性极品少妇| 麻豆精品在线观看| 国产精品高潮呻吟久久| 欧美性一区二区| 极品少妇一区二区| 一区在线中文字幕| 日韩精品一区二区在线观看| 成人一区二区三区视频在线观看| 日韩av在线免费观看不卡| 精品免费一区二区三区| 色狠狠桃花综合| 激情图区综合网| 亚洲精品第一国产综合野| 日韩精品一区二区三区四区| aaa欧美日韩| 久久国产欧美日韩精品| 亚洲免费大片在线观看| 日韩午夜av电影| 91美女片黄在线观看91美女| 久久国内精品视频| 亚洲小说欧美激情另类| 久久精品亚洲一区二区三区浴池 | 91猫先生在线| 国产尤物一区二区在线| 偷拍日韩校园综合在线| 国产日韩欧美不卡在线| 欧美老人xxxx18| 国产a级毛片一区| 免费在线视频一区| 亚洲成人动漫在线观看| 亚洲日本护士毛茸茸| 久久久久久久免费视频了| 欧美日本国产一区| 一本久久综合亚洲鲁鲁五月天 | 97久久精品人人做人人爽| 久久国产精品免费| 亚洲大型综合色站| 亚洲蜜臀av乱码久久精品| 中文字幕av免费专区久久| 欧美变态口味重另类| 欧美日韩一区二区三区在线看 | 色综合久久久久综合体桃花网| 国产一区二区视频在线| 久久国产婷婷国产香蕉| 婷婷成人激情在线网| 亚洲乱码国产乱码精品精可以看| 久久久久国产免费免费| 精品国偷自产国产一区| 欧美一级爆毛片| 日韩欧美精品在线| 欧美一级二级在线观看| 欧美一卡在线观看| 51精品国自产在线| 91精品国产综合久久小美女| 欧美精品在线一区二区三区| 欧美精品久久久久久久多人混战| 欧美午夜一区二区三区| 欧美无砖专区一中文字| 91黄色免费看| 91黄色免费版| 在线电影国产精品| 欧美妇女性影城| 欧美一级精品大片| 精品久久一区二区| 久久精品在线观看| 国产精品女上位| 亚洲丝袜美腿综合| 亚洲在线免费播放| 日日夜夜精品视频免费| 日韩极品在线观看| 久久99日本精品| 成人一级黄色片| 91蝌蚪porny成人天涯| 欧美日韩一区在线观看| 欧美一卡二卡在线| 欧美精品一区二区三区高清aⅴ| 久久久亚洲精华液精华液精华液| 国产亚洲成av人在线观看导航| 国产精品久久影院| 亚洲一区二区视频| 黄网站免费久久| 不卡的av网站| 911精品国产一区二区在线| 2014亚洲片线观看视频免费| 亚洲一区二区三区免费视频| 蜜臀av亚洲一区中文字幕| 狠狠狠色丁香婷婷综合久久五月| 成人动漫一区二区在线| 欧美亚洲国产一区二区三区va | 久久精品国产精品亚洲红杏| 国产乱码精品一区二区三区忘忧草 | 91麻豆精品国产91| 国产欧美一二三区| 亚洲成av人影院在线观看网| 国产乱码字幕精品高清av| 一本久久a久久精品亚洲| 欧美一级片在线观看| 国产精品国产精品国产专区不蜜| 亚洲6080在线| 波多野洁衣一区| 欧美一区二区在线视频| 国产精品成人免费精品自在线观看 | 亚洲免费资源在线播放| 免费人成精品欧美精品| 成人18精品视频| 精品剧情在线观看| 亚洲一区二区三区四区在线免费观看 | 一本一本久久a久久精品综合麻豆| 91麻豆精品国产91久久久久久久久 | 免费成人在线视频观看| 99综合影院在线| 精品欧美久久久| 午夜精品久久久久久久99樱桃| 成人深夜在线观看| 欧美一区二区视频网站| 亚洲精品老司机| 国产福利不卡视频| 日韩欧美国产系列| 天天综合日日夜夜精品| 99精品欧美一区二区三区综合在线| 911国产精品| 亚洲图片有声小说| 日本韩国欧美国产| 国产精品护士白丝一区av| 麻豆91在线播放免费| 欧美视频一区二区三区| 亚洲欧美日韩国产中文在线| 国产xxx精品视频大全| 欧美成人精品福利| 婷婷综合五月天| 91福利社在线观看| 亚洲精品老司机| 91亚洲资源网| 中文在线资源观看网站视频免费不卡 | 青青草视频一区| 欧美日韩成人在线一区| 一区二区三区在线观看欧美| 99久久久国产精品免费蜜臀| 欧美国产97人人爽人人喊| 国产精品资源在线看| 精品国产一区二区三区av性色| 免费成人在线视频观看| 欧美一级艳片视频免费观看| 日韩av二区在线播放| 91麻豆精品国产91久久久久久| 亚洲成人一区在线| 欧美视频精品在线观看| 激情av综合网| 久久久噜噜噜久久人人看 | 精品一区二区三区免费观看| 欧美不卡一二三| 久久99精品一区二区三区三区| 日韩欧美卡一卡二| 国产美女精品一区二区三区| 国产午夜一区二区三区| 成人美女视频在线观看18| 国产精品久久99| 在线免费精品视频| 亚洲国产成人tv| 91精品国产色综合久久ai换脸 | 日韩免费观看高清完整版| 久久精品久久久精品美女| 久久天堂av综合合色蜜桃网| 国产精品99久久久久久久女警| 久久久精品中文字幕麻豆发布| 丁香桃色午夜亚洲一区二区三区| 日本一区二区三区免费乱视频| 国产成人精品亚洲午夜麻豆| 中文字幕在线不卡一区二区三区| 色婷婷一区二区| 日本亚洲视频在线| 国产婷婷一区二区| 91香蕉视频黄| 首页国产丝袜综合| 国产视频一区二区三区在线观看| 99精品在线免费|