From help-octave-request at bevo dot che dot wisc dot edu Thu Dec 6 10:33:37 2001 Subject: Re: using conv vs. filter From: "E. Joshua Rigler" To: Help-Octave Date: 06 Dec 2001 09:33:16 -0700 Thanks Paul! You were the only one (of those who responded) who actually understood my question. I'm sure that was my own fault for not stating it very clearly. I thought others might benefit from your answer. At the very least, this should go into the new search-able archive (yea!), so people like me don't have to waste bandwidth with questions like this in the future. -EJR On Thu, 2001-12-06 at 08:48, Paul Kienzle wrote: > For the output y=conv(b,x), you need to extract y([1:length(x)]+L), where L > is the maximum lag of your filter. The following example should clarify: > > ## generate some data > t = linspace(0,1,100); > x = sin(2*pi*t*2.4+0.2) + randn(size(t))*0.3; > > ## generate causal (c) and non-causal (nc) filters > F = sgolay(3,15); > c = F(15,:); % lags 14, 13, ..., 1, 0 > nc = F(1,:); % lags 0, -1, ..., -14 > > ## filter the data using conv > y_c = conv(c,x); > y_c = y_c([1:length(t)]+14); > y_nc = conv(nc,x); > y_nc = y_nc([1:length(t)]+0); > > ## plot the filters and the results > subplot(211); plot(c,';causal;',nc,';non-causal;'); > subplot(212); plot(t,y_c,';causal;', t,y_nc,';non-causal;',t,x,';data;'); > > Paul Kienzle > pkienzle at users dot sf dot net > > > On Wed, Dec 05, 2001 at 01:29:09PM -0700, E. Joshua Rigler wrote: > > I'm looking at the code for conv.m in the octave libraries. It does > > some sort of zero-padding, then calls the "filter" function. The output > > is a vector that is length(a)+lenght)b)+1. > > > > Now, I am trying to convolve an filter with both negative, zero, and > > positively lagged coefficients with an input time series. In order for > > my time-steps to be synchronized between the input time series, and the > > output from conv.m, how would I index the output? I guess I just don't > > really understand how the conv.m function works in octave. > > > > At the moment, I use a filter that has an equal number of positive and > > negatively lagged coefficients, and the output seems reasonable when I > > do something like: > > > > output = conv (filter, input); > > output = output (length(filter)/2 : length(output)- \ > > length(filter)/2); > > > > 1) Does what I have seem right? > > 2) What do I do if my filter has fewer/more negatively lagged > > coefficients than positively lagged coefficients? > > > > Thanks, > > > > -EJR > > > > > > > > ------------------------------------------------------------- > > Octave is freely available under the terms of the GNU GPL. > > > > Octave's home on the web: http://www.octave.org > > How to fund new projects: http://www.octave.org/funding.html > > Subscription information: http://www.octave.org/archive.html > > ------------------------------------------------------------- > > ------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.octave.org How to fund new projects: http://www.octave.org/funding.html Subscription information: http://www.octave.org/archive.html -------------------------------------------------------------