# Estimate SVD magnitude
# svLiEstNom_mag = FreqTrans.Sigma(I2 + LoEstNom)
svLoEstNom_mag = 1 / FreqTrans.Sigma(SoEstNom) # sigma(I + Lo) = 1 / sigma(So)
svLoEstNomMin_mag = np.min(svLoEstNom_mag, axis=0)

svLoEstUnc_mag = FreqTrans.Sigma(LoEstUnc) # Uncertain SVD magnitude
svLoEstUncMax_mag = np.max(svLoEstUnc_mag, axis=0) # Overly Conservative

cohLoEst_mag = LoEstCoh
cohLoEstMin = np.min(cohLoEst_mag, axis = (0, 1)) # Estimation Coherence


if True:
    fig = 1
    fig = FreqTrans.PlotSigma(freqLin_hz, svLoLinNomMin_mag, np.ones_like(freqLin_hz), svLoLinUncMax_mag, fig = fig, color = 'k', label = 'Linear')
    fig = FreqTrans.PlotSigma(freq_hz[0], svLoEstNomMin_mag, cohLoEstMin, svLoEstUncMax_mag, marker='.', color = 'b', fig = fig, label = 'Estimate (MIMO)')
    fig = FreqTrans.PlotSigma(freqLin_hz, (0.4) * np.ones_like(freqLin_hz), linestyle = '--', color = 'r', fig = fig, label = 'Critical Limit')
    
    ax = fig.get_axes()
    handles, labels = ax[0].get_legend_handles_labels()
    handles = [handles[0], handles[3], handles[1], handles[4], handles[2]]
    labels = [labels[0], labels[3], labels[1], labels[4], labels[2]]
    ax[0].legend(handles, labels)
    
    fig.suptitle('$L_o$ : ' + '$r_{Exc}$' + ' to ' + '$z$')


#%% Vector Margin Plots - Output Stability
vmLoLinNom_mag, vmLoLinUnc_mag, vmLoLinMin_mag = FreqTrans.VectorMargin(LoLinNom, LoLinUnc, typeUnc = 'circle')
vmLoEstNom_mag, vmLoEstUnc_mag, vmLoEstMin_mag = FreqTrans.VectorMargin(LoEstNom, LoEstUnc, typeUnc = 'circle')
コード例 #2
0
svLaEstNom_mag = 1 / FreqTrans.Sigma(SaEstNom)  # sv(I + La) = 1 / sv(Sa)
svLaEstNomMin_mag = np.min(svLaEstNom_mag, axis=0)

svLaEstUnc_mag = FreqTrans.Sigma(LaEstUnc)
svLaEstUncMax_mag = np.max(svLaEstUnc_mag, axis=0)
svLaEstLower_mag = svLaEstNomMin_mag - svLaEstUncMax_mag

LaEstCohMin = np.min(np.min(SaEstCoh, axis=0), axis=0)

if False:
    fig = 20
    # fig = FreqTrans.PlotSigma(freqLin_hz, svLaLinNom_mag, coher_nd = np.ones_like(freqLin_hz), fig = fig, color = 'k', label = 'Linear')
    # fig = FreqTrans.PlotSigma(freqLin_hz, svLaLinNomMin_mag, svUnc_mag = svLaEstUncMax_mag, coher_nd = np.ones_like(freqLin_hz), fig = fig, color = 'k', label = 'Linear')
    fig = FreqTrans.PlotSigma(freqLin_hz,
                              svLaLinNomMin_mag,
                              coher_nd=np.ones_like(freqLin_hz),
                              fig=fig,
                              color='k',
                              label='Linear')
    # fig = FreqTrans.PlotSigma(freq_hz, svLaEstNom_mag, coher_nd = LaEstCohMin, color = 'b', fig = fig, label = 'Estimation (MIMO)')
    fig = FreqTrans.PlotSigma(freq_hz[0],
                              svLaEstNomMin_mag,
                              svUnc_mag=svLaEstLower_mag,
                              coher_nd=LaEstCohMin,
                              color='b',
                              fig=fig,
                              label='Estimation with Uncertainty')
    # fig = FreqTrans.PlotSigma(freqLin_hz, 0.4 * np.ones_like(freqLin_hz), color = 'r', linestyle = '--', fig = fig, label = 'Critical Limit')
    ax = fig.get_axes()
    ax[0].set_xlim(0, 10)
    # ax[0].set_yscale('log')
    ax[0].set_ylim(0, 2)
コード例 #3
0
svTEstUncMax_mag = np.max(svTEstUnc_mag, axis=0) # Overly Conservative

cohTEst_mag = TEstCoh # Estimation Coherence
cohTEstMin = np.min(cohTEst_mag, axis = (0, 1))

# Sampled Systems
svTEstSamp_mag = np.zeros((numOut, nFreq, nSamp), dtype='float')
for iSamp in range(nSamp):
  svTEstSamp_mag[..., iSamp] = FreqTrans.Sigma(TEstSamp[..., iSamp])

svTEstSampMin_mag = np.min(svTEstSamp_mag, axis = 0)


if True:
    fig = 10
    fig = FreqTrans.PlotSigma(freqLin_hz, svTLinNomMin_mag, svUnc_mag = svTLinUncMax_mag, coher_nd = cohTLinMin, fig = fig, color = 'k', label = 'Linear')
    fig = FreqTrans.PlotSigma(freq_hz[0], svTEstNomMin_mag, svUnc_mag = svTEstUncMax_mag, coher_nd = cohTEstMin, marker='.', color = 'r', fig = fig, label = 'Estimate (MIMO)')

    for iSamp in range(nSamp):
      fig = FreqTrans.PlotSigma(freq_hz[0], svTEstSampMin_mag[..., iSamp], svUnc_mag = None, coher_nd = None, marker='.', color = 'gray', linestyle='None', fig = fig, label = 'Sampled (MIMO)')

    ax = fig.get_axes()
    handles, labels = ax[0].get_legend_handles_labels()
    handles = [handles[0], handles[2], handles[1], handles[3]]
    labels = [labels[0], labels[2], labels[1], labels[3]]
    ax[0].legend(handles, labels)


#%% Vector Margin Plots
vmTLinNom_mag, vmTLinUnc_mag, vmTLinMin_mag = FreqTrans.VectorMargin(TLinNom, TLinUnc, typeUnc = 'circle')
vmTEstNom_mag, vmTEstUnc_mag, vmTEstMin_mag = FreqTrans.VectorMargin(TEstNom, TEstUnc, typeUnc = 'circle')
コード例 #4
0
                                   20 * np.log10(P_N_mag))
        fig.suptitle(oDataSegs[iSeg]['Desc'] + ': Spectrogram Null - ' +
                     sigFbList[iSgnlOut])

#%% Sigma Plot
fig = None
for iSeg in range(0, len(oDataSegs)):
    Cmin = np.min(np.min(C[iSeg], axis=0), axis=0)
    sNomMin = np.min(sNom[iSeg], axis=0)
    sCritMin = np.min(sUnc[iSeg], axis=0)
    sNomMinErr = sNomMin - sCritMin

    fig = FreqTrans.PlotSigma(freq_hz[0],
                              sNomMin,
                              err=sNomMinErr,
                              coher_nd=Cmin,
                              fig=fig,
                              fmt=rtsmSegList[iSeg]['fmt'] + '*-',
                              label=oDataSegs[iSeg]['Desc'])

fig = FreqTrans.PlotSigma(freq_hz[0],
                          0.4 * np.ones_like(freq_hz[0]),
                          fmt='--r',
                          fig=fig)

ax = fig.get_axes()
ax[0].set_xlim(0, 10)
ax[0].set_ylim(0, 1)

#%% Disk Margin Plots
inPlot = sigExcList  # Elements of sigExcList
コード例 #5
0
gain_mag, phase_deg = FreqTrans.GainPhase(T,
                                          magUnit='mag',
                                          phaseUnit='deg',
                                          unwrap=True)
rCritNom_mag, _, _ = FreqTrans.DistCrit(T, typeUnc='ellipse')
#rCritNom_mag, rCritUnc_mag, rCrit_mag = FreqTrans.DistCrit(T, TUnc, typeUnc = 'ellipse')
#rCritNom_mag, rCritUnc_mag, rCrit_mag, pCont_mag = FreqTrans.DistCritEllipse(T, TUnc) # Returns closest approach points

#%% Sigma Plot
Cmin = np.min(np.min(C, axis=0), axis=0)
sigmaNom_magMin = np.min(sigmaNom_mag, axis=0)

fig = 20
fig = FreqTrans.PlotSigma(freqLin_hz,
                          sigmaLin_mag,
                          coher_nd=np.ones_like(freqLin_hz),
                          fig=fig,
                          fmt='k',
                          label='Linear')
fig = FreqTrans.PlotSigma(freq_hz,
                          sigmaNom_mag,
                          coher_nd=Cmin,
                          fmt='bo',
                          fig=fig,
                          label='Excitation Nominal')
fig = FreqTrans.PlotSigma(freq_hz[0],
                          0.4 * np.ones_like(freq_hz[0]),
                          fmt='--r',
                          fig=fig,
                          label='Critical Limit')
ax = fig.get_axes()
ax[0].set_xlim(0, 10)
コード例 #6
0
        cohLaEst = LaEstCohList[iSeg]
        # cohLaEstMin = np.min(cohLaEst, axis = (0,1))
        cohLaEstMin = np.mean(cohLaEst, axis=(0, 1))

        svNom = svLaEstNomList[iSeg]
        svNomMin = np.min(svNom, axis=0)
        svUnc = svLaEstUncList[iSeg]
        svUncMax = np.max(svUnc, axis=0)

        svUncLower = svNomMin - svUncMax
        svUncLower[svUncLower < 0] = svNomMin[svUncLower < 0]

        fig = FreqTrans.PlotSigma(freq_hz[0],
                                  svNomMin,
                                  svUnc_mag=svUncLower,
                                  coher_nd=cohLaEstMin,
                                  fig=fig,
                                  color=rtsmSegList[iSeg]['color'],
                                  linestyle='-',
                                  label=oDataSegs[iSeg]['Desc'])

    fig = FreqTrans.PlotSigma(freq_hz[0],
                              0.4 * np.ones_like(freq_hz[0]),
                              color='r',
                              linestyle='--',
                              fig=fig)

    ax = fig.get_axes()
    ax[0].set_xlim(0, 10)
    ax[0].set_ylim(0, 1)

#%% Vector Margin Plots
コード例 #7
0
    # rCritLiEstNom_mag, _, _ = FreqTrans.DistCrit(LiEstNomList[iSeg], typeUnc = 'ellipse')
    rCritLiEstNom_mag, _, _ = FreqTrans.DistCritCirc(LiEstNomList[iSeg])

    rCritLiEstNomList_mag.append(rCritLiEstNom_mag)

#%% Sigma Plot
fig = None
for iSeg in range(0, len(oDataSegs)):
    Cmin = np.min(np.min(LiEstCohList[iSeg], axis=0), axis=0)
    sNomMin = np.min(svLiEstNomList[iSeg], axis=0)

    fig = FreqTrans.PlotSigma(freq_hz[0],
                              svLiEstNomList[iSeg],
                              coher_nd=Cmin,
                              fig=fig,
                              color=rtsmSegList[iSeg]['color'],
                              linestyle='-',
                              label=oDataSegs[iSeg]['Desc'])

fig = FreqTrans.PlotSigma(freq_hz[0],
                          0.4 * np.ones_like(freq_hz[0]),
                          color='r',
                          linestyle='--',
                          fig=fig)

ax = fig.get_axes()
ax[0].set_xlim(0, 10)
# ax[0].set_ylim(0, 1)

#%% Disk Margin Plots