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

📄 frequencyscanner.cpp

📁 QAM module to use in Java with an easy interface and powerful performance
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------


#pragma hdrstop

#include "FrequencyScanner.h"
#include "Settings_F.h"

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

#pragma package(smart_init)
#include <stdio.h>


__fastcall SettingsInvestigator::SettingsInvestigator(FrequencyScanner *FreqScanner,TThreadPriority tPriority)
        : TThread(true)
{
        FreeOnTerminate=false;
        Priority=tPriority;
        OnTerminate=FinshedEvent;
        Finished=false;
        Working=false;
        fs=FreqScanner;
        //Resume();
}

void __fastcall SettingsInvestigator::FinshedEvent(TObject* Sender)
{
        Finished=true;
}

void __fastcall SettingsInvestigator::Execute()
{
        while(!Terminated)
        {
                if(Terminated)break;
                //--
                fs->DoTheXform();
                //--
                Working=false;
                if(!Terminated)Suspend();
        }
}

void __fastcall SettingsInvestigator::ThreadTheXForm(void)
{
        Working=true;
        Resume();
}


void __fastcall FrequencyScanner::SetupSoundcard()
{
        /*while(invest->Working)
        {
                Sleep(100);
                Application->ProcessMessages();
        }  */
        



        if((gSettings.Common.Samplerate)<90000)N=131072;
         else N=131072*2;
        if((gSettings.Common.Samplerate)>100000)N=131072*2*2;
        N_2=N/2;

        if(in)fftw_free(in);
        if(out)fftw_free(out);
        if(p)fftw_destroy_plan(p);
        in = (double*) fftw_malloc(sizeof(double) * N);
        out = (double*) fftw_malloc(sizeof(double) * N);

        //?? test to see if this is where the bug is  . tryied and still get error
        ProgressThread *pt=new ProgressThread(N,in,out,&p);
        Sleep(100);
        Application->ProcessMessages();
        if(!pt->Finished)
        {
                ProgressForm->Finished=&(pt->Finished);
                ProgressForm->ShowModal();
        }
        //p=pt->plan;
        delete pt;

        //p=fftw_plan_r2r_1d(N,in,out,FFTW_R2HC,FFTW_MEASURE);
        //Application->MessageBox("Soundcard set freq scanner", "Alert!", MB_OK);

        PosibleFrequencySettingsPtr=0;
        CopyOfPosibleFrequencySettingsPtr=0;
        CopyOfPosibleFrequencySettingsSize=0;

        MABuf.resize(40);
        MASum=0.0;
        for(int i=0;i<MABuf.size();i++)MABuf[i]=0.0;
        MAPtr=0;


        MABuf2.resize(100);
        MASum2=0.0;
        for(int i=0;i<MABuf2.size();i++)MABuf2[i]=0.0;
        MAPtr2=0;

        outinternalave.resize(N);
        outinternalaveworking.resize(N);
        for(int i=0;i<outinternalave.size();i++)
        {
                outinternalave[i]=0.0;
                outinternalaveworking[i]=0.0;
        }
        outinternalavepos=0;

        NPtr=0;

        NoteForMain=false;
        WorkingSettings.Freq=gSettings.DemodMajor.Freq;
        WorkingSettings.Gamma=gSettings.DemodMajor.Gamma;
        WorkingSettings.SignalPower=0.0;

}

__fastcall FrequencyScanner::~FrequencyScanner()
{
        gSettings.DemodMajorRemoveCallBackNotificationFunction(SettingsHaveChanged);
        fftw_destroy_plan(p);
        fftw_free(in);
        fftw_free(out);

        invest->Terminate();
        invest->Resume();

        while(!invest->Finished)
        {
                Sleep(100);
                Application->ProcessMessages();
        }
        delete invest;
}

void __fastcall FrequencyScanner::Start()
{

        SigLevel=0.0;

        MAX_NUMBER_OF_POSIBLE_FREQS_TO_TRY=SettingsForm->JvValidateEditNumberOfSettingsToTry->Value;

        //just reserve some space
        PosibleFrequencySettings.resize(12);//MAX_NUMBER_OF_POSIBLE_FREQS_TO_TRY+1);
        CopyOfPosibleFrequencySettings.resize(12);//MAX_NUMBER_OF_POSIBLE_FREQS_TO_TRY+1);






        if(PosibleFrequencySettingsPtr>MAX_NUMBER_OF_POSIBLE_FREQS_TO_TRY)PosibleFrequencySettingsPtr=MAX_NUMBER_OF_POSIBLE_FREQS_TO_TRY;

       // if(CopyOfPosibleFrequencySettingsSize<PosibleFrequencySettingsPtr)CopyOfPosibleFrequencySettingsSize=PosibleFrequencySettingsPtr;

        //PosibleFrequencySettingsPtr=0;
       // CopyOfPosibleFrequencySettingsPtr=0;
       // CopyOfPosibleFrequencySettingsSize=0;

}

__fastcall FrequencyScanner::FrequencyScanner()
{

        invest=new SettingsInvestigator(this,tpLowest);//tpIdle);


        in=0;out=0;p=0;

        gSettings.DemodMajorAddCallBackNotificationFuction(SettingsHaveChanged);
        SettingsHaveChanged(CH_ANYTHING|CH_SAMPLERATE);


}

void __fastcall FrequencyScanner::SettingsHaveChanged(NotificationEventType WhatHasChanged)
{
        if(WhatHasChanged&CH_SAMPLERATE)SetupSoundcard();
        Start();
}

void __fastcall FrequencyScanner::LoadPosibleFrequencys()
{
        bool TmpWorkingSettingStillValid=false;
        PosibleFrequencySettingsPtr=0;

        PosibleFrequencySettings[MAX_NUMBER_OF_POSIBLE_FREQS_TO_TRY-1].SignalPower=0.0;

        for(int j=10;j<N/4;j++)
        {
                if((outinternalave[j]>10.0)&&(outinternalave[j-1]<outinternalave[j])&&(outinternalave[j+1]<outinternalave[j]))
                {
                        //posible f/gamma
                        for(int k=2*j-2;k<min(4*j+2,N_2+2);k++)
                        {
                                if((outinternalave[k]>10.0)&&(outinternalave[k-1]<outinternalave[k])&&(outinternalave[k+1]<outinternalave[k]))
                                {

⌨️ 快捷键说明

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