陳鍾誠

Version 1.0

轉換領域法 Transform Domain

基礎

傅立葉轉換

離散傅立葉轉換 (慢速)

var Complex = require('./complex')
var p = Complex.parse

var DFT = function (f) {
  let N = f.length
  let F = []
  for (let n=0; n<N; n++) F[n] = Complex.parse('0+0i')
  for (let x=0; x<N; x++) {
    for (let n=0; n<N; n++) {
      let exp = Complex.expi((-2.0*Math.PI*x)/N*n)
      let fexp = f[x].mul(exp)
      F[n] = F[n].add(fexp)
    }
  }
  return F
}

var iDFT = function (F) {
  let N = F.length
  let f = []
  for (let x=0; x<N; x++) f[x] = Complex.parse('0+0i')
  for (let n=0; n<N; n++) {
    for (let x=0; x<N; x++) {
      let exp = Complex.expi((2.0*Math.PI*x)/N*n)
      let Fexp = F[n].mul(exp)
      Fexp.r /= N; Fexp.i /= N;
      f[x] = f[x].add(Fexp)
    }
  }
  return f
}

var steps = function(from, to, step = 1) {
	var a=[];
	for (var t=from; t<=to; t+=step)
		a.push(t);
	return a;
}

var x = steps(0, 10*Math.PI, Math.PI/8)
var f = x.map(Complex.expi)

console.log('f=%s', f)
F = DFT(f)
console.log('F=DFT(f)=%s', F)
f2 = iDFT(F)
console.log('f2=iDFT(F)=%s', f2)

執行結果

PS D:\ccc\course\se\algorithm\12-transformDomain\Fourier> node DFT
f=1.00+0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00+0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,-0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00+0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,-0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00-0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00+0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,-0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00-0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00+0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00+0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,-0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00-0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00+0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,-0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00-0.00i
F=DFT(f)=1.00-0.00i,1.24+0.05i,1.64+0.13i,2.42+0.28i,4.68+0.73i,78.97+15.51i,-5.22-1.24i,-2.50-0.70i,-1.63-0.52i,-1.21-0.44i,-0.95-0.39i,-0.78-0.35i,-0.66-0.33i,-0.56-0.31i,-0.49-0.30i,-0.43-0.29i,-0.39-0.28i,-0.35-0.27i,-0.31-0.26i,-0.28-0.25i,-0.25-0.25i,-0.23-0.24i,-0.21-0.24i,-0.19-0.24i,-0.17-0.23i,-0.16-0.23i,-0.14-0.23i,-0.13-0.22i,-0.12-0.22i,-0.11-0.22i,-0.09-0.22i,-0.08-0.22i,-0.07-0.21i,-0.06-0.21i,-0.05-0.21i,-0.05-0.21i,-0.04-0.21i,-0.03-0.20i,-0.02-0.20i,-0.01-0.20i,-0.00-0.20i,0.00-0.20i,0.01-0.20i,0.02-0.20i,0.03-0.19i,0.03-0.19i,0.04-0.19i,0.05-0.19i,0.06-0.19i,0.06-0.19i,0.07-0.18i,0.08-0.18i,0.09-0.18i,0.09-0.18i,0.10-0.18i,0.11-0.18i,0.12-0.18i,0.13-0.17i,0.14-0.17i,0.15-0.17i,0.16-0.17i,0.17-0.17i,0.18-0.16i,0.19-0.16i,0.20-0.16i,0.22-0.16i,0.23-0.15i,0.25-0.15i,0.26-0.15i,0.28-0.14i,0.30-0.14i,0.33-0.13i,0.35-0.13i,0.38-0.12i,0.42-0.12i,0.46-0.11i,0.50-0.10i,0.56-0.09i,0.63-0.07i,0.72-0.06i,0.84-0.03if2=iDFT(F)=1.00-0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00-0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,-0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00+0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,-0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00-0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,-0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00+0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,-0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00-0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00+0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00-0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,-0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00-0.00i,0.92+0.38i,0.71+0.71i,0.38+0.92i,0.00+1.00i,-0.38+0.92i,-0.71+0.71i,-0.92+0.38i,-1.00+0.00i,-0.92-0.38i,-0.71-0.71i,-0.38-0.92i,-0.00-1.00i,0.38-0.92i,0.71-0.71i,0.92-0.38i,1.00-0.00i

快速傅立葉轉換 (上一個方法的快速版)

拉普拉斯轉換

拉普拉斯轉換常被用在工程數學中《求解微分方程》。

其他轉換