#pragma once
#ifndef SARIMAGEBASE_H
#define SARIMAGEBASE_H
/**
* 成像过程中常用的计算函数
****/
#include "referenceHeader.h"
#include "SARBaseTool.h"
// ------------------------------------------- 成像 公用库----------------------------------------------------------
// SAR 常用计算的方法
double getRangeResolution(double startfreq, double endfreq);
///
/// 方位向分辨率计算
///
/// 弧度制,方位角变化范围(>=0)
/// 起始频率
///
double getAzimuthResolution(double AzAngleRange, double startFreq);
// 根据输入数量构建汉明窗
Eigen::MatrixXd hammingWindows(size_t num);
// 频率域汉明窗口
///
/// 频率域汉明窗口
///
/// 频率点数
/// 脉冲数量
/// 权重
/// 汉明窗权重
Eigen::MatrixXd Hanning(size_t Nf, size_t Nxa, double alpha = 0.54);
///
/// 获取2的平方数,大于2
///
///
///
size_t nextpow2(size_t num);
///
/// 对回波沿着行进行一维傅里叶逆变换
///
///
///
Eigen::MatrixXcd IFFTW1D(Eigen::MatrixXcd ECHO);
///
/// 对回波沿着行进行一维傅里叶变换
///
///
///
Eigen::MatrixXcd FFTW1D(Eigen::MatrixXcd echo);
Eigen::MatrixXcd FFTW2D(Eigen::MatrixXcd ECHO);
Eigen::MatrixXcd fftshift(Eigen::MatrixXcd X);
///
/// 对回波 加 hamming 窗
///
/// 频域的回波数据(PRFnum,Freqnum)
///
Eigen::MatrixXcd HammingWindows(Eigen::MatrixXcd FreqEcho);
///
/// 对回波进行一维插值(并行),不能用来处理极坐标
/// 插值方式为 实部虚部分别进行线性插值
///
/// 回波数据,(行数,列数):(PRFNUM,freqNUM)
/// 回波的 原始频率列表
/// 回波的 插值频率列表
///
Eigen::MatrixXcd InterpFreqEcho(Eigen::MatrixXcd freqEcho, Eigen::VectorXd SourceFreqlist, Eigen::VectorXd interpFreqlist);
///
/// 保存复数矩阵数据 为tiff, 其中,band 1: amp (linear) angle(radia)
///
///
///
///
int WriteComplexData2Amp_Arg(QString out_tiff_path, Eigen::MatrixXcd data);
///
/// 保存复数矩阵数据 为tiff, 其中,band 1: amp (dB) angle(radia)
///
///
///
///
int WriteComplexData2AmpdB_Arg(QString out_tiff_path, Eigen::MatrixXcd data);
// ----------------------------------------------------------------------------------------------------------
#endif