• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > 8/20浪涌測試波形時域轉頻域的解釋及仿真思路(基于Python)

    8/20浪涌測試波形時域轉頻域的解釋及仿真思路(基于Python)

    發布人:深圳比創達 時間:2025-06-18 來源:工程師 發布文章

    1.引言

    在電子工程和電磁兼容性(EMC)領域,8/20μs浪涌波形是一種標準的感應雷,常用于模擬雷電引起的瞬態過電流。這個波形因其陡峭的上升沿(8μs)和較長的下降沿(20μs)而得名,能夠很好地模擬雷電沖擊對電子設備的影響。今天,我將帶領大家一步步了解如何通過仿真分析8/20μs浪涌波形的時域特性,并將其轉換到頻域進行分析,揭示其頻率成分。2.時域分析

    2.1 8/20μs浪涌波形的定義

    8/20μs浪涌波形是一種典型的雙指數脈沖波形,其數學表達式可以表示為:

    數學表達式.png


    其中:

    spacer.gif33a49752ec254a4285e87a28db23726.png

    這個公式看起來有點復雜,但其實就是在兩個指數函數之間做差,從而得到一個脈沖波形。簡單來說,就是用一個快速下降的指數函數減去一個更慢下降的指數函數,形成一個快速上升、緩慢下降的脈沖。

    2.2仿真生成時域波形

    在代碼中,`generate_8_20_waveform`函數通過上述公式生成8/20μs浪涌波形。具體步驟如下:

    1.使用`np.linspace`生成時間數組`time`,表示仿真時間范圍。

    2.計算電流波形`current`,使用雙指數函數模擬上升沿和下降沿。

    3.對波形進行歸一化處理,確保峰值電流為4kA。

    生成的時域波形,展示了8/20μs浪涌波形的典型特性。

    3.頻域分析

    3.1時域到頻域的轉換

    為了分析8/20μs浪涌波形的頻率成分,需要將其從時域轉換到頻域。這一過程可以通過快速傅里葉變換(FFT)實現。FFT的基本原理是將時域信號分解為不同頻率成分的疊加,從而得到信號的頻譜。

    在代碼中,`analyze_frequency_domain`函數使用`scipy.fft.fft`計算信號的頻域表示。具體步驟如下:

    1.計算信號的FFT,得到復數頻譜。

    2.提取頻率數組`freq`和幅度譜`magnitude`。

    3.對幅度譜進行歸一化處理,使其單位為“kA/Hz”。

    3.2頻域波形的特性

    8/20μs浪涌波形的頻域特性可以通過其頻譜圖進行分析。由于該波形是一個瞬態脈沖,其頻譜通常呈現寬帶特性,包含從低頻到高頻的成分。

    在代碼中,頻域波形以對數-對數(log-log)尺度繪制。頻譜圖展示了信號在不同頻率下的幅度分布。通過頻譜圖可以觀察到:

    -信號在低頻段(如1MHz以下)具有較高的幅度。

    -隨著頻率的增加,幅度逐漸減小,但仍然包含高頻成分。

    3.3頻域分析的意義

    頻域分析對于理解8/20μs浪涌波形的特性具有重要意義:

    1.頻譜特性:頻域分析可以揭示信號在不同頻率下的能量分布,有助于設計濾波器或保護電路。

    2.電磁兼容性:通過頻域分析,可以評估信號對其他設備的干擾特性,從而優化電磁兼容性設計。

    3.實際應用:頻域特性可以用于驗證設備在不同頻率下的抗干擾能力。

    4.仿真思路總結

    4.1仿真流程

    1.時域波形生成:

    -使用雙指數函數生成8/20μs浪涌波形。

    -確保波形的峰值電流為4kA。

    2.頻域分析:

    -使用FFT將時域信號轉換為頻域信號。

    -計算頻率數組和幅度譜。

    3.結果可視化:

    -繪制時域波形圖,展示8/20μs浪涌波形的時域特性。

    -繪制頻域波形圖,展示信號的頻譜特性。

    4.2仿真結果分析

    通過仿真可以得到以下結論:

    -8/20μs浪涌波形在時域上表現為一個快速上升、緩慢下降的脈沖。

    -在頻域上,該波形呈現寬帶特性,包含從低頻到高頻的成分。

    -頻域分析可以為電磁兼容性設計和濾波器設計提供重要參考。

    5.結論

    通過對8/20μs浪涌波形的時域和頻域分析,可以全面理解其特性及其對電子設備的影響。時域分析揭示了波形的瞬態特性,而頻域分析則揭示了其頻率成分。這種分析方法對于設計抗干擾電路和優化電磁兼容性具有重要意義。

     

    通過本文的仿真思路和代碼實現,進一步探索8/20μs浪涌波形的特性,并將其應用于實際工程中。希望這篇文章能幫助大家更好地理解8/20μs浪涌波形的時域轉頻域分析,同時也希望大家在學習過程中能夠保持好奇心和探索精神,不斷進步!



    826bfb1fb3c1f460c09775b82b247d11.png



    附代碼:

    1. import numpy as np
    import matplotlib.pyplot as plt
    from scipy.fft import fft, fftfreq
    #import B-tron EMC

    # Set font to support English display
    plt.rcParams["font.family"] = ["DejaVu Sans", "Arial", "sans-serif"]
    plt.rcParams["axes.unicode_minus"] = False  # Ensure minus sign display


    def generate_8_20_waveform(duration=100e-6, samples=10000):
        """
        Generate 8/20μs standard lightning impulse current waveform

        Parameters:
            duration: Simulation duration (seconds)
            samples: Number of sampling points

        Returns:
            time: Time array (seconds)
            current: Current array (kA)
        """
        t = np.linspace(0, duration, samples)

        # 8/20μs waveform parameters
        tau1 = 8e-6  # Front time constant
        tau2 = 20e-6  # Tail time constant
        amplitude = 4  # Amplitude (kA)

        # Calculate current waveform (exponential decay model)
        current = amplitude * (np.exp(-t / tau2) - np.exp(-t / tau1))

        # Normalize to make peak value 4kA
        current = current / np.max(current) * amplitude

        return t, current


    def analyze_frequency_domain(time, signal, sampling_freq):
        """
        Perform frequency domain analysis

        Parameters:
            time: Time array (seconds)
            signal: Signal array
            sampling_freq: Sampling frequency (Hz)

        Returns:
            freq: Frequency array (Hz)
            magnitude: Amplitude spectrum
        """
        n = len(signal)
        yf = fft(signal)
        freq = fftfreq(n, 1 / sampling_freq)[:n // 2]
        magnitude = 2.0 / n * np.abs(yf[:n // 2])

        return freq, magnitude


    def plot_waveforms(time, current, freq, magnitude):
        """Plot time-domain and frequency-domain waveforms"""
        fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 10))

        # Time-domain waveform
        ax1.plot(time * 1e6, current)  # Convert time to μs
        ax1.set_title('8/20μs Lightning Impulse Current Waveform (Time Domain)')
        ax1.set_xlabel('Time (μs)')
        ax1.set_ylabel('Current (kA)')
        ax1.grid(True)

        # Mark peak value and time parameters
        peak_idx = np.argmax(current)
        t_peak = time[peak_idx] * 1e6
        ax1.annotate(f'Peak: {current[peak_idx]:.2f} kA\nTime: {t_peak:.2f} μs',
                     xy=(t_peak, current[peak_idx]),
                     xytext=(t_peak + 5, current[peak_idx] * 0.8),
                     arrowprops=dict(facecolor='black', shrink=0.05))

        # Frequency-domain waveform (log-log scale)
        ax2.loglog(freq, magnitude)
        ax2.set_title('Frequency Spectrum of 8/20μs Lightning Impulse Current')
        ax2.set_xlabel('Frequency (MHz)')
        ax2.set_ylabel('Magnitude (kA/Hz)')
        ax2.grid(True, which='both', linestyle='--', alpha=0.7)

        # Add spectral feature annotations
        freq_1MHz = np.interp(1e6, freq, magnitude)
        freq_10MHz = np.interp(1e7, freq, magnitude)



        ax2.annotate(f'1 MHz: {freq_1MHz:.2e} kA/Hz',
                     xy=(1e6, freq_1MHz),
                     xytext=(1e6 * 2, freq_1MHz * 3),
                     arrowprops=dict(facecolor='black', shrink=0.05))

        ax2.annotate(f'10 MHz: {freq_10MHz:.2e} kA/Hz',
                     xy=(1e7, freq_10MHz),
                     xytext=(1e7 * 2, freq_10MHz * 3),
                     arrowprops=dict(facecolor='black', shrink=0.05))

        plt.tight_layout()
        return fig


    def main():
        # Generate 8/20μs waveform
        time, current = generate_8_20_waveform(duration=100e-6, samples=10000)

        # Calculate sampling frequency
        sampling_freq = len(time) / (time[-1] - time[0])

        # Frequency domain analysis
        freq, magnitude = analyze_frequency_domain(time, current, sampling_freq)

        # Plot waveforms
        fig = plot_waveforms(time, current, freq, magnitude)

        # Display waveforms
        plt.show()

        # Print magnitude at key frequencies
        print("8/20μs Waveform Frequency Characteristics:__B-tron")


    if __name__ == "__main__":
        main()

     


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。


    關鍵詞: 浪涌

    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 汝州市| 东港市| 进贤县| 滨州市| 金堂县| 沙雅县| 东兴市| 新平| 新建县| 海阳市| 山丹县| 黄龙县| 日照市| 沁阳市| 河池市| 枣庄市| 蕉岭县| 余干县| 义马市| 广西| 贺兰县| 商水县| 佛冈县| 尤溪县| 两当县| 葵青区| 太保市| 肥西县| 乐平市| 晋江市| 大荔县| 满城县| 晴隆县| 宜君县| 南充市| 扶风县| 望奎县| 桂林市| 通河县| 株洲市| 义马市|