« 高周波・RFニュース 2024年11月4日 IEEE Antennas and Propagation Magazineでアンテナ技術の進化とアレイのレビュー、EMC EuropeでAIをDe-embeddingに応用、I-PEXがシールド付き細線同軸コネクタ発表、iPhone 17からApple製Wi-Fiチップ?Huaweiの5G-Aᴬ | トップページ | 映画「八犬伝」を観てきた。物語の八犬伝と、それを書いた馬琴と北斎との交流が突然切り替わる面白い構成。切り替わるたびに話が進むので馬琴たちが老いていくのも。昔NHKの人形劇で観てたので玉が懐かしかった。しかし板垣李光人くんどう見ても女性にしか見えない… »

2024年11月 5日 (火)

Pythonでマイクロストリップパッチアンテナの設計ツールを作る(5) これまでをまとめてクラス化・モジュール化した。パッチサイズ、入力インピーダンス、指向性、効率、利得が計算できる。使い方まとめ。

これまでやってきたことを全部まとめてクラス化した。コードは後で説明するとして、まずは使い方から。

Antclass2

クラス名はPatchAntennaで、それをpatchantenna.pyというファイルに記載している。なのでまずそのファイルをパスの通ったところにいれて

import patchantenna as pa

とでもしてインポートする。

①初期化

初期化は

    """
    矩形マイクロストリップパッチアンテナ設計クラス

    Parameters
    ----------
    er : 基板の比誘電率
    h  : 基板の厚み[mm]
    f0 : 共振周波数[GHz]
    tanD : 基板誘電体のtanδ
         (省略すると0.01)
    sigma : パッチ導体の導電率[S/m]
          (省略すると5.8E7)
    """
    def __init__(self, er, h, f0, tanD = 0.01, sigma = 5.8E7):
のようになっているので、

ant = pa.PatchAntenna(2.2, 1.588, 10)

のようにインスタンス化する。ここでtanδとσを省略するとデフォルト値が入る。

この時同時にパッチ幅W、パッチ長さLが設計されて内部に保持される。

②パッチ寸法読み・書き

propertyのwidthとlengthを使う。設計値以外のものを使う場合は代入も可能。

読み取り:
ant.width
11.85033740616217
ant.length
9.053429316199928
書き込み:
ant.width = 12
ant.length = 10
③入力インピーダンス
以下のようにする。
ant.input_impedance()
228.3957073596198
ant.input_impedance(3.12)
50.2343608577977
ここで引数はオフセットを表す。省略すると0。
メソッドの説明は以下の通り。
    def input_impedance(self, offset = 0):
        """
        矩形マイクロストリップパッチアンテナの入力インピーダンスを計算する。

        Parameters
        ----------
        offset : パッチ端からの給電位置[mm]

        Returns
        -------
        入力インピーダンス[Ω]
        """
④指向性
以下のようにする。
ant.directivity()
7.354142436865478
メソッドの説明は以下の通り。
    def directivity(self):
        """
        矩形マイクロストリップパッチアンテナの指向性(Directivity)を計算する。

        Returns
        -------
        指向性[dB]
        """
⑤効率
以前出したものは%で出力したが今回からdBにした。
ant.efficiency()
-0.6529214284080533
    def efficiency(self):
        """
        矩形マイクロストリップパッチアンテナの効率(efficiency)を計算する。
       
        Returns
        -------
        アンテナ効率[dB]
        """
⑥アンテナ利得(ゲイン)
指向性と効率の和になる。
ant.gain()
6.701221008457425
    def gain(self):
        """
        矩形マイクロストリップパッチアンテナのアンテナ利得(Gain)を計算する。

        Returns
        -------
        アンテナ利得[dB]

        """
⑦寸法パラメータの説明
実はこれが一番気に入っている。ただ環境、フォントによっては崩れるかも…
ant.draw()
Antclass
これを作ったのはまたAI・機械学習の例題にするため。それはまた後日。
ではそのファイルと、ソースコードを示す。

ダウンロード - patchantenna.py


import numpy as np
from scipy.integrate import quad
from scipy.special import sici, j0
from scipy.integrate import dblquad

class PatchAntenna:
    """
    矩形マイクロストリップパッチアンテナ設計クラス

    Parameters
    ----------
    er : 基板の比誘電率
    h  : 基板の厚み[mm]
    f0 : 共振周波数[GHz]
    tanD : 基板誘電体のtanδ
         (省略すると0.01)
    sigma : パッチ導体の導電率[S/m]
          (省略すると5.8E7)
    """
    def __init__(self, er, h, f0, tanD = 0.01, sigma = 5.8E7):
        self.er = er
        self.h = h * 1.0E-3
        self.f0 = f0 * 1.0E9
        self.u0 = 4.0 * np.pi * 1.E-7
        self.e0 = 8.85418782E-12
        self.tanD = tanD
        self.sigma = sigma
        self.lambda0 = 1 /(self.f0 * np.sqrt(self.e0 * self.u0))

        #パッチ幅
        self.W = (1.0 / (2 * self.f0 * np.sqrt(self.e0 * self.u0))) * np.sqrt(2.0 / (self.er + 1.0))
        #有効比誘電率ereff
        self.ereff = (self.er + 1.0) / 2.0 + ((self.er - 1.0) / 2.0) / np.sqrt(1.0 + 12.0 * self.h / self.W)

        #フリンジングΔL
        self.dL = self.h * 0.412 * (self.ereff + 0.3) * (self.W / self.h + 0.264) / ((self.ereff - 0.258) * (self.W / self.h + 0.8))

        #基板内波長
        self.wave_length = 1 /(self.f0 * np.sqrt(self.ereff * self.e0 * self.u0))
   
        #パッチ長さ
        self.L = self.wave_length / 2 - 2 * self.dL

    @property
    def width(self):
        """
        パッチ幅を読み書きするプロパティ
        """
        return self.W * 1000
   
    @width.setter
    def width(self, W):  
        self.W = W * 1.0E-3

    @property
    def length(self):    
        """
        パッチ長さを読み書きするプロパティ
        """
        return self.L * 1000
   
    @length.setter
    def length(self, L):
        self.L = L * 1.0E-3

    def input_impedance(self, offset = 0):
        """
        矩形マイクロストリップパッチアンテナの入力インピーダンスを計算する。

        Parameters
        ----------
        offset : パッチ端からの給電位置[mm]

        Returns
        -------
        入力インピーダンス[Ω]
        """
        k0=2.0 * np.pi / self.lambda0
        X = k0 * self.W
        siX, _ = sici(X)
        I1 = -2 + np.cos(X) +  X * siX + np.sin(X)/X
        G1 = I1 / (120 * np.pi**2)
        def f(t, X, Y):
            return ((np.sin(X*np.cos(t) / 2.0) / np.cos(t))**2) * j0(Y * np.sin(t)) * np.sin(t)**3
        I2, _ = quad(f, 0, np.pi, args = (X, k0*self.L))
        G12 = I2 / (120* np.pi **2)
        Rin = 1 / (2 * (G1 + G12))
        return Rin * np.cos(np.pi * offset * 1.0E-3 / self.L) ** 2
   
    def directivity(self):
        """
        矩形マイクロストリップパッチアンテナの指向性(Directivity)を計算する。

        Returns
        -------
        指向性[dB]
        """
        k0 = 2.0 * np.pi / self.lambda0
        X = k0 * self.W
        def f(theta, phi, X, Y):
            return (np.sin(X*np.cos(theta)/2) / np.cos(theta)) **2 * (np.sin(theta) **3) * (np.cos(Y*np.sin(theta)*np.sin(phi)/2)) ** 2
        I2, _ = dblquad(f, 0, np.pi, 0, np.pi, args=(X, k0 * self.wave_length /2))
        self.D2 = (2* np.pi * self.W / self.lambda0) **2 * (np.pi / I2)
   
        return 10 * np.log10(self.D2)
   
    def efficiency(self):
        """
        矩形マイクロストリップパッチアンテナの効率(efficiency)を計算する。
       
        Returns
        -------
        アンテナ効率[dB]
        """
        #放射Qの近似式
        if self.er > 2:
            self.Qr = 3 * self.er * self.lambda0 / (8 * self.h)
        else:
            self.Qr = (np.pi * np.pi * np.sqrt(self.er) / (4 * np.pi * np.pi - 16 * np.sqrt(self.er))) * (self.lambda0 / self.h)

        #導体Q
        ds = np.sqrt(2 / (2 * np.pi * self.f0 * self.u0 * self.sigma))
        self.Qc = self.h / ds
   
        #誘電体Q
        self.Qd = 1 / self.tanD

        #無負荷Q
        self.Qt = 1 / (1 / self.Qc + 1 / self.Qd + 1 / self.Qr)

        self.eta = self.Qt / self.Qr
   
        return 10 * np.log10(self.eta)
   
    def gain(self):
        """
        矩形マイクロストリップパッチアンテナのアンテナ利得(Gain)を計算する。

        Returns
        -------
        アンテナ利得[dB]

        """
        D2 = self.directivity()
        eta = self.efficiency()

        return D2 + eta
   
    def draw(self):
        """
        矩形マイクロストリップアンテナの寸法説明
        """
        print("        ←------ W --------→ ")
        print("    ↑ ┌────────────────────┐")
        print("    | │              │")
        print("    | │              │")
        print("      │              │")
        print("    L │              │")
        print("      │              │")
        print("    | │       〇      │")
        print("    | │             |             │")
        print("    | │             | offset     │")
        print("    ↓ └────────────────────┘")
        print("                 Thickness: h")

 

 

« 高周波・RFニュース 2024年11月4日 IEEE Antennas and Propagation Magazineでアンテナ技術の進化とアレイのレビュー、EMC EuropeでAIをDe-embeddingに応用、I-PEXがシールド付き細線同軸コネクタ発表、iPhone 17からApple製Wi-Fiチップ?Huaweiの5G-Aᴬ | トップページ | 映画「八犬伝」を観てきた。物語の八犬伝と、それを書いた馬琴と北斎との交流が突然切り替わる面白い構成。切り替わるたびに話が進むので馬琴たちが老いていくのも。昔NHKの人形劇で観てたので玉が懐かしかった。しかし板垣李光人くんどう見ても女性にしか見えない… »

パソコン・インターネット」カテゴリの記事

学問・資格」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« 高周波・RFニュース 2024年11月4日 IEEE Antennas and Propagation Magazineでアンテナ技術の進化とアレイのレビュー、EMC EuropeでAIをDe-embeddingに応用、I-PEXがシールド付き細線同軸コネクタ発表、iPhone 17からApple製Wi-Fiチップ?Huaweiの5G-Aᴬ | トップページ | 映画「八犬伝」を観てきた。物語の八犬伝と、それを書いた馬琴と北斎との交流が突然切り替わる面白い構成。切り替わるたびに話が進むので馬琴たちが老いていくのも。昔NHKの人形劇で観てたので玉が懐かしかった。しかし板垣李光人くんどう見ても女性にしか見えない… »

最近の記事

最近のコメント

2024年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
フォト
無料ブログはココログ