資訊中心(xīn)

聯係我們

深圳市維立(lì)信電子科技有限公(gōng)司
地址:深圳市(shì)福田區紅荔路第一世界廣場A座(zuò)8D-E
谘詢電(diàn)話(huà):0755-83766766
E-mail:info@jccn.com.cn

信號發生器自動化測試中如何模擬實際信號?

2025-10-13 11:01:11  點擊:

在信號發生器自動化(huà)測試中,模擬實際信號是驗證設(shè)備性能、發現潛在問題的(de)關鍵步驟。實際信號通常具有噪(zào)聲、非線性失真、動態變化等特性(xìng),因此需要從信號生成、環境模擬、硬件接口和測試驗證四(sì)個(gè)層麵進行綜合設計。以下是具體方法及實現(xiàn)示例:

一、信號生成:構建複雜測(cè)試(shì)信號

1. 基礎波形疊加

模擬(nǐ)實際(jì)信(xìn)號(hào)中常見的多頻分量,通過疊加不(bú)同頻(pín)率、幅度和(hé)相位的正弦波生成複雜信號。

  • 示例:生成(chéng)包含主頻和諧波的信號
    python
    import numpy as np

    def generate_complex_signal(freqs, amps, phases, sample_rate, duration):
    """生(shēng)成多頻(pín)疊加信號
       Args:
           freqs: 頻率列表(Hz)
           amps: 幅度列表
           phases: 相位列表(弧(hú)度)
           sample_rate: 采樣率(Hz)
           duration: 持續時間(秒)
       Returns:
           NumPy數組,包含(hán)疊加後的信號
       """
    t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
    signal = np.zeros_like(t)
    for freq, amp, phase in zip(freqs, amps, phases):
    signal += amp * np.sin(2 * np.pi * freq * t + phase)
    return signal

    # 示例:生成1kHz主頻+3kHz三次諧波的信號
    freqs = [1e3, 3e3]
    amps = [1.0, 0.3]  # 三次諧(xié)波(bō)幅度為基波的30%
    phases = [0, np.pi/4]
    signal = generate_complex_signal(freqs, amps, phases, sample_rate=10e3, duration=0.1)

2. 調製信號模擬

模擬通信中的調製(zhì)信號(如AM、FM、PM),驗證信號發生器對調製信號的響應(yīng)能(néng)力。

  • 示例:生成(chéng)幅度調(diào)製(AM)信號
    python
    def generate_am_signal(carrier_freq, mod_freq, mod_index, sample_rate, duration):
    """生成AM調製信號
       Args:
           carrier_freq: 載波頻率(Hz)
           mod_freq: 調製頻率(Hz)
           mod_index: 調製指數(0~1)
           sample_rate: 采樣(yàng)率(Hz)
           duration: 持續時間(jiān)(秒(miǎo))
       Returns:
           NumPy數(shù)組,包含AM信號
       """
    t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
    carrier = np.sin(2 * np.pi * carrier_freq * t)
    modulator = 1 + mod_index * np.sin(2 * np.pi * mod_freq * t)  # 調製信號(hào)
    return carrier * modulator

    # 示例:10kHz載波(bō),1kHz調製,調製指數0.5
    am_signal = generate_am_signal(10e3, 1e3, 0.5, sample_rate=100e3, duration=0.01)

3. 瞬態信號模擬(nǐ)

模擬實際中的突發信號(如脈衝、階躍變化),測試信號發生器的動態響應能(néng)力。

  • 示例:生成帶上升(shēng)/下降沿的脈衝信號
    python
    def generate_pulse_signal(rise_time, fall_time, pulse_width, sample_rate, duration):
    """生成帶上升(shēng)/下降沿的脈衝(chōng)信號
       Args:
           rise_time: 上升沿時間(秒)
           fall_time: 下降沿時間(秒)
           pulse_width: 脈衝寬度(秒)
           sample_rate: 采樣率(Hz)
           duration: 總(zǒng)持續時間(秒)
       Returns:
           NumPy數組,包含脈衝信號(0~1)
       """
    t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False)
    signal = np.zeros_like(t)
    # 上升沿(yán)(Sigmoid函數(shù)模擬)
    rise_mask = (t >= 0) & (t < rise_time)
    signal[rise_mask] = 1 / (1 + np.exp(-10 * (t[rise_mask] / rise_time - 0.5)))
    # 脈衝(chōng)平台
    plateau_mask = (t >= rise_time) & (t < rise_time + pulse_width)
    signal[plateau_mask] = 1
    # 下降沿
    fall_mask = (t >= rise_time + pulse_width) & (t < rise_time + pulse_width + fall_time)
    signal[fall_mask] = 1 / (1 + np.exp(10 * (t[fall_mask] - (rise_time + pulse_width)) / fall_time - 5))
    return signal

    # 示例:1ms上升沿,1ms下降(jiàng)沿(yán),5ms脈衝寬度
    pulse = generate_pulse_signal(1e-3, 1e-3, 5e-3, sample_rate=1e6, duration=0.02)

二、環境模擬:添加噪聲與失真

1. 添加高斯白噪聲

模擬實際電路中的熱噪聲或(huò)背景噪(zào)聲。

  • 示例(lì)
    python
    def add_gaussian_noise(signal, snr_db):
    """添加高斯白噪聲
       Args:
           signal: 原始信號(NumPy數組)
           snr_db: 信噪(zào)比(dB)
       Returns:
           帶噪聲的信號
       """
    signal_power = np.mean(signal**2)
    noise_power = signal_power / (10 ** (snr_db / 10))
    noise = np.random.normal(0, np.sqrt(noise_power), len(signal))
    return signal + noise

    # 示例:添加信噪比為20dB的噪聲
    noisy_signal = add_gaussian_noise(signal, snr_db=20)

2. 模擬非線性失真

通過(guò)多項式函數模擬放大器或傳輸通道的(de)非線性特性(如諧波失真、交叉調製)。

  • 示例
    python
    def add_nonlinear_distortion(signal, coeffs):
    """添加非線性失(shī)真
       Args:
           signal: 原始(shǐ)信號(NumPy數組)
           coeffs: 多項式係數列表(如[1.0, 0.1, 0.01]表示1*x + 0.1*x^2 + 0.01*x^3)
       Returns:
           失真後的信號
       """
    distorted = np.zeros_like(signal)
    for i, coeff in enumerate(coeffs):
    distorted += coeff * (signal ** (i + 1))  # i=0對應線性項,i=1對應二次項...
    return distorted

    # 示例:添加二次和三次諧波失真(係數0.1和(hé)0.01)
    distorted_signal = add_nonlinear_distortion(signal, coeffs=[1.0, 0.1, 0.01])

3. 模擬頻率(lǜ)響應失真(zhēn)

通(tōng)過濾波器模擬實際通道的頻率響應特性(如(rú)低通衰減、相位延遲)。

  • 示例
    python
    from scipy.signal import butter, lfilter

    def add_frequency_response(signal, cutoff, sample_rate, order=4):
    """添加低通濾波失真
       Args:
           signal: 原始信號
           cutoff: 截止頻率(Hz)
           sample_rate: 采樣率(Hz)
           order: 濾波器階數
       Returns:
           濾波後的信號
       """
    b, a = butter(order, cutoff / (0.5 * sample_rate), btype="low")
    return lfilter(b, a, signal)

    # 示例:模擬(nǐ)截止頻率為5kHz的低通濾波
    filtered_signal = add_frequency_response(signal, cutoff=5e3, sample_rate=10e3)

三、硬件接口模(mó)擬:DAC與反饋控(kòng)製

1. 模擬DAC輸出特性(xìng)

考慮DAC的分辨(biàn)率、量化噪聲和輸出範圍限製。

  • 示例
    python
    def simulate_dac(signal, bits=12, vref=5.0):
    """模擬DAC輸出
       Args:
           signal: 輸入(rù)信號(範圍(wéi):-1~1)
           bits: DAC位數
           vref: 參考電壓(yā)(V)
       Returns:
           量化(huà)後的(de)DAC輸出(chū)(V)
       """
    max_val = 2 ** bits - 1
    scaled = (signal + 1) / 2 * max_val  # 縮放到(dào)0~max_val
    quantized = np.round(scaled)  # 量化
    return (quantized / max_val * 2 - 1) * vref  # 還原為電壓值(範圍:-vref~vref)

    # 示(shì)例:12位DAC,5V參(cān)考電壓
    dac_output = simulate_dac(signal, bits=12, vref=5.0)

2. 反饋環(huán)路(lù)模擬

模擬實際係統中的(de)閉(bì)環控製(如自(zì)動增益控製AGC),驗(yàn)證(zhèng)信號發生器的(de)穩定性。

  • 示例
    python
    def simulate_agc(signal, target_level=0.5, attack_time=1e-3, release_time=10e-3, sample_rate=1e6):
    """模擬(nǐ)AGC反饋環路
       Args:
           signal: 輸(shū)入信(xìn)號
           target_level: 目標幅度(dù)(0~1)
           attack_time: 上升時間(jiān)常數(秒)
           release_time: 下降時間常數(shù)(秒)
           sample_rate: 采樣率(Hz)
       Returns:
           經過AGC調整的信號
       """
    gain = np.ones_like(signal)
    env = np.abs(signal)
    alpha_attack = 1 - np.exp(-1 / (attack_time * sample_rate))
    alpha_release = 1 - np.exp(-1 / (release_time * sample_rate))
    for i in range(1, len(signal)):
    if env[i] > env[i-1]:  # 上升沿(yán)
    gain[i] = gain[i-1] * (1 - alpha_attack) + alpha_attack * (target_level / env[i])
    else:  # 下降(jiàng)沿
    gain[i] = gain[i-1] * (1 - alpha_release) + alpha_release * (target_level / env[i])
    return signal * gain

    # 示例:AGC調整突發信號
    agc_output = simulate_agc(pulse, target_level=0.7, sample_rate=1e6)

四、測試驗證:自動化測試流程

1. 測試用例設計

設計覆蓋不同場景的測試用例,包括:

  • 基礎功能測試:單頻正弦波輸出精度。
  • 動態性能測試:頻(pín)率/幅度跳變(biàn)的過渡時間。
  • 噪聲與失真測試:信噪比(SNR)、總諧波失真(zhēn)(THD)。
  • 長期穩定性測試:連續運(yùn)行24小時的幅度/頻率漂移。

2. 自動化測試框架

使用pytest或(huò)unittest框架,結(jié)合硬(yìng)件(jiàn)接口庫(如PyVISA、PySerial)實現自動化測試。

  • 示例測試腳本
    python
    import pytest
    import numpy as np
    from signal_generator import SignalGenerator
    from hardware import DACDriver

    @pytest.fixture
    def signal_gen():
    return SignalGenerator(sample_rate=10e6)

    @pytest.fixture
    def dac():
    return DACDriver(device_path="/dev/ttyUSB0")

    def test_sine_wave_accuracy(signal_gen, dac):
    """測試(shì)正弦波輸出精度"""
    freq = 1e3
    amp = 1.0
    signal_gen.set_parameters(freq, amp, "sine")
    samples = signal_gen.generate(duration=0.01)
    dac.write(samples)  # 寫入DAC
    # 從ADC讀取實際(jì)輸出(需硬(yìng)件支持)
    adc_samples = dac.read_adc(num_samples=len(samples))
    # 計算誤差(例如均方根誤差RMSE)
    rmse = np.sqrt(np.mean((samples - adc_samples) ** 2))
    assert rmse < 0.01  # 允許誤差<1%

3. 結果分析與(yǔ)報告

生成(chéng)測試報告,包含時域波形圖、頻譜分(fèn)析圖和(hé)關鍵指標(如THD、SNR)。

  • 示例報告生成
    python
    import matplotlib.pyplot as plt

    def generate_report(signal, noisy_signal, distorted_signal, freq):
    """生成測試報告"""
    plt.figure(figsize=(12, 8))
    # 時域(yù)波形
    plt.subplot(2, 1, 1)
    plt.plot(signal, label="原始信號")
    plt.plot(noisy_signal, label="帶噪聲信號(hào)")
    plt.plot(distorted_signal, label="失真信號")
    plt.title("時域波形")
    plt.legend()
    # 頻譜分析
    plt.subplot(2, 1, 2)
    fft_original = np.fft.fft(signal)
    fft_noisy = np.fft.fft(noisy_signal)
    fft_distorted = np.fft.fft(distorted_signal)
    freqs = np.fft.fftfreq(len(signal), d=1/10e3)
    plt.plot(freqs[:len(freqs)//2], np.abs(fft_original[:len(freqs)//2]), label="原始(shǐ)頻譜")
    plt.plot(freqs[:len(freqs)//2], np.abs(fft_noisy[:len(freqs)//2]), label="噪聲頻譜")
    plt.plot(freqs[:len(freqs)//2], np.abs(fft_distorted[:len(freqs)//2]), label="失真(zhēn)頻譜")
    plt.xlim(0, freq * 5)  # 顯(xiǎn)示前(qián)5次諧波(bō)
    plt.title("頻譜分(fèn)析")
    plt.legend()
    plt.tight_layout()
    plt.savefig("test_report.png")

五、關鍵(jiàn)注意事項

  1. 信號同步:確保生成信號與硬件時鍾同步,避免采樣偏移。
  2. 資源限製:模擬高采樣率或長持(chí)續時間信號時,注意內存和計算資源。
  3. 硬件校準:定期校準DAC/ADC,消除係統誤差(chà)。
  4. 可重複(fù)性:固定隨機種子(zǐ)(如np.random.seed(42)),確保測試可複現。

總結

通過多頻疊加、調製信號、噪聲與失真模擬,結合硬件(jiàn)接口和自動化測試框架,可全麵驗證信(xìn)號發生器在(zài)實際場景中的性能。關鍵步驟包括:

  1. 信號生成:構建複雜測試信號(多頻、調製、瞬態)。
  2. 環(huán)境模擬:添加噪聲、非線性失真和頻率(lǜ)響應失真。
  3. 硬件接(jiē)口:模擬DAC輸出和反饋(kuì)控製。
  4. 自動化測試(shì):設計測試用例、執行自動化測(cè)試並生成報告。

這(zhè)種方法(fǎ)能夠高效發現信號發生(shēng)器(qì)的潛在問題,確保其在實(shí)際應用中的可靠(kào)性。


硬汉视频在线观看免费-硬汉视频最新版下载-硬汉视频app下载-硬汉视频官网在线观看下载