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(); }
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]; } } }
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(); }
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)