Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
            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);
            }
Ejemplo n.º 3
0
        /// <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);
        }