[PD] feature extraction

matthew jones mj at isvr.soton.ac.uk
Mon Jul 18 18:23:21 CEST 2005


you can do this with a delay of [insert number of samples in signal block 
here] and a simple feedback system.

First, subtract the delayed signal from the direct (undelayed) signal.  This 
delay controls the number of samples to sum over.  Then feed the output of 
this into a 1-tap IIR filter (this means the output of this filter gets 
multiplied by a coefficient before getting summed with the input).  In a 
mathematical proof this coefficient is equal to 1 exactly, although this is 
an IIR filter on the LIMIT of stability and with floating point arithmetic 
it should rather be set to 0.999999999.

I couldn't be bothered to craft a nice ascii pic of this so I did a gif 
instead (attached).
The delta sign is the delay, and the sigma sign indicates summation.  K is 
the coefficient discussed.

As far as implementing this I am not entirely sure.  pipe~ would perform a 
delay although it would probly not be sample accurate, but using z~ would be 
a little messy (you would need lots of them).  The feedback cannot be 
implemented directly as I think this would cause a 'DSP loop' which would 
not be solved by using a z~ in the path (please correct me if I'm wrong), 
while a send and receive pair would give a delay of 64 samples if that was 
the size of your signal block.  hmmm.


Matt

-=-=-=-=-=-=-=-=-=-=-=-
http://www.loopit.org
-=-=-=-=-=-=-=-=-=-=-=-
----- Original Message ----- 
From: "Jacob Last" <jacoblast at gmail.com>
To: "Mathieu Bouchard" <matju at artengine.ca>
Cc: "the PureData - mailinglist" <pd-list at iem.at>; <jamie at postlude.co.uk>
Sent: Monday, July 18, 2005 4:29 PM
Subject: Re: [PD] feature extraction


On 7/15/05, Mathieu Bouchard <matju at artengine.ca> wrote:
>
(snip)
> you can compute the centroid of signal chunks using a [phasor~] tuned to
> ramp up exactly synched with each block, one or two [*~] and then summing
> or averaging all values in each chunk ([lop~] could do it but there are
> better ways that I can't think of now).
(snip)

How would I do this? I am trying think out how to average all the
values in a signal block and output a single float at the end of each
DSP cycle...is there an external to do this? I can't think of an
abstraction to do it.

Thanks,
Jacob

_______________________________________________
PD-list at iem.at mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list 





More information about the Pd-list mailing list