Я новичок в обработке сигналов, и у меня много проблем с пониманием документации по реализации фильтра нижних частот, что, как мне кажется, мне нужно. Пример того, с чем я работаю, показан на рис.1.
Сигналом являются изменения кислородной амперометрии, которые обязательно медленные. Я пытался использовать функцию поиска пиков в Matlab, которая неплохо справляется с поиском пиков, но я не могу заставить ее найти подходящую ширину, поскольку она рассматривает все меньшие пики вместо одного большого. Например, см. рис.2. Меня в первую очередь интересуют пики 1,2 и 4. Findpeaks хорошо справляется с шириной пиков 1 и 3, но в 4 считает, что это небольшой пик. Изменение коэффициентов в функции findpeaks также не помогает, поскольку даже если меньшие пики могут не отображаться в выходных данных, findpeaks по-прежнему учитывает их при анализе. На рис. 2 мне удалось заставить findpeaks подавить вывод пиков вблизи пика 4, но это не помогает оценить его ширину.
Я почти уверен, что ответом на мою проблему является предварительная обработка, но сглаживание, такое как скользящее среднее, не совсем улавливает то, что мне нужно, и поэтому я думаю, что мне нужен более продвинутый фильтр, например фильтр нижних частот. Может ли кто-нибудь предложить начальные параметры в каком-либо коде для работы? У меня проблемы с запуском любой реализации. Пример набора данных находится в файле ExData.xlsx, где точка времени 0 — это интересующее событие.
ПРИМЕЧАНИЕ.
Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech ,ME,M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.
Я не уверен, какой результат вы хотите.
Вот прототип конструкции фильтра нижних частот, с которым вы можете поэкспериментировать. Он имеет частоту полосы пропускания 0,08 Гц (все, что выше этого, он останавливает) и достаточно короткую переходную область. Я помогу вам доработать его, чтобы он делал то, что вы хотите, а также помогу с findpeaks.
Фильтр —
[D,S] = xlsread('ExData.xlsx'); t = D(:,1); s = D(:,2); figure plot(t,s) % Plot Original Signal grid Ts = mean(diff(t)); % Sampling Interval L = numel(t); Fs = 1/Ts; % Sampling Frequency Fn = Fs/2; % Nyquist Frequency smc = s-mean(s); % Subtract Mean (0 Hz) FTs = fft(smc)/L; % Fourier Transform Fv = linspace(0,1,fix(L/2)+1)*Fn; % Frequency Vector Iv = 1:numel(Fv); % Index Vector
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ