c99 以降では複素数が使えるようになって、 FreeBSD-10 の clang, gcc のいずれも使えますので、 c の複素数を使ったサンプルプログラムを用意してみました。 複素数が使えない c90 以前の c に比べて、読み書きの労力が格段に減ります。
Zin(), Trans() ではケーブルの特性インピーダンスを純抵抗と仮定していますので、 高周波でないと使えません。 低い周波数領域で使う場合は、複素数に書き換えてください。
FFT の使いかたは フーリエ変換と線形システムの基礎などを見てください。
-- ケーブルの入力インピーダンス -- 負荷インピーダンス Zt で終端したケーブルの入力インピーダンスを求める COMPLEX Zin(COMPLEX Zt, double Z0, double Vr, double alpha, double len, doublef) Zin = ケーブルの入力インピーダンス (&Ohm;) Zt = ケーブルの終端インピーダンス (&Ohm;) Z0 = ケーブルの特性インピーダンス (&Ohm;) alpha = ケーブルの減衰定数 (neper/m) beta = ケーブルの位相定数 (rad/m) len = ケーブルの長さ (m) f = 周波数 (Hz) -- ケーブルのシステム関数 -- 信号源インピーダンス Zs、負荷インピーダンス Zr に接続したケーブルの出力電圧/入力電圧を求める COMPLEX Trans(COMPLEX Zs, COMPLEX Zr, double Z0, double Vr, double alpha, double len, double f) Trans = ケーブルのシステム関数 (出力電圧/入力電圧) Zr = ケーブルの終端インピーダンス (&Ohm;) Z0 = ケーブルの特性インピーダンス (&Ohm;) alpha = ケーブルの減衰定数 (neper/m) beta = ケーブルの位相定数 (rad/m) len = ケーブルの長さ (m) f = 周波数 (Hz) -- ケーブルの S パラメータを求める -- ケーブルの2次特性から S11 を求める COMPLEX S11(double Zs, double Z0, double Vr, double alpha, double len, double f) S11 = S-parameter Zs = VNA のシステムインピーダンス (&Ohm;) .. 通常 50.0 Z0 = ケーブルの特性インピーダンス (&Ohm;) Vr = ケーブルの速度係数 (0 < Vr <= 1.0) alpha = ケーブルの減衰定数 (neper/m) beta = ケーブルの位相定数 (rad/m) len = ケーブルの長さ (m) f = 周波数 (Hz) ケーブルの2次特性から S21 を求める COMPLEX S21(double Zs, double Z0, double Vr, double alpha, double len, double f) S21 = S-parameter Zs = VNA のシステムインピーダンス (&Ohm;) .. 通常 50.0 Z0 = ケーブルの特性インピーダンス (&Ohm;) Vr = ケーブルの速度係数 (0 < Vr <= 1.0) alpha = ケーブルの減衰定数 (neper/m) beta = ケーブルの位相定数 (rad/m) len = ケーブルの長さ (m) f = 周波数 (Hz) -- VNA で得られた S パラメータからケーブルの2次特性を求める ケーブルの特性インピーダンスを求める COMPLEX S2Z(COMPLEX S11, COMPLEX S21, double Zs) S2Z = ケーブルの特性インピーダンス S11 = S-parameter S21 = S-parameter Zs = VNA のシステムインピーダンス (&Ohm;) .. 通常 50.0 ケーブルの伝搬定数を求める COMPLEX S2G(COMPLEX S11, COMPLEX S21, double Zs) S2G = ケーブルの伝搬定数 S11 = S-parameter S21 = S-parameter Zs = VNA のシステムインピーダンス (&Ohm;) .. 通常 50.0 -- FFT --- void FFT(COMPLEX *z, int n, int inv) z[] = 時系列あるいは周波数データの配列です。 時系列データの虚部は 0、周波数データは複素数です。 n = データ数 (2^N, N= 0, 1, 2, 3, ...) inv = 0: フーリエ変換, 1: 逆フーリエ変換
平林浩一 2018-12