Main Content

パルスおよび遷移特性の測定

この例は、遷移やパルスの解析方法、立ち上がり時間、立ち下がり時間、スルー レート、オーバーシュート、アンダーシュート、パルス幅、デューティ比、パルス サイクルを含む計量の算出方法を示します。

ノイズを含むクロック信号

まず、ノイズを含むクロック信号のサンプルを表示します。

load clocksig clock1 time1 Fs

plot(time1,clock1)
xlabel('Time (seconds)')
ylabel('Voltage')

状態レベルの推定

statelevels を出力引数なしで使用し、状態レベルを可視化します。以下の手順により、ヒストグラム法を使用して状態レベルを推定します。

  1. データの最小および最大振幅を決定します。

  2. 指定したヒストグラムのビンの数について、ビン幅を決定します。これは、ビン数に対する振幅範囲の比です。ヒストグラムのビン数とヒストグラム範囲を指定するために、オプションの入力引数を使用します。

  3. データ値をヒストグラムのビンに振り分けます。

  4. カウントが非ゼロの最小および最大インデックスのヒストグラム ビンを特定します。

  5. ヒストグラムを 2 つのサブヒストグラムに分割します。

  6. 上位および下位ヒストグラムのモードまたは平均を決定して状態レベルを計算します。

statelevels(clock1)

ans = 1×2

    0.0138    5.1848

計算されたヒストグラムは、最初のビンと最後のビンの間で均等な 2 つの領域に分割されます。ヒストグラムの各領域のモードは、コマンド ウィンドウで推定される状態レベル値として返されます。

立ち上がり時間、立ち下がり時間およびスルーレートの測定

"立ち上がり時間" は、各パルスの立ち上がり遷移が下位から上位の基準レベルへ達する際の、瞬時と瞬時の間の時間です。"立ち下がり時間" は、各パルスの立ち下がり遷移が上位から下位の基準レベルへ達する際の、瞬時と瞬時の間の時間です。立ち上がり時間と立ち下がり時間計算の基準レベルは既定では、波形振幅の 10% と 90% に設定されています。

risetime を出力引数なしで使用し、立ち上がりエッジの立ち上がり時間を可視化します。次に、falltime を出力引数なしで使用し、立ち下がりエッジの立ち下がり時間を可視化します。基準レベルを [20 80]、状態レベルを [0 5] として指定します。

risetime(clock1,time1)

ans = 5×1
10-4 ×

    0.5919
    0.8344
    0.7185
    0.8970
    0.6366

falltime(clock1,time1,'PercentReferenceLevels',[20 80],'StateLevels',[0 5])

ans = 4×1
10-4 ×

    0.4294
    0.5727
    0.5032
    0.4762

1 つ以上の出力引数をもつ関数を呼び出して、プログラム的に測定値を取得します。等間隔サンプリング データでは、時間ベクトルの代わりにサンプル レートを提供できます。slewrate を使用して、各立ち上がりエッジと立ち下がりエッジの勾配を測定します。

sr = slewrate(clock1(1:100),Fs)
sr = 7.0840e+04

オーバーシュートとアンダーシュートの解析

大きなオーバーシュートとアンダーシュートのあるクロック データを表示します。

load clocksig clock2 time2 Fs

plot(time2,clock2)
xlabel('Time (seconds)')
ylabel('Voltage')

不足減衰クロック信号にはオーバーシュートがあります。オーバーシュートは状態レベルのパーセント差として表されます。オーバーシュートは、エッジの直後、遷移後逸脱領域の開始点で発生する可能性があります。関数 overshoot を使用して、これらのポストシュート オーバーシュートを測定します。

overshoot(clock2(95:270),Fs)
ans = 2×1

    4.9451
    2.5399

legend('Location','NorthEast')

オーバーシュートはエッジ直前に、遷移前の逸脱領域で発生することがあります。これらはプレシュート オーバーシュートと呼ばれます。

同様に、遷移前と遷移後の逸脱領域のアンダーシュートも測定できます。アンダーシュートも状態レベルのパーセント差として表されます。オプションの入力引数を使用して逸脱を測定する領域を指定します。

undershoot(clock2(95:270),Fs,'Region','Postshoot')
ans = 2×1

    3.8499
    4.9451

legend('Location','NorthEast')

パルス幅とデューティ比の測定

"幅" は、各パルスの最初と 2 番目の遷移における中央基準レベル クロッシング間の時間です。pulsewidth を出力引数なしで使用して、強調表示されたパルス幅をプロットします。正極性を指定します。

pulsewidth(clock2, time2,'Polarity','Positive');

dutycycle を使用してそれぞれの負極パルスのパルス期間に対するパルス幅の比率を計算します。

d = dutycycle(clock2,time2,'Polarity','negative')
d = 3×1

    0.4979
    0.5000
    0.5000

pulseperiod を使用して、波形の各サイクルの期間を取得します。"周期" は、現在のパルスの最初の遷移と次のパルスの最初の遷移の間の時間です。この情報を使用して、波形の平均周波数や観測された合計ジッター数などの他の計量を算出します。

pp = pulseperiod(clock2, time2);

avgFreq = 1./mean(pp)
avgFreq = 1.2500e+03
totalJitter = std(pp)
totalJitter = 1.9866e-06

参考

| | | | | | | |