kyb
@kyb
любозналельный программист, сисадмин, эмбеддер

Как проинтегрировать (найти первообразную) цифрового сигнала на C++?

Имеется сигнал представленный в виде массива значений, частоты дискретизации (или периода), и временного штампа. Нужно его проинтегрировать. Формула как по ссылке не особенно помогает.
Кто знает как это делается?
  • Вопрос задан
  • 739 просмотров
Решения вопроса 1
kyb
@kyb Автор вопроса
любозналельный программист, сисадмин, эмбеддер
Матчасть тут vunivere.ru/work10048 Похоже то, что нужно.
И ещё дискретная первообразная studopedia.info/1-113131.html
Получился совешенно босяцкий рабочий код
class Antiderivative
{
private: //variables
	//size_t isize;  /// период интегрирования, TODO орраничеение периода (динамический кольцевой буффер)
	float XN=0;      /// накопленная сумма-первообразная
public:
    void count( float in[], size_t len, float out[] ){
        //X[k] - X[N] = sum(i=N,i<k)x[i];
        for( size_t i=0; i<len; ++i ){
            out[i] = count(in[i]);
         }
    } 
	/// считает одно значение
	float count( float in ){
                float ret = XN;
		XN += in;
		return ret;
	}
};

Наваял скоренько проект в Qt с визуализацией для проверки, если кому-то надо найду выложу.

Обновил. Если ещё вариант интегртрования сигнала на основе альфа-бэта фильтра (упрощённого Калмана). По концовке на нём сделал.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Проинтегрировать тут не выйдет, поскольку сигнал конечный, а для интегрирования подавай бесконечный.
Если вы хотите получить спектр сигнала в частотной области, то вам нужно быстрое преобразование Фурье (FFT). Можете начать отсюда: www.fftw.org
Во многих математических библиотеках есть реализации, например в Intel Math Kernel Library.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы