Привет, я химик и хочу немного сгладить свои данные, но не хочу, чтобы это было радикально, поэтому я пытался использовать y=sgolayfilt(x,order,framelen) в MATLAB и ввести полиномиальный порядок, например, более 500, но каждый раз, когда я пытаюсь использовать порядок выше 110, функция возвращает 'NaN' для всей моей матрицы.

Это потому, что фильтр не может поддерживать полиномы больше 110? Или есть способ обойти это, что позволит мне использовать полиномы более высокого порядка? Я уверен, что раньше мог использовать полиномы выше 110.

ОТВЕЧАТЬ

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech , ME, M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Я подозреваю, что вы путаете порядок и длину окна фильтра.

Вы должны сначала попробовать фильтры низкого порядка (скажем, от 1 до 3), а затем изменить длину окна.

порядок выше 100 кажется мне выходом за пределы полезного диапазона

Для чего это стоит, ниже код с различными методами сглаживания

Fs = 1000;
samples = 1000;
dt = 1/Fs;
t = (0:samples-1)*dt;
y = square(2*pi*3*t) + 0.1*randn(size(t));
% %%%%%%%%%%%%%%%%
figure(1)
N = 10;
ys = slidingavg(y, N);
plot(t,y,t,ys);legend('Raw','Smoothed');
title(['Data samples at Fs = ' num2str(round(Fs)) ' Hz / Smoothed with slidingavg' ]);
% %%%%%%%%%%%%%%%%
figure(2)
N = 10;
ys = medfilt1(y, N,'truncate');
plot(t,y,t,ys);legend('Raw','Smoothed');
title(['Data samples at Fs = ' num2str(round(Fs)) ' Hz / Smoothed with medfilt1' ]);
grid on
%%%%%%%%%%%%%%%%
figure(3)
N = 10;
ys = sgolayfilt(y,3,51);
plot(t,y,t,ys);legend('Raw','Smoothed');
title(['Data samples at Fs = ' num2str(round(Fs)) ' Hz / Smoothed with sgolayfilt' ]);
grid on
%%%%%%%%%%%%%%%%
NN = 4;
Wn = 0.1;
[B,A] = butter(NN,Wn);

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ