/// <summary> /// 用来获取相同功率不同频率要增加的值 /// </summary> internal float Offset1(float p) { float v = 0.0f; float v1 = 0.0f; float v2 = 0.0f; if (table == null) { v = 0.0f; } else { //mii_I = rowHead.Search(f); mii_I = new Signal_MatchItem_Index(); mii_I.I = 0; mii_J = colHead.Search(p); //mii_I.only_I && //待补偿点,恰好落在表格节点上 if (mii_J.only_I) { v = table[mii_J.I][mii_I.I]; } #region ////带补偿点,在横轴(频率f)上落在表格节点上,在纵轴(功率dB)上没有落在表格节点上 //else if (!mii_J.only_I) //{ // if (mii_J.I1 != mii_J.I) // v = Offset_dB(p, mii_I.I, mii_J.I1, mii_J.I); // else // v = Offset_dB(p, mii_I.I, mii_J.I, mii_J.I2); // //带补偿点,在纵轴(功率dB)上落在表格节点上,在横轴(频率f)上没有落在表格节点上 //} //else if ((!mii_I.only_I) && mii_J.only_I) //{ // if (mii_I.I1 != mii_I.I) // v = Offset_F(f, mii_J.I, mii_I.I1, mii_I.I); // else // v = Offset_F(f, mii_J.I, mii_I.I, mii_I.I2); // //带补偿点,在两个轴向上都没有落在表格节点上 //} //else //{ // int I_F1 = 0; // int I_F2 = 0; // //先固定f,进行p变换 // if (mii_I.I1 != mii_I.I) // { // I_F1 = mii_I.I1; // I_F2 = mii_I.I; // if (mii_J.I1 != mii_J.I) // { // v1 = Offset_dB(p, I_F1, mii_J.I1, mii_J.I); // v2 = Offset_dB(p, I_F2, mii_J.I1, mii_J.I); // } // else // { // v1 = Offset_dB(p, I_F1, mii_J.I, mii_J.I2); // v2 = Offset_dB(p, I_F2, mii_J.I, mii_J.I2); // } // } // else // { // I_F1 = mii_I.I; // I_F2 = mii_I.I2; // if (mii_J.I1 != mii_J.I) // { // v1 = Offset_dB(p, I_F1, mii_J.I1, mii_J.I); // v2 = Offset_dB(p, I_F2, mii_J.I1, mii_J.I); // } // else // { // v1 = Offset_dB(p, I_F1, mii_J.I, mii_J.I2); // v2 = Offset_dB(p, I_F2, mii_J.I, mii_J.I2); // } // } // //再进行f变换 // aItem1 = rowHead.GetItem(I_F1); // aItem2 = rowHead.GetItem(I_F2); // v = Offset_Linear(f, aItem1.v, v1, aItem2.v, v2); //} #endregion } return(v); }
internal Signal_MatchItem_Index Search(float v) { int i = 0; Signal_MatchItem_Index mii = new Signal_MatchItem_Index(); if (tItems.Count <= 0) { return(mii); } //待补偿的值,恰好落在补偿点上 for (i = 0; i < tItems.Count; i++) { //与补偿点频率相差值,不大于1KHz if (Math.Abs(tItems[i].v - v) <= 0.0001f) { mii.I = i; mii.only_I = true; break; } } if (mii.I < 0) { //待补偿的值,在第一个补偿点之前 if ((tItems[0].v - v) > 0.0001f) { mii.I = 0; mii.only_I = true; //待补偿的值,在最后一个补偿点之后 } else if ((v - tItems[tItems.Count - 1].v) > 0.0001f) { mii.I = tItems.Count - 1; mii.only_I = true; //待补偿的值,落在2补偿点构成的区间内 } else { bool found = true; for (i = 1; i <= tItems.Count - 1; i++) { //在前一个区间 if (((v - tItems[i].v1) > 0.0001f) && ((tItems[i].v - v) > 0.0001f)) { mii.I1 = i - 1; mii.I = i; mii.I2 = i; //在后一个区间 } else if (((v - tItems[i].v) > 0.0001f) && ((tItems[i].v2 - v) > 0.0001f)) { mii.I1 = i; mii.I = i; mii.I2 = i + 1; } else { found = false; } if (found) { break; } } } } return(mii); }
/// <summary>获取补偿 /// /// </summary> /// <param name="f">频率</param> /// <param name="p">功率</param> /// <param name="tx">Tx_Table</param> /// <returns></returns> internal float Offset(float f, float p, Tx_Table tx) { this._table = tx; float v = 0.0f; float v1 = 0.0f; float v2 = 0.0f; if (table == null) { v = 0.0f; } else { mii_I = rowHead.Search(f); mii_J = colHead.Search(p); //待补偿点,恰好落在表格节点上 if (mii_I.only_I && mii_J.only_I) { v = table[mii_J.I][mii_I.I] + _table.Offset1(p); } //带补偿点,在横轴(频率f)上落在表格节点上,在纵轴(功率dB)上没有落在表格节点上 else if (mii_I.only_I && (!mii_J.only_I)) { if (mii_J.I1 != mii_J.I) { v = Offset_dB(p, mii_I.I, mii_J.I1, mii_J.I); } else { v = Offset_dB(p, mii_I.I, mii_J.I, mii_J.I2); } //带补偿点,在纵轴(功率dB)上落在表格节点上,在横轴(频率f)上没有落在表格节点上 } else if ((!mii_I.only_I) && mii_J.only_I) { if (mii_I.I1 != mii_I.I) { v = Offset_F(f, mii_J.I, mii_I.I1, mii_I.I, p); } else { v = Offset_F(f, mii_J.I, mii_I.I, mii_I.I2, p); } //带补偿点,在两个轴向上都没有落在表格节点上 } else { int I_F1 = 0; int I_F2 = 0; //先固定f,进行p变换 if (mii_I.I1 != mii_I.I) { I_F1 = mii_I.I1; I_F2 = mii_I.I; if (mii_J.I1 != mii_J.I) { v1 = Offset_dB(p, I_F1, mii_J.I1, mii_J.I); v2 = Offset_dB(p, I_F2, mii_J.I1, mii_J.I); } else { v1 = Offset_dB(p, I_F1, mii_J.I, mii_J.I2); v2 = Offset_dB(p, I_F2, mii_J.I, mii_J.I2); } } else { I_F1 = mii_I.I; I_F2 = mii_I.I2; if (mii_J.I1 != mii_J.I) { v1 = Offset_dB(p, I_F1, mii_J.I1, mii_J.I); v2 = Offset_dB(p, I_F2, mii_J.I1, mii_J.I); } else { v1 = Offset_dB(p, I_F1, mii_J.I, mii_J.I2); v2 = Offset_dB(p, I_F2, mii_J.I, mii_J.I2); } } //再进行f变换 aItem1 = rowHead.GetItem(I_F1); aItem2 = rowHead.GetItem(I_F2); v = Offset_Linear(f, aItem1.v, v1, aItem2.v, v2); } } return(v + App_Settings.spc.TxRef); }