⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcma.cpp

📁 QAM module to use in Java with an easy interface and powerful performance
💻 CPP
字号:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "MCMA.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

//---------------------------------------------------------------------------
PtComplex __fastcall MCMA::Update(PtComplex rec)
{

        if(!IterateOnNextUpdate)
        {
                LastRecivedPt.re=rec.re;
                LastRecivedPt.im=rec.im;
                return rec;
        }

        int i;
        for(i=0;i<numberofpoints-2;i++)
        {
                x[i]=x[i+2];
        }
        x[numberofpoints-1].re=rec.re;
        x[numberofpoints-1].im=rec.im;
        x[numberofpoints-2].re=LastRecivedPt.re;
        x[numberofpoints-2].im=LastRecivedPt.im;
        y.re=0;y.im=0;
        for(i=0;i<numberofpoints;i++)
        {
                //x*w
                y.re+=x[i].re*w[i].re-x[i].im*w[i].im;
                y.im+=x[i].re*w[i].im+x[i].im*w[i].re;
        }


        return y;

}

__fastcall MCMA::MCMA()
{
        w=0;x=0;
        IterateOnNextUpdate=true;

        numberofpoints=100;




        w=new PtComplex[numberofpoints];
        x=new PtComplex[numberofpoints];
        for(int i=0;i<numberofpoints;i++){x[i].re=0;x[i].im=0;}
        delta.re=0.3;
        delta.im=0.3;
        mu.re=0.003;
        mu.im=0.003;
        y.re=0;y.im=0;

        ReInitLock();

}

__fastcall MCMA::~MCMA()
{
        if(w)delete [] w;
        if(x)delete [] x;
}

void __fastcall MCMA::Iterate()
{

        PtComplex tmp;
        PtComplex epsilon;
        tmp.re=(y.re*y.re);
        tmp.im=(y.im*y.im);


        if((tmp.re+tmp.im)>10000000){ReInitLock();return;}
        PtComplex tmindis;
        PtComplex tdis;
        tmindis.re=1000000000;
        tmindis.im=1000000000;
        for(int i=0;i<(gSettings.DemodMajor.CMapQAMAmpsSize);i++)
        {
                tdis.re=gSettings.DemodMajor.CMapQAMAmps[i]-y.re;
                tdis.re*=tdis.re;
                tdis.im=gSettings.DemodMajor.CMapQAMAmps[i]-y.im;
                tdis.im*=tdis.im;
                if(tdis.re<tmindis.re)
                {
                        tmindis.re=tdis.re;
                        delta.re=gSettings.DemodMajor.CMapQAMAmps[i];
                }
                if(tdis.im<tmindis.im)
                {
                        tmindis.im=tdis.im;
                        delta.im=gSettings.DemodMajor.CMapQAMAmps[i];
                }
        }



        if(!(gSettings.DemodMinor.Ama))
        {

                delta.im=gSettings.DemodMajor.BetaSquared;
                delta.re=gSettings.DemodMajor.BetaSquared;
                epsilon.re=y.re*(tmp.re-delta.re);
                epsilon.im=y.im*(tmp.im-delta.im);

        }
         else
         {

                epsilon.re=(y.re-delta.re);
                epsilon.im=(y.im-delta.im);


                if(gSettings.DemodMinor.SlowLock)
                {
                        double mu2=mu.re/2.0;
                        for(int i=numberofpoints-1;i>=0;i--)
                        {
                                //w=w-mu*x_bar*e
                                w[i].re=w[i].re-mu2*(x[i].re*epsilon.re+x[i].im*epsilon.im);
                                w[i].im=w[i].im-mu2*(x[i].re*epsilon.im-x[i].im*epsilon.re);
                        }
                        return;

                } 

         }




        for(int i=numberofpoints-1;i>=0;i--)
        {
                //w=w-mu*x_bar*e
                w[i].re=w[i].re-mu.re*(x[i].re*epsilon.re+x[i].im*epsilon.im);
                w[i].im=w[i].im-mu.im*(x[i].re*epsilon.im-x[i].im*epsilon.re);
        }

}

void __fastcall MCMA::ReInitLock()
{
        for(int i=0;i<numberofpoints;i++){w[i].re=0.000;w[i].im=0.000;}
        w[numberofpoints/2+1].re=1.0;
        w[numberofpoints/2].im=0.0;
        gSettings.DemodMinor.Ama=false;
        gSettings.DemodMinor.SlowLock=false;
}

//---------------------------------------------------------------------------

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -