<div dir="ltr">Dear Jumana,<div><br></div><div>I don't know much about this process, but it looks like it upsample first, filter, then downsample to the desired frequency in the following way (hence the function name!) upfirdn() is a function called from within resample().</div><div><br></div><div>Makoto</div><div><br></div><div><br><div><br></div><div><div>>> help upfirdn</div><div> upfirdn  Upsample, apply a specified FIR filter, and downsample a signal.</div><div>    upfirdn(X,H,P,Q) is a cascade of three systems applied to input signal X:</div><div>          (1) Upsampling by P (zero insertion).  P defaults to 1 if not </div><div>              specified.</div><div>          (2) FIR filtering with the filter specified by the impulse response </div><div>              given in H.</div><div>          (3) Downsampling by Q (throwing away samples).  Q defaults to 1 if not </div><div>              specified.</div><div>    upfirdn uses an efficient polyphase implementation.</div><div> </div><div>    Usually X and H are vectors, and the output is a (signal) vector. </div><div>    upfirdn permits matrix arguments under the following rules:</div><div>    If X is a matrix and H is a vector, each column of X is filtered through H.</div><div>    If X is a vector and H is a matrix, each column of H is used to filter X.</div><div>    If X and H are both matrices with the same number of columns, then the i-th</div><div>       column of H is used to filter the i-th column of X.</div><div> </div><div>    Specifically, these rules are carried out as follows.  Note that the length</div><div>    of the output is Ly = ceil( ((Lx-1)*P + Lh)/Q ) where Lx = length(X) and </div><div>    Lh = length(H). </div><div> </div><div>       Input Signal X    Input Filter H    Output Signal Y   Notes</div><div>       -----------------------------<wbr>------------------------------<wbr>------</div><div>    1) length Lx vector  length Lh vector  length Ly vector  Usual case.</div><div>    2) Lx-by-Nx matrix   length Lh vector  Ly-by-Nx matrix   Each column of X</div><div>                                                             is filtered by H.</div><div>    3) length Lx vector  Lh-by-Nh matrix   Ly-by-Nh matrix   Each column of H is</div><div>                                                             used to filter X.</div><div>    4) Lx-by-N matrix    Lh-by-N matrix    Ly-by-N matrix    i-th column of H is</div><div>                                                             used to filter i-th</div><div>                                                             column of X.</div><div> </div><div>    For an easy-to-use alternative to upfirdn, which does not require you to </div><div>    supply a filter or compensate for the signal delay introduced by filtering,</div><div>    use RESAMPLE.</div><div> </div><div>    EXAMPLE: Sample-rate conversion by a factor of 147/160. It is used to</div><div>             % downconvert from 48kHz to 44.1kHz.</div><div>             L = 147; M = 160;                   % Interpolation/decimation factors.</div><div>             Lp = 24;                            % Filter length of each phase</div><div>             N = Lp*L-1;                         % Filter Order</div><div>             h = fir1(N,1/M,kaiser(N+1,7.8562))<wbr>;</div><div>             h = L*h; % Passband gain = L</div><div>             Fs = 48e3;                          % Original sampling frequency: 48kHz</div><div>             n = 0:10239;                        % 10240 samples, 0.213 seconds long</div><div>             x  = sin(2*pi*1e3/Fs*n);            % Original signal, sinusoid at 1kHz</div><div>             y = upfirdn(x,h,L,M);               % 9430 samples, still 0.213 seconds</div><div> </div><div>             % Overlay original (48kHz) with resampled signal (44.1kHz) in red.</div><div>             stem(n(1:49)/Fs,x(1:49)); hold on </div><div>             stem(n(1:45)/(Fs*L/M),y(12:<wbr>56),'r','filled'); </div><div>             xlabel('Time (sec)');ylabel('Signal value');</div><div>     </div><div>    See also resample, interp, decimate, fir1, intfilt.</div><div><br></div><div>    Reference page in Help browser</div><div>       doc upfirdn</div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 9, 2016 at 12:50 AM, Ahmad, Jumana <span dir="ltr"><<a href="mailto:jumana.ahmad@kcl.ac.uk" target="_blank">jumana.ahmad@kcl.ac.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear All,<br>
The EEGlab function let me down sample from 1000 to 256, but as 256 isn't a multiple into 1000 I wonder how it's possible. HP filtered at 1.5. This is what I did for the purpose of ICA (was trying to equate sampling rates of data sets collected across sites) and will apply the weights to the 0.1Hz HP filtered and 1000Hz sampling rate data. Thank you.<br>
Best wishes,<br>
Jumana<br>
______________________________<wbr>_________________<br>
Eeglablist page: <a href="http://sccn.ucsd.edu/eeglab/eeglabmail.html" rel="noreferrer" target="_blank">http://sccn.ucsd.edu/eeglab/ee<wbr>glabmail.html</a><br>
To unsubscribe, send an empty email to <a href="mailto:eeglablist-unsubscribe@sccn.ucsd.edu" target="_blank">eeglablist-unsubscribe@sccn.uc<wbr>sd.edu</a><br>
For digest mode, send an email with the subject "set digest mime" to <a href="mailto:eeglablist-request@sccn.ucsd.edu" target="_blank">eeglablist-request@sccn.ucsd.e<wbr>du</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="m_-8209127970048733776gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">Makoto Miyakoshi<br>Swartz Center for Computational Neuroscience<br>Institute for Neural Computation, University of California San Diego<br></div></div>
</div></div>