diff --git a/_release/.gitignore b/_release/.gitignore deleted file mode 100644 index fd05873..0000000 --- a/_release/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -*.dll -*.c -*.h - - diff --git a/dspl/dox/en/groups_define.dox b/dspl/dox/en/groups_define.dox index 179abd9..767636a 100644 --- a/dspl/dox/en/groups_define.dox +++ b/dspl/dox/en/groups_define.dox @@ -13,6 +13,8 @@ data types conversion. \defgroup WIN_GROUP Windows function for filter design and spectrum analysis. +\defgroup PSD_GROUP Digital spectral analysis + \defgroup HILBERT_GROUP Hilbert transform algorithms. \defgroup FILTER_CONV_GROUP Convolution and digital filtration. diff --git a/dspl/dox/ru/groups_define.dox b/dspl/dox/ru/groups_define.dox index 04cf0c0..8546df9 100644 --- a/dspl/dox/ru/groups_define.dox +++ b/dspl/dox/ru/groups_define.dox @@ -13,6 +13,8 @@ \defgroup WIN_GROUP Функции оконного взвешивания +\defgroup PSD_GROUP Алгоритмы цифрового спектрального анализа + \defgroup HILBERT_GROUP Преобразование Гильберта В данной группе собраны функции реализующие алгоритмы преобразования Гильберта. diff --git a/dspl/src/psd.c b/dspl/src/psd.c index 46fcfbc..eb05426 100644 --- a/dspl/src/psd.c +++ b/dspl/src/psd.c @@ -138,6 +138,103 @@ exit_label: #endif #ifdef DOXYGEN_RUSSIAN +/*! **************************************************************************** +\ingroup PSD_GROUP +\fn +int psd_periodogram(double* x, int n, + int win_type, double win_param, + fft_t* pfft, double fs, + int flag, double* ppsd, double* pfrq) +\brief Непараметрическая оценка спектральной плотности сигнала методом + модифицированной периодограммы + +Функция рассчитывает спектральную плотность мощности \f$ X(f) \f$ +выборки сигнала длительности \$n \$ отсчетов методом модифицированной +периодограммы: + +\f[ + X(f) = \frac{1}{N U F_s} \Big| \sum_{m = 0}^{n-1} w(m) x(m) \exp + \left( -j \frac{2\pi} f m \right) \Big|^2, +\f] +где \f$ w(m) \f$ -- отсчёты оконной функции, \f$ F_s \f$ -- частота +дискретизации (Гц), \f$ U \f$ нормировочный коэффициент равный + +\f[ + U \sum_{m = 0}^{n-1} w^2(m) +\f] + +При использовании прямоугольного окна модифицированная периодограмма переходит +в стандартную периодограмму. + +Расчет спектральной плотности мощности ведется при помощи алгоритмов быстрого +преобразования Фурье, для дискретной сетки частот от 0 Гц до \f$ F_s \f$ Гц +(по умолчанию), или от \f$-F_s /2 \f$ до \f$F_s /2 \f$, если установлен флаг +расчета двусторонней периодограммы. + + +\note Периодограмма, как стандартная, так и модифицированная возвращает +асимптотически несмещенную, но несостоятельную оценку СПМ (уроверь флуктуаций +шумовой составляющей СПМ не уменьшается с ростом длины выборки `n`). + + + +\param[in] x +Указатель на входной вектор вещественного сигнала \f$x(m)\f$, +\f$ m = 0 \ldots n-1 \f$. \n +Размер вектора `[n x 1]`. \n \n + +\param[in] n +Размер вектора входного сигнала. +Также размер выходного вектора СПМ и +вектора частоты также равны `n`.\n\n + +\param[in] win_type +Тип оконной функции, применяемой для модифицированной периодограммы.\n +Подробнее смотри описание функции \ref window. \n\n + + +\param[in] win_type +Параметр оконной функции.\n +Данный параметр используется, если задано параметрическая оконная функция. +Для непараметрических окон данный параметр игнорируется.\n +Подробнее смотри описание функции \ref window. \n\n + +\param[in] pfft +Указатель на структуру `fft_t`. \n +Указатель может быть `NULL`. В этом случае объект структуры будет +создан внутри функции и удален перед завершением.\n +Если предполагается многократный вызов функции, то рекомендуется создать +объект `fft_t` и передавать в функцию, чтобы не создавать его каждый раз. \n\n + +\param[in] fs +частота дискретизации выборки исходного сигнала (Гц). \n\n + +\param[in] flag +Комбинация битовых флагов, задающих режим расчета: +\verbatim +DSPL_FLAG_LOGMAG - СПМ считать в логарифмическом масштабе в единицах дБ/Гц +DSPL_FLAG_PSD_TWOSIDED - двусторонняя СПМ (от -Fs/2 до Fs/2) +\endverbatim + +\param[in, out] ppsd +Указатель на вектор СПМ расчитанных по входному сигналу $x$. \n +Размер вектора `[n x 1]`. \n +Память должна быть выделена. \n\n + +\param[in, out] pfrq +Указатель на вектор частоты, соответсвующей +значениям рассчитанного вектора СПМ. \n +Размер вектора `[n x 1]`. \n +Указатель можеть быть `NULL`,в этом случае вектор частоты не +рассчитывается и не возвращается. \n\n + + +\return +`RES_OK` если расчет произведен успешно. \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n \n + +\author Бахурин Сергей www.dsplib.org +***************************************************************************** */ #endif int DSPL_API psd_periodogram(double* x, int n,