fig = FreqTrans.PlotNyquist(ToEstNom[iOut, iIn, sigIndx[iIn]], ToEstUncMag[iOut, iIn, sigIndx[iIn]], fig = fig, fillType = 'circle', marker='.', color = 'g', linestyle='None', label = 'Estimate (SIMO)')
        fig = FreqTrans.PlotNyquist(np.array([-1+0j]), np.array([0.4]), fig = fig, fillType = 'circle', marker='+', color = 'r', linestyle='None')

        ax = fig.get_axes()
#        handles, labels = ax[0].get_legend_handles_labels()
#        handles = [handles[0], handles[3], handles[1], handles[4], handles[2], handles[5]]
#        labels = [labels[0], labels[3], labels[1], labels[4], labels[2], labels[5]]
#        ax[0].legend(handles, labels)
    
        fig.suptitle('$T_o$ : ' + '$r_{Exc}$[' + str(iIn) + '] to ' + '$z$[' + str(iOut) + ']')


#%% Bode Plot - Output Complimentary Sensitivity Function
# Linear Model Gain and Phase
gainToLinNom_mag, phaseToLinNom_deg = FreqTrans.GainPhase(ToLinNom, magUnit = 'mag', phaseUnit = 'deg', unwrap = True)
gainToLinUnc_mag = FreqTrans.Gain(ToLinUnc, magUnit = 'mag')
cohToLin_mag = np.ones_like(ToLinUnc)

# Estimated
gainToEstNom_mag, phaseToEstNom_deg = FreqTrans.GainPhase(ToEstNom, magUnit = 'mag', phaseUnit = 'deg', unwrap = True)
gainToEstUnc_mag = FreqTrans.Gain(ToEstUnc, magUnit = 'mag') # Estimation Uncertain Response
cohToEst_mag = ToEstCoh # Estimation Coherence
cohToEstMin = np.min(cohToEst_mag, axis = (0, 1))


if False:
    for iPlot, [iOut, iIn] in enumerate(ioArray):
        fig = 20 + iPlot
        fig = FreqTrans.PlotBode(freqLin_hz, gainToLinNom_mag[iOut, iIn], phaseToLinNom_deg[iOut, iIn], coher_nd = cohToLin_mag[iOut, iIn], gainUnc_mag = gainToLinUnc_mag[iOut, iIn], fig = fig, dB = True, color='k', label='Linear Model')
        fig = FreqTrans.PlotBode(freq_hz[iIn], gainToEstNom_mag[iOut, iIn], phaseToEstNom_deg[iOut, iIn], coher_nd = cohToEst_mag[iOut, iIn], gainUnc_mag = gainToEstUnc_mag[iOut, iIn], fig = fig, dB = True, color='b', label='Estimate [MIMO]')
        fig = FreqTrans.PlotBode(freq_hz[iIn, sigIndx[iIn]], gainToEstNom_mag[iOut, iIn, sigIndx[iIn]], phaseToEstNom_deg[iOut, iIn, sigIndx[iIn]], coher_nd = cohToEst_mag[iOut, iIn, sigIndx[iIn]], gainUnc_mag = gainToEstUnc_mag[iOut, iIn, sigIndx[iIn]], fig = fig, dB = True, color='g', label='Estimate [SIMO]')
                                    fig=fig,
                                    color='r',
                                    linestyle=':',
                                    label='Critical Region')

        fig.suptitle(inName + ' to ' + outName, size=20)
        ax = fig.get_axes()
        ax[0].set_xlim(-3, 1)
        ax[0].set_ylim(-2, 2)

#%% Bode Plots - Ta
gainTaLinNom_mag, phaseTaLinNom_deg = FreqTrans.GainPhase(TaLinNom,
                                                          magUnit='mag',
                                                          phaseUnit='deg',
                                                          unwrap=True)
gainTaLinUnc_mag = FreqTrans.Gain(TaLinUnc, magUnit='mag')

gainTaEstNom_mag, phaseTaEstNom_deg = FreqTrans.GainPhase(TaEstNom,
                                                          magUnit='mag',
                                                          phaseUnit='deg',
                                                          unwrap=True)
gainTaEstUnc_mag = FreqTrans.Gain(TaEstUnc, magUnit='mag')

if False:
    for iPlot, io in enumerate(ioArray):
        iOut, iIn = io

        outName = outPlot[iOut]
        inName = inPlot[iIn]

        fig = 80 + iPlot
          fig = FreqTrans.PlotVectorMargin(freq_hz[iIn], vmTEstSamp_mag[iOut, iIn, :, iSamp], 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[3], handles[1], handles[4], handles[2], handles[5]]
        labels = [labels[0], labels[3], labels[1], labels[4], labels[2], labels[5]]
        ax[0].legend(handles, labels)

        fig.suptitle('$u_' + str(iIn) + '$ to ' + '$z_' + str(iOut) + '$')
        fig.set_tight_layout(True)


#%% Bode Plot
# Linear Model Gain and Phase
gainTLinNom_mag, phaseTLinNom_deg = FreqTrans.GainPhase(TLinNom, magUnit = 'mag', unwrap = True)
gainTLinUnc_mag = FreqTrans.Gain(TLinUnc, magUnit = 'mag')

# Estimated Gain and Phase
gainTEstNom_mag, phaseTEstNom_deg = FreqTrans.GainPhase(TEstNom, magUnit = 'mag', unwrap = True)
gainTEstUnc_mag = FreqTrans.Gain(TEstUnc, magUnit = 'mag')

np.mean(gainTEstUnc_mag, axis = -1) / np.mean(gainTLinUnc_mag, axis = -1) # should be 1 if scaled correctly

if False:
    for iPlot, [iOut, iIn] in enumerate(ioArray):
        fig = None
        fig = FreqTrans.PlotBode(freqLin_hz, gainTLinNom_mag[iOut, iIn], phaseTLinNom_deg[iOut, iIn], coher_nd = cohTLin_mag[iOut, iIn], gainUnc_mag = None, fig = fig, dB = True, color='k', label='Linear Nominal' + ' [$u_' + str(iIn+1) + '$ to ' + '$z_' + str(iOut+1) + '$]')
        fig = FreqTrans.PlotBode(freqLin_hz, gainTLinUnc_mag[iOut, iIn], None, coher_nd = None, gainUnc_mag = None, fig = fig, dB = True, color='k', linestyle='--', label='Linear Uncertainty' + ' [$u_' + str(iIn+1) + '$ to ' + '$z_' + str(iOut+1) + '$]')

        fig = FreqTrans.PlotBode(freq_hz[iIn], gainTEstNom_mag[iOut, iIn], phaseTEstNom_deg[iOut, iIn], coher_nd = cohTEst_mag[iOut, iIn], gainUnc_mag = None, fig = fig, dB = True, color='b', linestyle='None', marker='.', label='Estimate Nominal' + ' [$u_' + str(iIn+1) + '$ to ' + '$z_' + str(iOut+1) + '$]')
        fig = FreqTrans.PlotBode(freq_hz[iIn], gainTEstUnc_mag[iOut, iIn], None, coher_nd = None, gainUnc_mag = None, fig = fig, dB = True, color='r', linestyle='None', marker='.', label='Estimate Uncertainty' + ' [$u_' + str(iIn+1) + '$ to ' + '$z_' + str(iOut+1) + '$]')
Esempio n. 4
0
        T_seg[..., i] = (Tey[..., i] @ np.linalg.inv(Teu[..., i]))
        TUnc_seg[..., i] = (TeyUnc[..., i] @ np.linalg.inv(Teu[..., i]))

    T.append(T_seg)
    TUnc.append(np.abs(TUnc_seg))
    C.append(Cey)

T_InputNames = sigInList
T_OutputNames = sigOutList

# Compute Gain, Phase, Crit Distance
gain_mag = []
gainUnc_mag = []
phase_deg = []
for iSeg in range(0, len(oDataSegs)):
    gain_mag.append(FreqTrans.Gain(T[iSeg], magUnit='mag'))
    gainUnc_mag.append(FreqTrans.Gain(TUnc[iSeg], magUnit='mag'))
    phase_deg.append(FreqTrans.Phase(T[iSeg], phaseUnit='deg', unwrap=False))

#%% Spectrograms
if False:

    iSgnl = 0

    freqRate_rps = 50 * hz2rps

    #    freqSpec = np.asarray(freqExc_rps).flatten()
    freqSpec = freqExc_rps[iSgnl]
    optSpec = FreqTrans.OptSpect(dftType='czt',
                                 freq=freqSpec,
                                 freqRate=freqRate_rps,
Esempio n. 5
0
                     str(iOut) + ']')

#%% Bode Plot - Compl Sens Function
# Linear Model Gain and Phase
gainTiLinUnc_mag, phaseTiLinUnc_deg = FreqTrans.GainPhase(TiLinUnc,
                                                          magUnit='mag',
                                                          phaseUnit='deg',
                                                          unwrap=True)
cohTiLin_mag = np.ones_like(TiLinUnc)

# Estimated
gainTiEstNom_mag, phaseTiEstNom_deg = FreqTrans.GainPhase(TiEstNom,
                                                          magUnit='mag',
                                                          phaseUnit='deg',
                                                          unwrap=True)
gainTiEstUnc_mag = FreqTrans.Gain(
    TiEstUnc, magUnit='mag')  # Estimation Uncertain Response
cohTiEst_mag = TiEstCoh  # Estimation Coherence
cohTiEstMin = np.min(cohTiEst_mag, axis=(0, 1))

if False:
    numOut, numIn = TiLinNom.shape[0:-1]
    ioArray = np.array(np.meshgrid(np.arange(numOut),
                                   np.arange(numIn))).T.reshape(-1, 2)

    for iPlot, io in enumerate(ioArray):
        [iOut, iIn] = io

        fig = 20 + iPlot
        fig = FreqTrans.PlotBode(freqLin_hz,
                                 gainTiLinNom_mag[iOut, iIn],
                                 phaseTiLinNom_deg[iOut, iIn],
                                    marker='+',
                                    label='Critical Region')
        fig.suptitle(inPlot[iIn] + ' to ' + outPlot[iOut])

        ax = fig.get_axes()
        ax[0].set_xlim(-3, 1)
        ax[0].set_ylim(-2, 2)

#%% Bode Plots
gainLaEstNomList_mag = []
gainLaEstUncList_mag = []
phaseLaEstNomList_deg = []
for iSeg in range(0, len(oDataSegs)):
    gainLaEstNom_mag, phaseLaEstNom_deg = FreqTrans.GainPhase(
        LaEstNomList[iSeg], magUnit='mag', phaseUnit='deg', unwrap=True)
    gainLaEstUnc_mag = FreqTrans.Gain(LaEstNomList[iSeg], magUnit='mag')

    gainLaEstNomList_mag.append(gainLaEstNom_mag)
    phaseLaEstNomList_deg.append(phaseLaEstNom_deg)
    gainLaEstUncList_mag.append(gainLaEstUnc_mag)

if False:

    for iPlot, [iOut, iIn] in enumerate(ioArray):
        fig = 20 + iPlot
        for iSeg in range(0, len(oDataSegs)):
            gain_mag = gainLaEstNomList_mag[iSeg][iOut, iIn]
            phase_deg = phaseLaEstNomList_deg[iSeg][iOut, iIn]
            coher_nd = LaEstCohList[iSeg][iOut, iIn]
            gainUnc_mag = gainLaEstUncList_mag[iSeg][iOut, iIn]
  for Txy in TxyList:
      plt.plot(np.angle(Txy[0], deg=True), mag2db(np.abs(Txy[0])), '.', label = 'Simulation')

  plt.grid(True)
  plt.legend()


#%%
ampPeakFactor = ampList / sigPeakFactor

gainDF_mag, phaseDF_deg = FreqTrans.GainPhase(nDF, magUnit = 'mag', unwrap = True)

TxyArrayMax = np.nanmax(np.abs(TxyArray).squeeze(), axis=0)
TxyArrayNorm = TxyArray.squeeze() / TxyArrayMax

gainTxyMean_mag = FreqTrans.Gain(TxyArrayNorm, magUnit = 'mag')

gainTxy_mag = FreqTrans.Gain(TxyArray.T.squeeze(), magUnit = 'mag').T
gainTxyMax_mag = np.nanmax(gainTxy_mag, axis=0)
gainTxyNorm_mag = (gainTxy_mag / gainTxyMax_mag)
gainTxyMean_mag =  np.nanmean(gainTxyNorm_mag, axis=-1)

phaseTxy_deg = FreqTrans.Phase(TxyArray.T.squeeze(), phaseUnit = 'deg', unwrap = True).T
phaseTxy_deg[:, phaseTxy_deg[0] > 90] -= 360
phaseTxyMean_deg = np.nanmean(phaseTxy_deg, axis=-1)

CxyArrayMin = np.nanmin(np.abs(CxyArray.T.squeeze()), axis=0)
CxyArrayMax = np.nanmax(np.abs(CxyArray.T.squeeze()), axis=0)
CxyArrayMean = np.nanmean(CxyArray.T.squeeze(), axis=0)

fig = None