{ ifstream data("S-parameter.s2p"); string buf; for(int j=0; j<9; j++) { getline(data, buf); cout << buf << endl; } double f, Re_S11, Im_S11; double Re_S21, Im_S21; double Re_S12, Im_S12; double Re_S22, Im_S22; TGraph *g_Re_S11_vs_f = new TGraph(); g_Re_S11_vs_f->SetMarkerColor(2); g_Re_S11_vs_f->SetLineColor(2); g_Re_S11_vs_f->SetFillColor(0); TGraph *g_Im_S11_vs_f = new TGraph(); g_Im_S11_vs_f->SetMarkerColor(4); g_Im_S11_vs_f->SetLineColor(4); g_Im_S11_vs_f->SetFillColor(0); TGraph *g_S11_vs_f = new TGraph(); g_S11_vs_f->SetMarkerColor(1); g_S11_vs_f->SetLineColor(1); g_S11_vs_f->SetFillColor(0); int num=0; cout <<" loading the data..." << endl; while(data>>f>>Re_S11>>Im_S11>>Re_S21>>Im_S21>>Re_S12>>Im_S12>>Re_S22>>Im_S22) { g_Re_S11_vs_f->SetPoint(num, f/1e9, Re_S11); g_Im_S11_vs_f->SetPoint(num, f/1e9, Im_S11); g_S11_vs_f->SetPoint(num, f/1e9, 10.*log10(Re_S11*Re_S11 + Im_S11*Im_S11)); num++; } num = g_Re_S11_vs_f->GetN(); cout << "# points = " << num << endl; ///////////////// // FFT //////////////// double f_min = g_Re_S11_vs_f->GetX()[0]; double f_max = g_Re_S11_vs_f->GetX()[num-1]; double t_min = 0.; double t_max = ((double)num)/(f_max-f_min); cout << "f_min = " << f_min << ", f_max = " << f_max << endl; cout << "t_min = " << t_min << ", t_max = " << t_max << endl; Double_t *list_Re_S11 = new Double_t[num]; Double_t *list_Im_S11 = new Double_t[num]; for(int i=0; iGetY()[i]; list_Im_S11[i] = g_Im_S11_vs_f->GetY()[i]; } cout <<" FFT the data..." << endl; TVirtualFFT *fft = TVirtualFFT::FFT(1, &num, "C2C"); fft->SetPointsComplex(list_Re_S11, list_Im_S11); fft->Transform(); TGraph *g_Re_S11_vs_t = new TGraph(); g_Re_S11_vs_t->SetMarkerColor(2); g_Re_S11_vs_t->SetLineColor(2); g_Re_S11_vs_t->SetFillColor(0); TGraph *g_Im_S11_vs_t = new TGraph(); g_Im_S11_vs_t->SetMarkerColor(4); g_Im_S11_vs_t->SetLineColor(4); g_Im_S11_vs_t->SetFillColor(0); TGraph *g_S11_vs_t = new TGraph(); g_S11_vs_t->SetMarkerColor(1); g_S11_vs_t->SetLineColor(1); g_S11_vs_t->SetFillColor(0); for (int i=0; iGetPointComplex(i, re, im); g_Re_S11_vs_t->SetPoint(i, t, re/((double)num)); g_Im_S11_vs_t->SetPoint(i, t, im/((double)num)); g_S11_vs_t->SetPoint(i, t, 10.*log10(sqrt(re*re + im*im)/((double)num))); } TCanvas *c = new TCanvas("c", "c", 1200, 800); c->Divide(2, 2); c->cd(1); g_Re_S11_vs_f->Draw("AP"); g_Im_S11_vs_f->Draw("P"); g_Re_S11_vs_f->GetXaxis()->SetTitle("f [GHz]"); g_Re_S11_vs_f->GetYaxis()->SetTitle("linear S_{11}"); TLegend *leg_freq = new TLegend(0.65, 0.65, 0.8, 0.8); leg_freq->SetFillColor(0); leg_freq->AddEntry(g_Re_S11_vs_f, "Re"); leg_freq->AddEntry(g_Im_S11_vs_f, "Im"); leg_freq->Draw(); c->cd(2); g_S11_vs_f->Draw("AP"); g_S11_vs_f->GetXaxis()->SetTitle("f [GHz]"); g_S11_vs_f->GetYaxis()->SetTitle("S_{11} [dB]"); c->cd(3); g_Re_S11_vs_t->Draw("AL"); g_Im_S11_vs_t->Draw("P"); g_Re_S11_vs_t->GetXaxis()->SetTitle("t [ns]"); g_Re_S11_vs_t->GetYaxis()->SetTitle("linear S_{11}"); TLegend *leg_time = new TLegend(0.65, 0.65, 0.8, 0.8); leg_time->SetFillColor(0); leg_time->AddEntry(g_Re_S11_vs_t, "Re"); leg_time->AddEntry(g_Im_S11_vs_t, "Im"); leg_time->Draw(); c->cd(4); g_S11_vs_t->Draw("AL"); g_S11_vs_t->GetXaxis()->SetTitle("t [ns]"); g_S11_vs_t->GetYaxis()->SetTitle("S_{11} [dB]"); }