Example #1
0
void MainWindow::on_pushButton_7_clicked()
{
    double freq1 = ui->lineEdit_2->text().toDouble();
    double freq2 = ui->lineEdit_3->text().toDouble();
    vec_fft1.clear();
    vec_fft2.clear();
    vec_fft3.clear();
    vec_fft0.clear();
    vec_fft.clear();
    vec1.clear();
    wt.clear();
    double omega = ui->lineEdit->text().toDouble();
    double omega1 = omega - omega/vec.size();
    int N1 = vec.size() - 1;
    int M1 = vec.size();
    int N = vec.size();
    for (int i = 0; i < M1; i++)
    {
        double x;
        if (omega != 0)  x = i*omega1/M1;
        else x = double(i);
        wt.push_back(x);
    }
    fft(vec,vec_fft1,vec_fft2);
    for (int i = 0; i < N; i++)
    {
        vec_fft1[i] /= M1;
        vec_fft2[i] /= M1;
        if (wt[i] > freq1){
            vec_fft1[i] = 0;
            vec_fft2[i] = 0;
        }
        if (wt[i] < freq2){
            vec_fft1[i] = 0;
            vec_fft2[i] = 0;
        }
    }

    Graph* gr = new Graph(this);
    vec_fft0.clear();
    fftback(vec_fft1, vec_fft2, vec_fft0);
    gr->setVecX(wt);
    gr->setVecY(vec_fft0);
    gr->setData();
    gr->show();



}
Example #2
0
void expand_foldcorr(float *x, float *tmp)
{
int i, j, k, n, mm, mx;
mm=twice_rxchan;
if(bal_segments < fft1_size)
  {
  mx=bal_segments;
  }
else
  {
  mx=fft1_size;
  }
mx*=2;    
for(j=0; j<mm; j+=2)
  {
  k=fft1_size;
  n=4*bal_segments;
  i=0;
  while(i<mx && i<=k) 
    {
    k--;
    n--;
    tmp[2*i  ]=contracted_iq_foldcorr[mm*i+j  ];
    tmp[2*i+1]=contracted_iq_foldcorr[mm*i+j+1];
    tmp[2*k  ]=contracted_iq_foldcorr[mm*n+j  ];
    tmp[2*k+1]=contracted_iq_foldcorr[mm*n+j+1];
    i++;
    }
  for(i=2*bal_segments; i<fft1_size-2*bal_segments; i++)
    {
    tmp[2*i  ]=0;
    tmp[2*i+1]=0;
    }
  fftback(fft1_size, fft1_n, tmp, cal_table, cal_permute, FALSE);
  for(i=0; i<fft1_size; i++)
    {
    x[mm*i+j  ]=tmp[2*i  ];
    x[mm*i+j+1]=tmp[2*i+1];
    }
  }  
}
Example #3
0
void MainWindow::on_pushButton_4_clicked()
{

   if (vec.size() == 0) return;
   if ((vec_fft1.size() == 0)||(vec_fft2.size() == 0)) return;
   if (gr != NULL) delete gr;
   Graph* gr = new Graph(this);
  vec_fft0.clear();
  int N = vec_fft1.size();
  for (int i = 0; i < N; i++)
  {
      vec_fft1[i] = vec_fft1[i]/N;
      vec_fft2[i] = vec_fft2[i]/N;

  }
  fftback(vec_fft1,vec_fft2,vec_fft0);

  gr->setVecX(vec_fft);
  gr->setVecY(vec_fft0);
  gr->setData();
  gr->show();
}
Example #4
0
void do_mix1(int ss, float dfq)
{
int i, j, n, pa, k, mm, ia, ib, ic, id;
int p0, poffs;
float t1,t2,t3,t4,r1,r2,r3,r4,w1,w2,a1,a2;
float old_phrot_step,phrot_step;
phrot_step=dfq*fftx_points_per_hz*2*PI_L/mix1.size;
old_phrot_step=phrot_step_save;
phrot_step_save=phrot_step;
mm=twice_rxchan;
k=mm*mix1.interleave_points/2;
poffs=ss*timf3_size;        
pa=timf3_pa+poffs;        
// There is a lot of memory in our computers but speed may be a problem
// Process in different loops depending on no of rx channels.
i=1;
j=mix1.size-2;
n=mix1.size/2-2;
if(sw_onechan)
  {
  while(j>i)
    {
    t1=mix1_fqwin[n];
    fftn_tmp[2*i  ]*=t1;      
    fftn_tmp[2*i+1]*=t1;      
    fftn_tmp[2*j  ]*=t1;      
    fftn_tmp[2*j+1]*=t1;      
    j--;
    n--;
    i++;
    }
  fftback(mix1.size, mix1.n, fftn_tmp, 
                             mix1.table, mix1.permute, yieldflag_ndsp_mix1);
// In case there is no window the whole thing is trival.
// Just place the back transforms after each other.
  if(mix1.interleave_points == 0)
    {
    t2=mix1_phase_rot[ss];
    t1=mix1_phase[ss];
    j=2*mix1.size;
    for(i=0; i<j; i+=2)
      {
      t3=sin(t1);
      t4=cos(t1);
      timf3_float[pa+i  ]=t4*fftn_tmp[i+k  ]-t3*fftn_tmp[i+k+1];     
      timf3_float[pa+i+1]=t4*fftn_tmp[i+k+1]+t3*fftn_tmp[i+k  ];     
      t1+=t2;
      }
    mix1_phase[ss]=t1;
    }
  else  
    {
// If a sin squared window is used, place the transforms with 50%
// overlap and add them together. sin squared + cos squared ==1
    pa=timf3_pa+poffs;        
    if(mix1.interleave_points == mix1.new_points)
      {
      ia=mix1.size;
      t2=mix1_phase_rot[ss];
      t1=mix1_phase[ss];
      r1=mix1_old_phase[ss];
      r2=t2-2*(mix1_old_point[ss]-mix1_point[ss])*PI_L/mix1.size;
      r2-=old_phrot_step/4;
      t2-=phrot_step/4;
      old_phrot_step/=mix1.size;
      phrot_step/=mix1.size;
      for(i=0; i<ia; i+=2)
        {
        t3=sin(t1);
        t4=cos(t1);
        r3=sin(r1);
        r4=cos(r1);
        a1=timf3_float[pa+i  ];
        a2=timf3_float[pa+i+1];
        timf3_float[pa+i  ]=r4*a1-r3*a2+t4*fftn_tmp[i  ]-t3*fftn_tmp[i+1];
        timf3_float[pa+i+1]=r4*a2+r3*a1+t4*fftn_tmp[i+1]+t3*fftn_tmp[i  ];
        r1+=r2;
        t1+=t2;
        r2-=old_phrot_step;
        t2+=phrot_step;
        }
      mix1_phase[ss]=t1;
      pa=((timf3_pa+timf3_block)&timf3_mask)+2*ss*timf3_size-timf3_block;        
      ib=2*mix1.size;
      for(i=ia; i<ib; i+=2)
        {
        timf3_float[pa+i  ]=fftn_tmp[i  ];     
        timf3_float[pa+i+1]=fftn_tmp[i+1];     
        }
      }
    else
      {
      p0=timf3_pa;        
      mix1_phase[ss]-=(mix1_old_point[ss]-mix1_point[ss])*
                              ((mix1.new_points-mix1.size)*PI_L)/mix1.size;
      t2=mix1_phase_rot[ss];
      t1=mix1_phase[ss];
      r1=mix1_old_phase[ss];
      r2=t2-2*(mix1_old_point[ss]-mix1_point[ss])*PI_L/mix1.size;
      r2+=old_phrot_step/4;
      t2+=phrot_step/4;
      old_phrot_step/=mix1.size;
      phrot_step/=mix1.size;
      k-=2*(mix1.crossover_points/2);
      j=k/2+mix1.crossover_points;
      ia=2*mix1.crossover_points;
      for(i=0; i<ia; i+=2)
        {
        pa=p0+poffs;
        t3=sin(t1);
        t4=cos(t1);
        r3=sin(r1);
        r4=cos(r1);
        w1=mix1.sin2win[i>>1];
        w2=mix1.cos2win[i>>1];
        a1=w2*timf3_float[pa  ];
        a2=w2*timf3_float[pa+1];
        timf3_float[pa  ]=r4*a1-r3*a2+
                               (t4*fftn_tmp[i+k  ]-t3*fftn_tmp[i+k+1])*w1;     
        timf3_float[pa+1]=r4*a2+r3*a1+
                               (t4*fftn_tmp[i+k+1]+t3*fftn_tmp[i+k  ])*w1;     
        t1+=t2;
        r1+=r2;
        r2+=old_phrot_step;
        t2+=phrot_step;
        p0=(p0+2)&timf3_mask;
        } 
      ib=mix1.new_points+2+2*(mix1.crossover_points/2);
      for(i=ia; i<ib; i+=2)
        {
        t3=sin(t1);
        t4=cos(t1);
        pa=p0+poffs;
        r1=mix1.window[j];
        timf3_float[pa  ]=(t4*fftn_tmp[i+k  ]-t3*fftn_tmp[i+k+1])*r1;     
        timf3_float[pa+1]=(t4*fftn_tmp[i+k+1]+t3*fftn_tmp[i+k  ])*r1;     
        p0=(p0+2)&timf3_mask;
        t1+=t2;
        t2+=phrot_step;
        j++;
        } 
      j--;  
      ic=2*mix1.new_points;  
      for(i=ib; i<ic; i+=2)
        {
        j--;
        pa=p0+poffs;
        t3=sin(t1);
        t4=cos(t1);
        r1=mix1.window[j];
        timf3_float[pa  ]=(t4*fftn_tmp[i+k  ]-t3*fftn_tmp[i+k+1])*r1;     
        timf3_float[pa+1]=(t4*fftn_tmp[i+k+1]+t3*fftn_tmp[i+k  ])*r1;     
        t1+=t2;
        t2+=phrot_step;
        p0=(p0+2)&timf3_mask;
        } 
      mix1_phase[ss]=t1;
      id=2*(mix1.crossover_points+mix1.new_points);
      for(i=ic; i<id; i+=2)
        {
        j--;
        pa=p0+poffs;
        timf3_float[pa  ]=fftn_tmp[i+k  ];     
        timf3_float[pa+1]=fftn_tmp[i+k+1];     
        p0=(p0+2)&timf3_mask;
        } 
      }
    }
  }
else
  {  
  while(j>i)