Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fftw3.h>
- #include <cmath>
- #include "print_utilities.h"
- #include <string>
- #include <stdio.h>
- #include <time.h>
- #include <math.h>
- #define REAL 0
- #define IMAG 1
- #define PI 3.14159265
- using namespace std;
- struct input_params{
- double f0;
- double chirp_rate;
- double Fs;
- double Tmod;
- double va;
- double* xa;
- double* xa_offset;
- int Nfft_range;
- double* range_ax;
- double* azimuth_ax;
- int azimuth_ax_size;
- double* Win_range;
- double* Win_azimuth;
- int rg_min_index;
- int rg_max_index;
- };
- void stampa_matrice_complessa(fftw_complex** matrice, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++){
- char spazio = (!((j+1)%m))?'\n':'\t';
- cout << matrice[i][j][REAL] << " " << matrice[i][j][IMAG] << spazio;
- }
- }
- void stampa_matrice_reale(double** matrice, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++){
- char spazio = (!((j+1)%m))?'\n':'\t';
- cout << matrice[i][j] << spazio;
- }
- }
- void inizializza_vettore(double* v, int n){
- for(int i = 0; i < n; i++)
- v[i] = 0;
- }
- double* linspace(double start, double end, int n){
- double* vect = new double[n];
- double step = (end-start)/(n-1);
- for(int i = 0; i < n; i++)
- vect[i] = (step*i)+start;
- return vect;
- }
- void stampa_vettore(double* v, int size){
- for(int i = 0; i < size; i++)
- cout << v[i] << "\t";
- cout << "\n";
- }
- double** create_real_matrix(int n, int m){
- double** matrix = new double*[n];
- for(int i = 0; i < n; i++){
- matrix[i] = new double[m];
- for(int j = 0; j < m; j++)
- matrix[i][j] = 0;
- }
- return matrix;
- }
- double* create_real_vector(int n){
- double* v = new double[n];
- for(int i = 0; i < n; i++)
- v[i] = 0;
- return v;
- }
- void stampa_tensore(double*** tensore, int n, int m, int p){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- for(int k = 0; k < p; k++)
- cout << tensore[i][j][k] << endl;
- }
- fftw_complex*** zeros_3D_complex(int n, int m, int p){
- fftw_complex*** tensore = new fftw_complex**[n];
- for(int i = 0; i < n; i++){
- tensore[i] = new fftw_complex*[m];
- for(int j = 0; j < m; j++){
- tensore[i][j] = new fftw_complex[p];
- for(int k = 0; k < p; k++){
- tensore[i][j][k][REAL] = 0;
- tensore[i][j][k][IMAG] = 0;
- }
- }
- }
- return tensore;
- }
- //fftw_complex*** zeros_3D_complex(int L, int M, int N){
- // fftw_complex*** data;
- //
- // data = (fftw_complex***) fftw_malloc(sizeof(fftw_complex) * L*M*N);
- //
- // for(int l = 0; l < L; l++)
- // for(int m = 0; m < M; m++)
- // for(int n = 0; n < N; n++){
- // data[l][m][n][REAL] = 0;
- // data[l][m][n][IMAG] = 0;
- // }
- // return data;
- //}
- double*** real_zeros(int n, int m, int p){
- double*** tensore = new double**[n];
- for(int i = 0; i < n; i++){
- tensore[i] = new double*[m];
- for(int j = 0; j < m; j++){
- tensore[i][j] = new double[p];
- for(int k = 0; k < p; k++)
- tensore[i][j][k] = 0;
- }
- }
- return tensore;
- }
- fftw_complex** create_complex_matrix(int rows, int columns){
- fftw_complex** matrix = new fftw_complex*[rows];
- for(int i=0; i < rows; i++){
- matrix[i] = new fftw_complex[columns];
- for(int j = 0; j < columns; j++){
- matrix[i][j][REAL] = 0;
- matrix[i][j][IMAG] = 0;
- }
- }
- return matrix;
- }
- void fft(fftw_complex* in, fftw_complex* out, int n){
- fftw_plan plan = fftw_plan_dft_1d(n, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
- fftw_execute(plan);
- fftw_destroy_plan(plan);
- fftw_cleanup();
- }
- void ifft(fftw_complex* in, fftw_complex* out, double n){
- fftw_plan plan = fftw_plan_dft_1d(n, in, out, FFTW_BACKWARD, FFTW_ESTIMATE);
- fftw_execute(plan);
- fftw_destroy_plan(plan);
- fftw_cleanup();
- for(int i = 0; i < n; i++){
- out[i][REAL] /= n;
- out[i][IMAG] /= n;
- }
- }
- void fftshift(fftw_complex* in, int n){
- fftw_complex support[n];
- int mid = (n/2);
- for(int i = mid; i < n; i++){
- support[i][REAL] = in[i-mid][REAL];
- support[i][IMAG] = in[i-mid][IMAG];
- }
- for(int i = 0; i < mid; i++){
- if(n%2 == 1){
- support[i][REAL] = in[i+mid+1][REAL];
- support[i][IMAG] = in[i+mid+1][IMAG];
- }
- else{
- support[i][REAL] = in[i+mid][REAL];
- support[i][IMAG] = in[i+mid][IMAG];
- }
- }
- for(int i = 0; i < n; i++){
- in[i][REAL] = support[i][REAL];
- in[i][IMAG] = support[i][IMAG];
- }
- }
- void ifftshift(fftw_complex* in, int n){
- fftw_complex support[n];
- int mid = (n/2);
- for(int i = mid; i < n; i++){
- support[i-mid][REAL] = in[i][REAL];
- support[i-mid][IMAG] = in[i][IMAG];
- }
- for(int i = 0; i < mid; i++){
- if(n%2){
- support[i+mid+1][REAL] = in[i][REAL];
- support[i+mid+1][IMAG] = in[i][IMAG];
- }
- else{
- support[i+mid][REAL] = in[i][REAL];
- support[i+mid][IMAG] = in[i][IMAG];
- }
- }
- for(int i = 0; i < n; i++){
- in[i][REAL] = support[i][REAL];
- in[i][IMAG] = support[i][IMAG];
- }
- }
- void copy_vector(fftw_complex* source, fftw_complex* destination, int n){
- for(int i = 0; i < n; i++){
- destination[i][REAL] = source[i][REAL];
- destination[i][IMAG] = source[i][IMAG];
- }
- }
- void repmat_scalar_vector(double rep, double* destination, int n){
- for(int i = 0; i < n; i++)
- destination[i] = rep;
- };
- void repmat_colvector_matrix(double* rep, double** destination, int n, int m){
- for(int i = 0; i < m; i++)
- for(int j = 0; j < n; j++)
- destination[j][i] = rep[j];
- }
- void repmat_rowvector_matrix(double* rep, double** destination, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- destination[i][j] = rep[j];
- }
- void repmat_rowvector_tensor(double* rep, double*** tensor, int n, int m, int p){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- for(int k = 0; k < p; k++)
- tensor[i][j][k] = rep[j];
- }
- void scalar_times_vector(double* source, double* target, double scalar, int n){
- for(int i = 0; i < n; i++)
- target[i] = scalar*source[i];
- }
- void vector_time_matrix_scalar(double* vector, double** matrix, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- matrix[i][j] *= vector[i];
- }
- void vector_time_complex_matrix_scalar(double* vector, fftw_complex** matrix, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++){
- matrix[i][j][REAL] *= vector[i];
- matrix[i][j][IMAG] *= vector[i];
- }
- }
- void invvector_time_matrix_scalar(double* vector, double** matrix, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- matrix[i][j] *= 1/vector[i];
- }
- double complex_exponential_real_part(double phi){
- return cos(phi);
- }
- double complex_exponential_imag_part(double phi){
- return sin(phi);
- }
- void matrix_scalar_square(double** matrix, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- matrix[i][j] *= matrix[i][j];
- }
- void matrix_scalar_cube(double** matrix, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- matrix[i][j] *= (matrix[i][j]*matrix[i][j]);
- }
- void vector_scalar_square(double* target, int n){
- for(int i = 0; i < n; i++)
- target[i] *= target[i];
- }
- void matrix_times_scalar(double** matrix, double scalar, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- matrix[i][j] *= scalar;
- }
- void matrix_minus_scalar(double** matrix, double scalar, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- matrix[i][j] -= scalar;
- }
- void complex_matrix_exponential(fftw_complex** target, double** source, int n, int m){
- for(int i = 0; i < n; i++){
- for(int j = 0; j < m; j++){
- target[i][j][REAL] = complex_exponential_real_part(source[i][j]);
- target[i][j][IMAG] = complex_exponential_imag_part(source[i][j]);
- }
- }
- }
- void complex_matrix_member_per_member(fftw_complex** matrix1, fftw_complex** matrix2, fftw_complex** target, int n, int m){
- double a, b, c, d;
- for(int i = 0; i < n; i++){
- for(int j = 0; j < m; j++){
- a = matrix1[i][j][REAL];
- b = matrix1[i][j][IMAG];
- c = matrix2[i][j][REAL];
- d = matrix2[i][j][IMAG];
- target[i][j][REAL] = (a*c) - (b*d);
- target[i][j][IMAG] = (b*c) + (a*d);
- }
- }
- }
- void matrix_member_per_member(double** matrix1, double** matrix2, double** target, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- target[i][j] = matrix1[i][j]*matrix2[i][j];
- }
- void matrix_ratio_member_per_member(double** matrix1, double** matrix2, double** target, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- target[i][j] = matrix1[i][j] / matrix2[i][j];
- }
- void real_matrix_times_complex_matrix_scalar(double** rmatrix, fftw_complex** cmatrix, fftw_complex** target, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++){
- target[i][j][REAL] = cmatrix[i][j][REAL]*rmatrix[i][j];
- target[i][j][IMAG] = cmatrix[i][j][IMAG]*rmatrix[i][j];
- }
- }
- void fast_time_windowing(double* window, fftw_complex** cmatrix, fftw_complex** target, int M, int N){
- for(int m = 0; m < M; m++)
- for(int n = 0; n < N; n++){
- target[m][n][REAL] = cmatrix[m][n][REAL]*window[m];
- target[m][n][IMAG] = cmatrix[m][n][IMAG]*window[m];
- }
- }
- void slow_time_windowing_cube(double* window, fftw_complex*** cmatrix, fftw_complex*** target, int L, int M, int N){
- for(int l = 0; l < L; l++)
- for(int m = 0; m < M; m++)
- for(int n = 0; n < N; n++){
- target[l][m][n][REAL] = cmatrix[l][m][n][REAL]*window[m];
- target[l][m][n][IMAG] = cmatrix[l][m][n][IMAG]*window[m];
- }
- }
- void matrix_minus_matrix(double** matrix1, double** matrix2, double** target, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- target[i][j] = matrix1[i][j] - matrix2[i][j];
- }
- void matrix_scalar_sqrt(double** matrix, double** target, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- target[i][j] = sqrt(matrix[i][j]);
- }
- void matrix_sind(double** matrix, int n, int m){
- for(int i = 0; i < n; i++)
- for(int j = 0; j < m; j++)
- matrix[i][j] = (sin(matrix[i][j]*PI/180));
- }
- void complex_matrix_times_complex_matrix(fftw_complex** matrix1, fftw_complex** matrix2, fftw_complex** target, int n1, int m1, int n2, int m2){
- double a, b, c, d;
- for(int i = 0; i < n1; i++)
- for(int j = 0; j < m2; j++)
- for(int k = 0; k < m1; k++){
- a = matrix1[i][k][REAL];
- b = matrix1[i][k][IMAG];
- c = matrix2[k][j][REAL];
- d = matrix2[k][j][IMAG];
- target[i][j][REAL] += (a*c) - (b*d);
- target[i][j][IMAG] += (b*c) + (a*d);
- }
- }
- void complex_matrix_transposition(fftw_complex** source, fftw_complex** target, int n, int m){
- for(int i = 0; i < m; i++)
- for(int j = 0; j < n; j++){
- target[i][j][REAL] = source[j][i][REAL];
- target[i][j][IMAG] = source[j][i][IMAG];
- }
- }
- fftw_complex*** Frequency_Scaling_Algorithm(input_params ip, fftw_complex*** RawData, int Nmod, int Nsweeps, int Nch, int* Nrange_out){
- double pi = 3.14159265;
- int c = 3e8;
- fftw_complex*** RangeData = zeros_3D_complex(ip.Nfft_range, Nsweeps, Nch);
- double* fast_time = linspace(0, ip.Tmod, Nmod);
- double* fr_ax = linspace(0, ip.Fs, Nmod);
- double* fr_ax_pad = linspace(0, ip.Fs, ip.Nfft_range);
- double r0 = (ip.range_ax[ip.rg_min_index]+ip.range_ax[ip.rg_max_index])/2;
- fftw_complex** TimeDopplerData_appo = create_complex_matrix(Nmod, Nsweeps);
- fftw_complex in[Nsweeps];
- fftw_complex out[Nsweeps];
- /////////////////////////////////////////////////////////////////////////
- //print_1D_array_real("Fast time", fast_time, Nmod); //OK
- //print_1D_array_real("Range frequency axis", fr_ax, Nmod); //OK
- //print_1D_array_real("Range frequency axis padded", fr_ax_pad, ip.Nfft_range); //OK
- //cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- for(int ch = 0; ch < Nch; ch++){
- /*Step 1: Slow Time FFT*/
- for(int i = 0; i < Nmod; i++){
- for(int j = 0; j < Nsweeps; j++){
- in[j][REAL] = RawData[i][j][ch][REAL];
- in[j][IMAG] = RawData[i][j][ch][IMAG];
- }
- fft(in, out, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- //print_1D_array_complex("Slow Time FFT in row", in, Nsweeps); //OK
- //print_1D_array_complex("Slow Time FFT out row", out, Nsweeps); //OK
- /////////////////////////////////////////////////////////////////////////
- fftshift(out, Nsweeps);
- ////////////////////////////////////////////////////////////////////////
- //print_1D_array_complex("Slow Time FFT shift out row", out, Nsweeps); //OK
- /////////////////////////////////////////////////////////////////////////
- copy_vector(out, TimeDopplerData_appo[i], Nsweeps);
- }
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 1 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 2: frequency scaling*/
- double va_r[Nsweeps];
- double fd_a[Nsweeps];
- double beta[Nsweeps];
- double** matrix1 = create_real_matrix(Nmod, Nsweeps);
- double** matrix2 = create_real_matrix(Nmod, Nsweeps);
- double beta_n[Nsweeps];
- fftw_complex** H_FS = create_complex_matrix(Nmod, Nsweeps);
- for(int i = 0; i < Nsweeps; i++)
- va_r[i] = sin(atan((ip.xa[i]+ip.xa_offset[ch])/sqrt((r0*r0)+(ip.xa_offset[ch]*ip.xa_offset[ch]))))*ip.va;
- scalar_times_vector(va_r, fd_a, -2*ip.f0/c, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- //print_1D_array_real("va_r", va_r, Nsweeps); //OK
- //print_1D_array_real("fd_a", fd_a, Nsweeps); //OK
- //cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- scalar_times_vector(fd_a, beta, c/ip.f0/ip.va/2, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- //print_1D_array_real("beta", beta, Nsweeps); //OK
- //cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- for(int i = 0; i < Nsweeps; i++)
- beta[i] = sqrt(1 - (beta[i]*beta[i]));
- for(int i = 0; i < Nsweeps; i++)
- beta_n[i] = 1 - beta[i];
- repmat_rowvector_matrix(beta_n, matrix1, Nmod, Nsweeps);
- repmat_colvector_matrix(fast_time, matrix2, Nmod, Nsweeps);
- matrix_scalar_square(matrix2, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_times_scalar(matrix1, 3.1416*ip.chirp_rate, Nmod, Nsweeps);
- complex_matrix_exponential(H_FS, matrix1, Nmod, Nsweeps);
- complex_matrix_member_per_member(TimeDopplerData_appo, H_FS, TimeDopplerData_appo, Nmod, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 2 H_FS", H_FS, Nmod, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 2 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*step 3: fast-time FFT*/
- fftw_complex** RangeDopplerData_appo = create_complex_matrix(Nmod, Nsweeps);
- fftw_complex in2[Nmod];
- fftw_complex out2[Nmod];
- for(int j = 0; j < Nsweeps; j++){
- for(int i = 0; i < Nmod; i++){ //Errore: Nsweeps al posto di Nmod
- in2[i][REAL] = TimeDopplerData_appo[i][j][REAL]; //Errore; H_FS al posto di TimeDopplerData_appo
- in2[i][IMAG] = TimeDopplerData_appo[i][j][IMAG];
- }
- fft(in2, out2, Nmod);
- for(int i = 0; i < Nmod; i++){
- RangeDopplerData_appo[i][j][REAL] = out2[i][REAL];
- RangeDopplerData_appo[i][j][IMAG] = out2[i][IMAG];
- }
- }
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 3 RangeDopplerData_appo", RangeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 4: RVP correction*/
- fftw_complex** H_RVP = create_complex_matrix(Nmod, Nsweeps);
- double fr_ax_n[Nmod];
- for(int i = 0; i < Nmod; i++)
- fr_ax_n[i] = fr_ax[i]; //a cosa serve fr_ax_n?? mi apre uguale a fr_ax
- /////////////////////////////////////////////////////////////////////////
- // print_1D_array_real("fr_ax", fr_ax, Nmod); //OK
- // print_1D_array_real("fr_ax_n", fr_ax_n, Nmod); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- vector_scalar_square(fr_ax_n, Nmod);
- repmat_colvector_matrix(fr_ax_n, matrix1, Nmod, Nsweeps);
- repmat_rowvector_matrix(beta, matrix2, Nmod, Nsweeps);
- matrix_times_scalar(matrix2, ip.chirp_rate, Nmod, Nsweeps);
- matrix_ratio_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_times_scalar(matrix1, -pi, Nmod, Nsweeps);
- complex_matrix_exponential(H_RVP, matrix1, Nmod, Nsweeps);
- complex_matrix_member_per_member(RangeDopplerData_appo, H_RVP, RangeDopplerData_appo, Nmod, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 4 RangeDopplerData_appo", RangeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 5: fast-time ifft*/
- for(int j = 0; j < Nsweeps; j++){
- for(int i = 0; i < Nmod; i++){ //Errore: Nsweeps al posto di Nmod
- in2[i][REAL] = RangeDopplerData_appo[i][j][REAL];
- in2[i][IMAG] = RangeDopplerData_appo[i][j][IMAG];
- }
- ifft(in2, out2, Nmod);
- for(int i = 0; i < Nmod; i++){
- TimeDopplerData_appo[i][j][REAL] = out2[i][REAL];
- TimeDopplerData_appo[i][j][IMAG] = out2[i][IMAG];
- }
- }
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 5 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 6: inverse frequency scaling*/
- fftw_complex** H_IFS = create_complex_matrix(Nmod, Nsweeps);
- for(int i = 0; i < Nsweeps; i++)
- beta_n[i] = beta[i]*(beta[i]-1);
- repmat_rowvector_matrix(beta_n, matrix2, Nmod, Nsweeps);
- repmat_colvector_matrix(fast_time, matrix1, Nmod, Nsweeps);
- matrix_scalar_square(matrix1, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_times_scalar(matrix1, ip.chirp_rate*pi, Nmod, Nsweeps);
- complex_matrix_exponential(H_IFS, matrix1, Nmod, Nsweeps);
- complex_matrix_member_per_member(TimeDopplerData_appo, H_IFS, TimeDopplerData_appo, Nmod, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 6 H_IFS", H_IFS, Nmod, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 6 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 7: Doppler frequency correction*/
- fftw_complex** H_DFC = create_complex_matrix(Nmod, Nsweeps);
- for(int i = 0; i < Nsweeps; i++)
- beta_n[i] = fd_a[i]*beta[i];
- repmat_rowvector_matrix(beta_n, matrix2, Nmod, Nsweeps);
- repmat_colvector_matrix(fast_time, matrix1, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_times_scalar(matrix1, -2*pi, Nmod, Nsweeps);
- complex_matrix_exponential(H_DFC, matrix1, Nmod, Nsweeps);
- complex_matrix_member_per_member(TimeDopplerData_appo, H_DFC, TimeDopplerData_appo, Nmod, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 7 H_DFC", H_DFC, Nmod, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 7 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 8: secondary range compression*/
- double rc = r0;
- fftw_complex** H_SRC = create_complex_matrix(Nmod, Nsweeps);
- fftw_complex** H_SRC1 = create_complex_matrix(Nmod, Nsweeps);
- fftw_complex** H_SRC2 = create_complex_matrix(Nmod, Nsweeps);
- /* part 1*/
- for(int i = 0; i < Nsweeps; i++)
- beta_n[i] = (beta[i]*beta[i]-1)/(beta[i]*beta[i]*beta[i]);
- repmat_rowvector_matrix(beta, matrix1, Nmod, Nsweeps);
- repmat_colvector_matrix(fast_time, matrix2, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_minus_scalar(matrix1, 2*rc/c, Nmod, Nsweeps);
- matrix_scalar_square(matrix1, Nmod, Nsweeps);
- repmat_rowvector_matrix(beta_n, matrix2, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_times_scalar(matrix1, 2*pi*rc*ip.chirp_rate*ip.chirp_rate/c/ip.f0, Nmod, Nsweeps);
- complex_matrix_exponential(H_SRC1, matrix1, Nmod, Nsweeps);
- /*part 2*/
- for(int i = 0; i < Nsweeps; i++)
- beta_n[i] /= (beta[i]*beta[i]);
- repmat_rowvector_matrix(beta, matrix1, Nmod, Nsweeps);
- repmat_colvector_matrix(fast_time, matrix2, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_minus_scalar(matrix1, 2*rc/c, Nmod, Nsweeps);
- matrix_scalar_cube(matrix1, Nmod, Nsweeps);
- repmat_rowvector_matrix(beta_n, matrix2, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_times_scalar(matrix1, -(2*pi*rc*ip.chirp_rate*ip.chirp_rate*ip.chirp_rate/ip.f0/ip.f0/ip.f0), Nmod, Nsweeps);
- complex_matrix_exponential(H_SRC2, matrix1, Nmod, Nsweeps);
- complex_matrix_member_per_member(H_SRC1, H_SRC2, H_SRC, Nmod, Nsweeps);
- complex_matrix_member_per_member(TimeDopplerData_appo, H_SRC, TimeDopplerData_appo, Nmod, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 8 H_DFC", H_SRC, Nmod, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 8 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 9: bulk range shift*/
- fftw_complex** H_BS = create_complex_matrix(Nmod, Nsweeps);
- for(int i = 0; i < Nsweeps; i++)
- beta_n[i] = (1/beta[i]) -1;
- repmat_rowvector_matrix(beta, matrix1, Nmod, Nsweeps);
- repmat_colvector_matrix(fast_time, matrix2, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_minus_scalar(matrix1, 2*rc/c, Nmod, Nsweeps);
- repmat_rowvector_matrix(beta_n, matrix2, Nmod, Nsweeps);
- matrix_member_per_member(matrix1, matrix2, matrix1, Nmod, Nsweeps);
- matrix_times_scalar(matrix1, 4*pi*ip.chirp_rate/c*rc, Nmod, Nsweeps);
- complex_matrix_exponential(H_BS, matrix1, Nmod, Nsweeps);
- complex_matrix_member_per_member(TimeDopplerData_appo, H_BS, TimeDopplerData_appo, Nmod, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 9 H_BS", H_BS, Nmod, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 9 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 10: range windowing*/
- fftw_complex** RawData_filt = create_complex_matrix(Nmod, Nsweeps);
- fast_time_windowing(ip.Win_range, TimeDopplerData_appo, RawData_filt, Nmod, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 10 TimeDopplerData_appo", TimeDopplerData_appo, Nmod, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 10 RawData_filt", RawData_filt, Nmod, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 11: final range compressione*/
- fftw_complex** RangeDopplerData_filt = create_complex_matrix(ip.Nfft_range, Nsweeps);
- fftw_complex in3[ip.Nfft_range];
- fftw_complex out3[ip.Nfft_range];
- for(int j = 0; j < Nsweeps; j++){
- for(int i = 0; i < ip.Nfft_range; i++){
- if(i < Nmod){
- in3[i][REAL] = RawData_filt[i][j][REAL]; //Errore: usato in2 e out2 al posto di in3 e out3
- in3[i][IMAG] = RawData_filt[i][j][IMAG];
- }else{
- in3[i][REAL] = 0;
- in3[i][IMAG] = 0;
- }
- }
- fft(in3, out3, ip.Nfft_range);
- for(int i = 0; i < ip.Nfft_range; i++){
- RangeDopplerData_filt[i][j][REAL] = out3[i][REAL];
- RangeDopplerData_filt[i][j][IMAG] = out3[i][IMAG];
- }
- }
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 11 RangeDopplerData_filt", RangeDopplerData_filt, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 12: phase preservation*/
- fftw_complex** H_PPC = create_complex_matrix(ip.Nfft_range, Nsweeps);
- double** matrix3 = create_real_matrix(ip.Nfft_range, Nsweeps);
- double** matrix4 = create_real_matrix(ip.Nfft_range, Nsweeps);
- repmat_colvector_matrix(fr_ax_pad, matrix3, ip.Nfft_range, Nsweeps);
- repmat_rowvector_matrix(beta, matrix4, ip.Nfft_range, Nsweeps);
- matrix_ratio_member_per_member(matrix3, matrix4, matrix3, ip.Nfft_range, Nsweeps);
- matrix_times_scalar(matrix3, (4*pi*rc/c), ip.Nfft_range, Nsweeps);
- complex_matrix_exponential(H_PPC, matrix3, ip.Nfft_range, Nsweeps);
- complex_matrix_member_per_member(RangeDopplerData_filt, H_PPC, RangeDopplerData_filt, ip.Nfft_range, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 12 H_PPC", H_PPC, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 12 RangeDopplerData_filt", RangeDopplerData_filt, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 13: final azimuth IFFT*/
- fftw_complex** RangeData_filt = create_complex_matrix(ip.Nfft_range, Nsweeps);
- for(int i = 0; i < ip.Nfft_range; i++)
- ifftshift(RangeDopplerData_filt[i], Nsweeps);
- for(int i = 0; i < ip.Nfft_range; i++){
- for(int j = 0; j < Nsweeps; j++){
- in[j][REAL] = RangeDopplerData_filt[i][j][REAL];
- in[j][IMAG] = RangeDopplerData_filt[i][j][IMAG];
- }
- ifft(in, out, Nsweeps); //Errore: usato fft al posto ifft
- //fftshift(out, Nsweeps);
- copy_vector(out, RangeData_filt[i], Nsweeps);
- }
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_complex("Step 13 RangeData_filt", RangeData_filt, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Step 14: azimuth compression*/
- double* xa_n = create_real_vector(Nsweeps);
- double** RR_stolt = create_real_matrix(ip.Nfft_range, Nsweeps);
- fftw_complex** H_AMF = create_complex_matrix(ip.Nfft_range, Nsweeps);
- for(int i = 0; i < Nsweeps; i++)
- xa_n[i] = ip.xa[i] + ip.xa_offset[ch];
- /////////////////////////////////////////////////////////////////////////
- // print_1D_array_real("Step 14 xa_n", xa_n, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- repmat_colvector_matrix(ip.range_ax, matrix3, ip.Nfft_range, Nsweeps);
- repmat_rowvector_matrix(xa_n, matrix4, ip.Nfft_range, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_real("Step 14 matrix3", matrix3, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_real("Step 14 matrix4", matrix4, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- matrix_scalar_square(matrix3, ip.Nfft_range, Nsweeps);
- matrix_scalar_square(matrix4, ip.Nfft_range, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_real("Step 14 matrix3", matrix3, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_real("Step 14 matrix4", matrix4, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- matrix_minus_matrix(matrix3, matrix4, matrix4, ip.Nfft_range, Nsweeps);
- matrix_scalar_sqrt(matrix4, RR_stolt, ip.Nfft_range, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_real("Step 14 matrix4", matrix4, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_real("Step 14 RR_stolt", RR_stolt, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- matrix_times_scalar(RR_stolt, 4*pi*ip.f0*rc/c, ip.Nfft_range, Nsweeps);
- complex_matrix_exponential(H_AMF, RR_stolt, ip.Nfft_range, Nsweeps);
- complex_matrix_member_per_member(RangeData_filt, H_AMF, RangeData_filt, ip.Nfft_range, Nsweeps);
- /////////////////////////////////////////////////////////////////////////
- // print_2D_array_real("Step 14 RR_stolt", RR_stolt, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 14 H_AMF", H_AMF, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- // print_2D_array_complex("Step 14 RangeData_filt", RangeData_filt, ip.Nfft_range, Nsweeps); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Finish*/
- for(int i = 0; i < ip.Nfft_range; i++)
- for(int j = 0; j < Nsweeps; j++){
- RangeData[i][j][ch][REAL] = RangeData_filt[i][j][REAL];
- RangeData[i][j][ch][IMAG] = RangeData_filt[i][j][IMAG];
- }
- }
- /*Monostatic equivalent correction*/
- double** matrix5 = create_real_matrix(ip.Nfft_range, Nsweeps);
- double** eq_mono_corr = create_real_matrix(ip.Nfft_range, Nsweeps);
- fftw_complex** H_eq_mono_corr = create_complex_matrix(ip.Nfft_range, Nsweeps);
- fftw_complex** matrix_supp = create_complex_matrix(ip.Nfft_range, Nsweeps);
- for(int ch = 0; ch < Nch; ch++){
- repmat_colvector_matrix(ip.range_ax, matrix5, ip.Nfft_range, Nsweeps);
- matrix_scalar_square(matrix5, ip.Nfft_range, Nsweeps);
- matrix_minus_scalar(matrix5, (ip.xa_offset[ch]*ip.xa_offset[ch]), ip.Nfft_range, Nsweeps);
- matrix_scalar_sqrt(matrix5, eq_mono_corr, ip.Nfft_range, Nsweeps);
- matrix_times_scalar(eq_mono_corr, 4*pi*ip.f0/c, ip.Nfft_range, Nsweeps);
- complex_matrix_exponential(H_eq_mono_corr, eq_mono_corr, ip.Nfft_range, Nsweeps);
- for(int i = 0; i < ip.Nfft_range; i++)
- for(int j = 0; j < Nsweeps; j++){
- matrix_supp[i][j][REAL] = RangeData[i][j][ch][REAL];
- matrix_supp[i][j][IMAG] = RangeData[i][j][ch][IMAG];
- }
- complex_matrix_member_per_member(matrix_supp, H_eq_mono_corr, matrix_supp, ip.Nfft_range, Nsweeps);
- for(int i = 0; i < ip.Nfft_range; i++)
- for(int j = 0; j < Nsweeps; j++){
- RangeData[i][j][ch][REAL] = matrix_supp[i][j][REAL];
- RangeData[i][j][ch][IMAG] = matrix_supp[i][j][IMAG];
- }
- }
- /////////////////////////////////////////////////////////////////////////
- // print_3D_array_complex("RangeData after monostatic range correction", RangeData, ip.Nfft_range, Nsweeps, Nch); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Range gating*/ //credo fosse tutto sbagliato
- int Nrange = ip.rg_max_index - ip.rg_min_index + 1;
- fftw_complex*** RangeData_n = zeros_3D_complex(Nrange, Nsweeps, Nch);
- int i_n = 0;
- for(int i = ip.rg_min_index; i <= ip.rg_max_index; i++){
- for(int j = 0; j < Nsweeps; j++)
- for(int ch = 0; ch < Nch; ch++){
- RangeData_n[i_n][j][ch][REAL] = RangeData[i][j][ch][REAL];
- RangeData_n[i_n][j][ch][IMAG] = RangeData[i][j][ch][IMAG];
- // cout << "i=" << i << "i_n=" << i_n << "j=" << j << "ch=" << ch << "\n";
- }
- i_n++;
- }
- *Nrange_out = Nrange;
- /////////////////////////////////////////////////////////////////////////
- // print_3D_array_complex("RangeData before range gating", RangeData, ip.Nfft_range, Nsweeps, Nch); //OK
- // cout << "\n";
- // print_3D_array_complex("RangeData after range gating", RangeData_n, Nrange, Nsweeps, Nch); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Slow-time windowing*/
- // double*** matrix6;
- // matrix6 = real_zeros(Nrange, Nsweeps, Nch);
- // repmat_rowvector_tensor(ip.Win_azimuth, matrix6, Nrange, Nsweeps, Nch); //operazione evitabile
- // for(int i = 0; i < Nrange; i++)
- // for(int j = 0; j < Nsweeps; j++)
- // for(int k = 0; k < Nch; k++){
- // RangeData_n[i][j][k][REAL] *= matrix6[i][j][k];
- // RangeData_n[i][j][k][IMAG] *= matrix6[i][j][k];
- // }
- slow_time_windowing_cube(ip.Win_azimuth, RangeData_n, RangeData_n, Nrange, Nsweeps, Nch);
- /////////////////////////////////////////////////////////////////////////
- // print_3D_array_complex("RangeData after slow-time windowing", RangeData_n, Nrange, Nsweeps, Nch); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- /*Beamforming (DFT)*/
- fftw_complex*** IMM = zeros_3D_complex(Nrange, ip.azimuth_ax_size, Nch);
- fftw_complex** W = create_complex_matrix(ip.azimuth_ax_size, Nsweeps);
- fftw_complex** W_transp = create_complex_matrix(Nsweeps, ip.azimuth_ax_size);
- double** X_a = create_real_matrix(ip.azimuth_ax_size, Nsweeps);
- double** AZ_ax = create_real_matrix(ip.azimuth_ax_size, Nsweeps);
- repmat_rowvector_matrix(ip.xa, X_a, ip.azimuth_ax_size, Nsweeps);
- repmat_colvector_matrix(ip.azimuth_ax, AZ_ax, ip.azimuth_ax_size, Nsweeps);
- matrix_sind(AZ_ax, ip.azimuth_ax_size, Nsweeps);
- matrix_member_per_member(X_a, AZ_ax, X_a, ip.azimuth_ax_size, Nsweeps);
- matrix_times_scalar(X_a, 4*pi*ip.f0/c, ip.azimuth_ax_size, Nsweeps);
- complex_matrix_exponential(W, X_a, ip.azimuth_ax_size, Nsweeps);
- complex_matrix_transposition(W, W_transp, ip.azimuth_ax_size, Nsweeps);
- fftw_complex** matrix7 = create_complex_matrix(Nrange, Nsweeps);
- fftw_complex** matrix8 = create_complex_matrix(Nrange, ip.azimuth_ax_size);
- for(int ch = 0; ch < Nch; ch++){
- for(int i = 0; i < Nrange; i++)
- for(int j = 0; j < Nsweeps; j++){
- matrix7[i][j][REAL] = RangeData_n[i][j][ch][REAL];
- matrix7[i][j][IMAG] = RangeData_n[i][j][ch][IMAG];
- }
- complex_matrix_times_complex_matrix(matrix7, W_transp, matrix8, Nrange, Nsweeps, Nsweeps, ip.azimuth_ax_size);
- for(int i = 0; i < Nrange; i++)
- for(int j = 0; j < ip.azimuth_ax_size; j++){
- IMM[i][j][ch][REAL] = matrix8[i][j][REAL];
- IMM[i][j][ch][IMAG] = matrix8[i][j][IMAG];
- }
- }
- /////////////////////////////////////////////////////////////////////////
- // print_3D_array_complex("IMM", IMM, Nrange, Nsweeps, Nch); //OK
- // cout << "\n";
- /////////////////////////////////////////////////////////////////////////
- return IMM;
- }
- int read_from_file_2D_array_complex(fftw_complex** data, char* filename, int L, int M){
- FILE* pFile = NULL;
- unsigned long int lSize = 0;
- size_t result = 0;
- long int i = 0;
- //Open file
- pFile = fopen(filename, "rb");
- if (pFile==NULL){
- fputs ("File open error\n",stderr);
- return (-1);
- }
- //Get file size
- fseek (pFile , 0 , SEEK_END);
- lSize = ftell(pFile);
- rewind (pFile);
- //Copy the file into the buffer
- double* buffer_real = new double[lSize/2];
- double* buffer_imag = new double[lSize/2];
- result = fread(buffer_real,1,lSize/2,pFile);
- if (result!=lSize/2){
- fputs ("File read error\n",stderr);
- return (-1);
- }
- result = fread(buffer_imag,1,lSize/2,pFile);
- if (result!=lSize/2){
- fputs ("File read error\n",stderr);
- return (-1);
- }
- for(int l = 0; l < L; l++)
- for(int m = 0; m < M; m++){
- data[l][m][REAL] = buffer_real[i];
- data[l][m][IMAG] = buffer_imag[i];
- i++;
- }
- //Close file
- fclose(pFile);
- return 0;
- }
- int read_from_file_3D_array_complex(fftw_complex*** data, char* filename, int L, int M, int N){
- FILE* pFile = NULL;
- unsigned long int lSize = 0;
- size_t result = 0;
- long int i = 0;
- //Open file
- pFile = fopen(filename, "rb");
- if (pFile==NULL){
- fputs ("File open error\n",stderr);
- return (-1);
- }
- //Get file size
- fseek (pFile , 0 , SEEK_END);
- lSize = ftell(pFile);
- rewind (pFile);
- //Copy the file into the buffer
- double* buffer_real = new double[lSize/2];
- double* buffer_imag = new double[lSize/2];
- result = fread(buffer_real,1,lSize/2,pFile);
- if (result!=lSize/2){
- fputs ("File read error\n",stderr);
- return (-1);
- }
- result = fread(buffer_imag,1,lSize/2,pFile);
- if (result!=lSize/2){
- fputs ("File read error\n",stderr);
- return (-1);
- }
- for(int l = 0; l < L; l++)
- for(int m = 0; m < M; m++)
- for(int n = 0; n < N; n++){
- data[l][m][n][REAL] = buffer_real[i];
- data[l][m][n][IMAG] = buffer_imag[i];
- i++;
- }
- //Close file
- fclose(pFile);
- return 0;
- }
- int write_to_file_3D_array_complex(fftw_complex*** data, char* filename, int L, int M, int N){
- FILE* pFile = NULL;
- //Open file
- pFile = fopen(filename, "wb");
- if (pFile==NULL){
- fputs ("File open error\n",stderr);
- return (-1);
- }
- //Write buffer to file
- for(int l = 0; l < L; l++)
- for(int m = 0; m < M; m++)
- for(int n = 0; n < N; n++){
- fwrite(&data[l][m][n][REAL] , sizeof(double), 1, pFile);
- fwrite(&data[l][m][n][IMAG] , sizeof(double), 1, pFile);
- }
- //Close file
- fclose(pFile);
- return 0;
- }
- int write_to_file_2D_array_complex(fftw_complex** data, char* filename, int L, int M){
- FILE* pFile = NULL;
- //Open file
- pFile = fopen(filename, "wb");
- if (pFile==NULL){
- fputs ("File open error\n",stderr);
- return (-1);
- }
- //Write buffer to file
- for(int l = 0; l < L; l++)
- for(int m = 0; m < M; m++){
- fwrite(&data[l][m][REAL] , sizeof(double), 1, pFile);
- fwrite(&data[l][m][IMAG] , sizeof(double), 1, pFile);
- }
- //Close file
- fclose(pFile);
- return 0;
- }
- int main(){
- int Nmod = 1222;
- int Nsweeps = 235;//586;
- int Nch = 4;
- int Nrange = 0;
- fftw_complex*** RawData = NULL;
- fftw_complex*** Complex_Image = NULL;
- input_params InputParams;
- InputParams.f0 = 13.6e9;
- InputParams.chirp_rate = 2.0040e12;
- InputParams.Fs = 2.5e6;
- InputParams.Tmod = 4.8900e-4;
- InputParams.va = -0.1164;
- InputParams.Nfft_range = 2048;
- InputParams.azimuth_ax_size = 250;
- InputParams.xa = linspace(-0.6822, 0.6822, Nsweeps);
- InputParams.xa_offset = create_real_vector(Nch);
- InputParams.range_ax = linspace(1.9924, 40.0055, InputParams.Nfft_range );
- InputParams.azimuth_ax = linspace(-25,25,InputParams.azimuth_ax_size);
- InputParams.Win_range = create_real_vector(Nmod);
- InputParams.Win_azimuth = create_real_vector(InputParams.azimuth_ax_size);
- InputParams.rg_min_index = 84;
- InputParams.rg_max_index = 1325;
- //Define range window
- for(int i = 0; i < Nmod; i++)
- InputParams.Win_range[i] = 1;
- //Define azimuth window
- for(int j = 0; j < Nsweeps; j++)
- InputParams.Win_azimuth[j] = 1;
- //Initialize RaData
- RawData = zeros_3D_complex(Nmod, Nsweeps, Nch);
- // for(int ch = 0; ch < Nch; ch++)
- // for(int i = 0; i < Nmod; i++)
- // for(int j = 0; j < Nsweeps; j++){
- // RawData[i][j][ch][REAL] = i;
- // RawData[i][j][ch][IMAG] = j;
- // }
- //Read RawData from binary file
- read_from_file_3D_array_complex(RawData, "/home/slischi/Desktop/RawData_test.bin", Nmod, Nsweeps, Nch);
- // print_3D_array_complex("RawData", RawData, Nmod, Nsweeps, Nch);
- // //Write RawData to file
- // write_to_file_3D_array_complex(RawData, "/home/slischi/Desktop/RawData_readback_test.bin", Nmod, Nsweeps, Nch);
- //Frequency Scaling Algorithm
- clock_t start = clock();
- Complex_Image = Frequency_Scaling_Algorithm(InputParams, RawData, Nmod, Nsweeps, Nch, &Nrange);
- clock_t end = clock();
- printf("Tempo di esecuzione = %f secondi \n", ((double)(end - start)) / CLOCKS_PER_SEC);
- //Write Complex_Image to file
- write_to_file_3D_array_complex(Complex_Image, "/home/slischi/Desktop/Image_test.bin", Nrange, InputParams.azimuth_ax_size, Nch);
- cout << "Done\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement