# MATLAB: How to vectorise the filter function with multiple window-sizes

## MATLAB: How to vectorise the filter function with multiple window-sizes

filterMATLABmoving rmstime-weightedwindow

The task is to calculate the maximum of a moving rms-value of a signal, which is available with a constant timestep dt. So the signal has the length of T*dt and the RMS-value shall be calculated for a period tau=1*dt, tau=2*dt, tau=3*dt, … tau=T*dt. At the end of this calulation the max of the moving rms value shall be selected. Actually I use the filter-function in a for-loop, but maybe it is possible to vectorise the calculation?
The code is below:
``function [tau, werte_eff_H ] = twa_stat_2(signal)% any signal-vector;signal_eff  =   signal.^2;                           % To calculate the RMS-Values no_value    =   size(signal,1); tau         =   (1:1:no_value)';werte_eff_H =   NaN(size(signal,1)+1, no_value);     % Preallocationfor i=1:size(tau,1)    zb_werte_eff        =   sqrt(filter(ones(1,tau(i,1))./tau(i,1),1,[signal_eff(1:no_value); signal_eff(1:tau(i,1)-1,1); 0 ] ));      werte_eff_H(:,i)    =   zb_werte_eff(0+tau(i,1):no_value+tau(i,1),1);                                                          endwerte_eff_H  = werte_eff_H(1:end-1,:);  end``

``function [tau, werte_eff_H ] = twa_stat_2(signal)% any signal-vector;signal_eff  = signal.^2;                           % To calculate the RMS-Values no_value    = size(signal,1); tau         = (1:1:no_value)';werte_eff_H = zeros(size(signal,1), no_value);     % Preallocationsignal2     = [signal_eff; signal_eff];for i=1:no_value    zb_werte_eff     = filter(ones(1,i) ./ i, 1, signal2(1:no_value + i,1));    werte_eff_H(:,i) = zb_werte_eff(i:no_value+i-1,1);endwerte_eff_H = sqrt(werte_eff_H);  end``