Получаю с прибора (анализатор цепей Agilent) комплексные данные об отраженной волне (s11). Зеркально дополняю массив данных:
Код: Выделить всё
int num_points = data_.numberOfPoints * 2;
scalarRealData_.resize(num_points);
scalarImagData_.resize(num_points);
for(int i=0; i < num_points / 2; ++i)
{
scalarRealData_[num_points - 1 - i]= scalarRealData_[i];
scalarImagData_[num_points - 1 - i]= -scalarImagData_[i];
}
Нормализую массив. (получена импульсная характеристика)
Считаю интеграл (а точнее площадь под графиком импульсной характеристики) (получена переходная характеристика).
Итог получается пока не совсем что я задумал
Программа сыровата конечно нет подписей и т.д., но по горизонтали - время, по вертикали центральная линия - ноль, далее 0.5 и 1 и -0.5, -1. Красный график - импульсная характеристика синий - переходная
Рис 1 рис2 рис3 рис4 Так вот появляется непонятный мне наклон ВНИЗ, из-за чего все сбивается !?!?!?!
А теперь вопрос:
1. С прибора я не могу получить данные о частотах ниже 10 МГц. Как мне быть, ведь я провожу RFFT над неполной выборкой. (например 10 МГц - 1 ГГц 1000 точек) Возможно надо дополнить массив или каким-то образом проводить преобразование только части даннных)?
2. Попробовал применение оконной функции Ханна для начала. код:
Код: Выделить всё
inline double HannFunction(size_t n, size_t N)
{
return .5 * (1 - std::cos(2*M_PI*n/(N-1)));
}
bool CrefMetrDoc::WindowingData(void)
{
int num_points = data_.numberOfPoints;
for(int i=0; i < num_points; ++i)
{
scalarRealData_[i]*= HannFunction(i, num_points);
scalarImagData_[i]*= HannFunction(i, num_points);
}
return true;
}