Как округлить кривую (убрать острые углы) в Matlab

Предположим, есть две кривые (описанные двумя группами данных): кривая 1 и кривая 2. Две кривые имеют более двух точек пересечения. Новая кривая 3 получается путем сохранения верхней части двух кривых. Проблема в том, что в точках пересечения на кривой 3 есть несколько острых углов. Как сгладить кривую, округлив эти углы с помощью matlab?

2 ответа

Решение

Применить свертку с фильтром нижних частот?

n = 4; %// adjust as needed. Higher value gives more smoothing
curve3_smooth = conv(curve3, ones(1,n)/n, 'same');

Лучшей идеей, как отмечает @Hoki, является применение фильтра дважды: один раз вперед и один раз назад, чтобы сделать операцию сглаживания симметричной. Вы можете достичь этого с filtfilt:

n = 2;
curve3_smooth = filtfilt(ones(1,n)/n, 1, curve3);

Заимствование из поста Луиса Мендо и ваших комментариев в его посте, если вам даны 2D-данные, где каждый столбец представляет собой один вектор, и вы хотите отфильтровать каждый из столбцов отдельно, тогда используйте filter вместо. Вы бы указали размер 1, так как вы хотите фильтровать вдоль строк. В качестве таких:

%// adjust as needed
n = 4;
smooth_curve = filter(ones(1,n)/n, 1, u, [], 1);
Другие вопросы по тегам