Freqs.java

/*
 * $Id: Freqs.java,v 1.12 2008/03/15 00:23:44 koga Exp $
 * 
 * Copyright (C) 2004 Koga Laboratory. All rights reserved.
 */
package org.mklab.tool.signal;

import org.mklab.nfc.matrix.DoubleComplexMatrix;
import org.mklab.nfc.matrix.DoubleMatrix;
import org.mklab.nfc.scalar.DoubleComplexNumber;
import org.mklab.nfc.scalar.DoubleComplexPolynomial;


/**
 * アナログ(連続時間)フィルタの周波数応答を求めるクラスです。
 * 
 * <p> Analog filter frequency response
 * 
 * @author koga
 * @version $Revision: 1.12 $
 * @see org.mklab.tool.signal.Freqz
 */
public class Freqs {

  /**
   * 周波数<code>w</code>におけるアナログフィルタ <code>b(s)/a(s)</code> <pre><code> nb-1 nb-2 b(s) b(1)s + b(2)s + ... + b(nb) G(s) = ---- = -------------------------------- na-1 na-2 a(s) a(1)s + a(2)s + ... +
   * a(na) </code></pre>
   * 
   * の周波数応答<code>Gjw</code>を返します。
   * 
   * @param b 伝達関数の分子多項式の係数
   * @param a 伝達関数の分母多項式の係数
   * @param w 評価する周波数の列
   * @return 周波数応答 (frequency response)
   */
  public static DoubleComplexMatrix freqs(DoubleMatrix b, DoubleMatrix a, DoubleMatrix w) {
    DoubleComplexNumber j = new DoubleComplexNumber(0,1);
    DoubleComplexMatrix jw = new DoubleComplexMatrix(w).multiply(j);
    DoubleComplexMatrix Gjw = new DoubleComplexPolynomial(b).evaluate(jw).divideElementWise(new DoubleComplexPolynomial(a).evaluate(jw));
    return Gjw;
  }

}