/* * Atpdec * Copyright (c) 2003 by Thierry Leconte (F4DWV) * * $Id$ * * This library is free software; you can redistribute it and/or modify * it under the terms of the GNU Library General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * */ #include #include #include #define Fe 11025 #define PixelLine 2080 #define Fp (2*PixelLine) #define RSMULT 265 #define Fi (Fp*RSMULT) static double FreqOsc=2400.0/Fe; static double FreqLine=1.0; extern int getsample(float *inbuff ,int nb); static float pll(float Iv, float Qv) { /* pll coeff */ #define K1 5e-3 #define K2 3e-6 static double PhaseOsc=0.0; double DPhi; double DF; double I,Q; double Io,Qo; /* quadrature oscillator */ Io=cos(PhaseOsc); Qo=sin(PhaseOsc); /* phase detector */ I=Iv*Io+Qv*Qo; Q=Qv*Io-Iv*Qo; DPhi=atan2(Q,I)/M_PI; /* update */ DF=K1*DPhi+FreqOsc; FreqOsc+=K2*DPhi; PhaseOsc+=2.0*M_PI*DF; if (PhaseOsc > M_PI) PhaseOsc-=2.0*M_PI; if (PhaseOsc <= -M_PI) PhaseOsc+=2.0*M_PI; return (float)I; } static double fr=2400.0/Fe; static double offset=0.0; getamp(float *ambuff,int nb) { #define BLKIN 4096 static float inbuff[BLKIN]; static int nin=0; static int idxin=0; int n; for(n=0;n0) memmove(pixelv,pixels,npv*sizeof(float)); if(npv=1.0 || ph <= -1.0) { synced=0; FreqLine=1.0; } if(synced<8) { int shift,mshift; if(npvmax) { mshift=shift; max=corr; } } if(mshift !=0) { memmove(pixelv,&(pixelv[mshift]),(npv-mshift)*sizeof(float)); npv-=mshift; synced=0; FreqLine=1.0; } else synced+=1; } if(npv