博客專欄

        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()

         


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


        關鍵詞: 浪涌

        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 博爱县| 泾川县| 永丰县| 台东市| 高阳县| 鹤峰县| 永昌县| 资阳市| 石楼县| 嘉兴市| 随州市| 北流市| 石棉县| 自治县| 札达县| 弥勒县| 黄大仙区| 同仁县| 安岳县| 竹山县| 松溪县| 伊金霍洛旗| 建宁县| 米泉市| 成都市| 黑河市| 江安县| 涡阳县| 开远市| 蚌埠市| 乐至县| 平定县| 遂平县| 泰宁县| 老河口市| 吐鲁番市| 巴里| 叶城县| 洪洞县| 高要市| 韶关市|