#matlab #signal-processing
#matlab #обработка сигналов
Вопрос:
У меня есть 3 сигнала: 2 входа и 1 выход для химического процесса. 2 входа отбираются равномерно каждую минуту, в то время как выходные данные должны отбираться ровно каждые 30 минут, у меня они отбираются иногда каждые 40 минут или 50 и т.д…
Мой выходной сигнал заботится только о 30-минутных дискретизированных входных данных и не более того, т.Е. Каждый из входов имеет общий отклик на выход от 0 до 30 минут.
Как я могу выполнить повторную выборку всего в Matlab, чтобы оно превратилось в серию временных интервалов в 30 минут?
Ответ №1:
То, что вы хотите сделать, это интерполяция. Основным методом для этого в одном измерении является использование interp1
. Сначала прочитайте методы и решите, какой метод лучше всего соответствует вашим потребностям.
Представьте val
, что это ваши точки данных и t
вектор времени сбора данных. Вы можете интерполировать данные по вектору времени T
следующим образом:
t = [0 40 80 120 170 220 270];
val = rand(1, 7);
T = min(t):30:max(t);
Method = 'pchip'; % or whatever you prefer
vq = interp1(t, val, T, Method);
Вот как выглядит вывод, vq
,:
Ответ №2:
Кажется, что это система управления процессом, вы должны использовать symulink для этого, думает:
это учебное пособие в формате PDF для управления процессом:
http://homepages.lboro.ac.uk /~cgzkn/processcontrol/simulink4controlnewsinglepage.pdf
возвращаясь к вашему вопросу, в matlab вы могли бы использовать повторную выборку (также будьте осторожны с наложением псевдонимов сигнала), в вашем случае
y = повторная выборка (x, p, q) выполняет повторную выборку входной последовательности, x, со скоростью p / q, умноженной на исходную частоту дискретизации. Если x является матрицей, то повторная выборка обрабатывает каждый столбец x как независимый канал. повторная выборка применяет к x сглаживающий фильтр нижних частот FIR и компенсирует задержку, вносимую фильтром.
итак, у вас есть сигнал, который вам нужно передискретизировать с коэффициентом 30 fs1 / fs2 ((1/60) / (1/(60*30)) = 30, в этом случае вы могли бы сделать что-то вроде этого:
OutputResampled = resample(outputSignal,30,1)
Комментарии:
1. Какое отношение Simulink имеет к вопросу …?