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') 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]]
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_i$ : ' + '$u_{Exc}$' + ' to ' + '$u$') #%% Vector Margin Plots rCritLiLinNom_mag, rCritLiLinUnc_mag, rCritLiLinMin_mag = FreqTrans.VectorMargin( LiLinNom, LiLinUnc, typeUnc='circle') rCritLiEstNom_mag, rCritLiEstUnc_mag, rCritLiEstMin_mag = FreqTrans.VectorMargin( LiEstNom, LiEstUnc, typeUnc='circle') rCritLiEstSamp_mag, _, _ = FreqTrans.VectorMargin(LiEstSamp, typeUnc='circle') 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 = 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') # 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')
ax = fig.get_axes() ax[0].set_xlim(0, 10) ax[0].set_ylim(0, 1) #%% Vector Margin Plots inPlot = ['$p_{ex}$', '$q_{ex}$', '$r_{ex}$'] # Elements of sigExcList outPlot = ['$p_{fb}$', '$q_{fb}$', '$r_{fb}$'] # Elements of sigFbList vmLaEstNomList_mag = [] vmLaEstUncList_mag = [] for iSeg in range(0, len(oDataSegs)): vm_mag, vmUnc_mag, vmMin_mag = FreqTrans.VectorMargin(LaEstNomList[iSeg], LaEstUncList[iSeg], typeUnc='circle') vmLaEstNomList_mag.append(vm_mag) vmLaEstUncList_mag.append(vmUnc_mag) # vm_mag.append(vmMin_mag) numOut = len(outPlot) 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)):