Как округлить кривую (убрать острые углы) в 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);