rCritLaEstNom_mag, rCritLaEstUnc_mag, rCritLaEstLower_mag = FreqTrans.DistCrit( LaEstNom, LaEstUnc, typeUnc='circle') if False: for iPlot, io in enumerate(ioArray): iOut, iIn = io outName = outPlot[iOut] inName = inPlot[iIn] fig = 40 + iPlot # fig = FreqTrans.PlotVectorMargin(freqLin_hz, rCritLaLinNom_mag[iOut, iIn], coher_nd = np.ones_like(freqLin_hz), fig = fig, color = 'k', label = 'Linear') fig = FreqTrans.PlotVectorMargin(freqLin_hz, rCritLaLinNom_mag[iOut, iIn], vmUnc_mag=rCritLaLinUnc_mag[iOut, iIn], coher_nd=np.ones_like(freqLin_hz), fig=fig, color='k', label='Linear') fig = FreqTrans.PlotVectorMargin(freq_hz[0], rCritLaEstNom_mag[iOut, iIn], vmUnc_mag=rCritLaEstUnc_mag[iOut, iIn], coher_nd=LaEstCoh[iOut, iIn], color='b', fig=fig, label='Excitation (MIMO)') fig = FreqTrans.PlotVectorMargin( freq_hz[0, sigIndx[iIn]], rCritLaEstNom_mag[iOut, iIn, sigIndx[iIn]], vmUnc_mag=rCritLaEstUnc_mag[iOut, iIn, sigIndx[iIn]],
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') numOut, numIn = LoLinNom.shape[0:-1] ioArray = np.array(np.meshgrid(np.arange(numOut), np.arange(numIn))).T.reshape(-1, 2) if True: for iPlot, [iOut, iIn] in enumerate(ioArray): fig = 30 + iPlot fig = FreqTrans.PlotVectorMargin(freqLin_hz, vmLoLinNom_mag[iOut, iIn], cohLoLin_mag[iOut, iIn], vmLoLinUnc_mag[iOut, iIn], fig = fig, linestyle='-', color='k', label='Linear Model') fig = FreqTrans.PlotVectorMargin(freq_hz[iIn], vmLoEstNom_mag[iOut, iIn], cohLoEst_mag[iOut, iIn], vmLoEstUnc_mag[iOut, iIn], fig = fig, linestyle='-', marker='.', color='b', label='Estimate [MIMO]') fig = FreqTrans.PlotVectorMargin(freq_hz[iIn, sigIndx[iIn]], vmLoEstNom_mag[iOut, iIn, sigIndx[iIn]], cohLoEst_mag[iOut, iIn, sigIndx[iIn]], vmLoEstUnc_mag[iOut, iIn, sigIndx[iIn]], fig = fig, linestyle='None', marker='.', color='g', label='Estimate [SIMO]') 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('$L_o$ : ' + '$r_{Exc}$[' + str(iIn) + '] to ' + '$z$[' + str(iOut) + ']') #%% Nyquist Plot - Output Stability LoLinUncMag = np.abs(LoLinUnc) LoEstUncMag = np.abs(LoEstUnc)
rCritLiEstCrit_mag, _, _ = FreqTrans.VectorMargin(LiEstCrit, typeUnc='circle') if True: numOut, numIn = LiLinNom.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 = 30 + iPlot fig = FreqTrans.PlotVectorMargin(freqLin_hz, rCritLiLinNom_mag[iOut, iIn], cohLiLin_mag[iOut, iIn], rCritLiLinUnc_mag[iOut, iIn], fig=fig, linestyle='-', color='k', label='Linear Model') fig = FreqTrans.PlotVectorMargin(freq_hz[iIn], rCritLiEstNom_mag[iOut, iIn], cohLiEst_mag[iOut, iIn], rCritLiEstUnc_mag[iOut, iIn], fig=fig, linestyle='-', marker='.', color='b', label='Estimate [MIMO]') fig = FreqTrans.PlotVectorMargin(freq_hz[iIn, sigIndx[iIn]], rCritLiEstNom_mag[iOut, iIn, sigIndx[iIn]],
vmTLinNom_mag, vmTLinUnc_mag, vmTLinMin_mag = FreqTrans.VectorMargin(TLinNom, TLinUnc, typeUnc = 'circle') vmTEstNom_mag, vmTEstUnc_mag, vmTEstMin_mag = FreqTrans.VectorMargin(TEstNom, TEstUnc, typeUnc = 'circle') # Sampled Systems vmTEstSamp_mag = np.zeros((numOut, numIn, nFreq, nSamp), dtype='float') for iSamp in range(nSamp): vmTEstSamp_mag[..., iSamp], _, _ = FreqTrans.VectorMargin(TEstSamp[..., iSamp], typeUnc = 'circle') numOut, numIn = TLinNom.shape[0:-1] ioArray = np.array(np.meshgrid(np.arange(numOut), np.arange(numIn))).T.reshape(-1, 2) if True: for iPlot, [iOut, iIn] in enumerate(ioArray): fig = None fig = FreqTrans.PlotVectorMargin(freqLin_hz, vmTLinNom_mag[iOut, iIn], cohTLin_mag[iOut, iIn], vmTLinUnc_mag[iOut, iIn], fig = fig, linestyle='-', color='k', label='Linear Model') fig = FreqTrans.PlotVectorMargin(freq_hz[iIn], vmTEstNom_mag[iOut, iIn], cohTEst_mag[iOut, iIn], vmTEstUnc_mag[iOut, iIn], fig = fig, linestyle='-', marker='.', color='r', label='Estimate [MIMO]') fig = FreqTrans.PlotVectorMargin(freq_hz[iIn, sigIndx[iIn]], vmTEstNom_mag[iOut, iIn, sigIndx[iIn]], cohTEst_mag[iOut, iIn, sigIndx[iIn]], vmTEstUnc_mag[iOut, iIn, sigIndx[iIn]], fig = fig, linestyle='-', marker='.', color='b', label='Estimate [SIMO]') for iSamp in range(nSamp): 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)
numIn = len(inPlot) ioArray = np.array(np.meshgrid(np.arange(numOut), np.arange(numIn))).T.reshape(-1, 2) if False: for iPlot, [iOut, iIn] in enumerate(ioArray): fig = 10 + iPlot for iSeg in range(0, len(oDataSegs)): vm_mag = vmLaEstNomList_mag[iSeg][iOut, iIn] vmUnc_mag = vmLaEstUncList_mag[iSeg][iOut, iIn] fig = FreqTrans.PlotVectorMargin(freq_hz[iIn], vm_mag, vmUnc_mag=vmUnc_mag, coher_nd=LaEstCohList[iSeg][iOut, iIn], fig=fig, color=rtsmSegList[iSeg]['color'], label=oDataSegs[iSeg]['Desc']) fig = FreqTrans.PlotVectorMargin(freq_hz[iIn], 0.4 * np.ones_like(freq_hz[iIn]), fig=fig, color='r', linestyle='--', label='Critical') fig.suptitle(inPlot[iIn] + ' to ' + outPlot[iOut]) ax = fig.get_axes() ax[0].set_ylim(0, 2)