[Eeglablist] Down sample issue
Makoto Miyakoshi
mmiyakoshi at ucsd.edu
Fri Dec 9 20:42:34 PST 2016
Dear Jumana,
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().
Makoto
>> help upfirdn
upfirdn Upsample, apply a specified FIR filter, and downsample a signal.
upfirdn(X,H,P,Q) is a cascade of three systems applied to input signal
X:
(1) Upsampling by P (zero insertion). P defaults to 1 if not
specified.
(2) FIR filtering with the filter specified by the impulse
response
given in H.
(3) Downsampling by Q (throwing away samples). Q defaults to 1
if not
specified.
upfirdn uses an efficient polyphase implementation.
Usually X and H are vectors, and the output is a (signal) vector.
upfirdn permits matrix arguments under the following rules:
If X is a matrix and H is a vector, each column of X is filtered
through H.
If X is a vector and H is a matrix, each column of H is used to filter
X.
If X and H are both matrices with the same number of columns, then the
i-th
column of H is used to filter the i-th column of X.
Specifically, these rules are carried out as follows. Note that the
length
of the output is Ly = ceil( ((Lx-1)*P + Lh)/Q ) where Lx = length(X)
and
Lh = length(H).
Input Signal X Input Filter H Output Signal Y Notes
-----------------------------------------------------------------
1) length Lx vector length Lh vector length Ly vector Usual case.
2) Lx-by-Nx matrix length Lh vector Ly-by-Nx matrix Each column of
X
is filtered by
H.
3) length Lx vector Lh-by-Nh matrix Ly-by-Nh matrix Each column of
H is
used to filter
X.
4) Lx-by-N matrix Lh-by-N matrix Ly-by-N matrix i-th column of
H is
used to filter
i-th
column of X.
For an easy-to-use alternative to upfirdn, which does not require you
to
supply a filter or compensate for the signal delay introduced by
filtering,
use RESAMPLE.
EXAMPLE: Sample-rate conversion by a factor of 147/160. It is used to
% downconvert from 48kHz to 44.1kHz.
L = 147; M = 160; % Interpolation/decimation
factors.
Lp = 24; % Filter length of each
phase
N = Lp*L-1; % Filter Order
h = fir1(N,1/M,kaiser(N+1,7.8562));
h = L*h; % Passband gain = L
Fs = 48e3; % Original sampling
frequency: 48kHz
n = 0:10239; % 10240 samples, 0.213
seconds long
x = sin(2*pi*1e3/Fs*n); % Original signal,
sinusoid at 1kHz
y = upfirdn(x,h,L,M); % 9430 samples, still
0.213 seconds
% Overlay original (48kHz) with resampled signal (44.1kHz) in
red.
stem(n(1:49)/Fs,x(1:49)); hold on
stem(n(1:45)/(Fs*L/M),y(12:56),'r','filled');
xlabel('Time (sec)');ylabel('Signal value');
See also resample, interp, decimate, fir1, intfilt.
Reference page in Help browser
doc upfirdn
On Fri, Dec 9, 2016 at 12:50 AM, Ahmad, Jumana <jumana.ahmad at kcl.ac.uk>
wrote:
> Dear All,
> 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.
> Best wishes,
> Jumana
> _______________________________________________
> Eeglablist page: http://sccn.ucsd.edu/eeglab/eeglabmail.html
> To unsubscribe, send an empty email to eeglablist-unsubscribe at sccn.uc
> sd.edu
> For digest mode, send an email with the subject "set digest mime" to
> eeglablist-request at sccn.ucsd.edu
>
--
Makoto Miyakoshi
Swartz Center for Computational Neuroscience
Institute for Neural Computation, University of California San Diego
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://sccn.ucsd.edu/pipermail/eeglablist/attachments/20161209/ce98fb3e/attachment.html>
More information about the eeglablist
mailing list