<div dir="ltr">I did one and shared on the list<div><br></div><div><span style="font-family:arial,sans-serif;font-size:12.727272033691406px">you can check it at:</span><a href="https://drive.google.com/file/d/0B3AoiT0xk8fnNU9PRHdldVVFbU0/edit?usp=sharing" target="_blank" style="font-family:arial,sans-serif;font-size:12.727272033691406px">https://drive.google.com/file/d/0B3AoiT0xk8fnNU9PRHdldVVFbU0/edit?usp=sharing</a><br>
</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-05-05 16:41 GMT-03:00 katja <span dir="ltr">&lt;<a href="mailto:katjavetter@gmail.com" target="_blank">katjavetter@gmail.com</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Brute force time domain convolution for small kernel can be done with<br>
[fexpr~]. For zero phase filter kernels, fast convolution in Pd is<br>
relatively simple. Multiply real and imaginary part of the signal&#39;s<br>
spectrum with the filter&#39;s spectrum while using four times overlap and<br>
Hann windowing before FFT and after IFFT, and normalize. Pd&#39;s FFT<br>
routines assume x[0] at the start of the filter kernel, not at the<br>
center, so you have to rotate your zero phase filter kernel before<br>
taking it&#39;s Fourier Transform.<br>
<span class="HOEnZb"><font color="#888888"><br>
Katja<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Mon, May 5, 2014 at 8:49 PM, david medine &lt;<a href="mailto:dmedine@ucsd.edu">dmedine@ucsd.edu</a>&gt; wrote:<br>
&gt; For the FFT based convolution, you could easily modify the example patch<br>
&gt; I06.timbre.stamp.pd to do straight up convolution in the frequency domain. I<br>
&gt; wouldn&#39;t know how to do it in the time domain without an extern or a lot of<br>
&gt; painstaking work. It might be a nice thing to have, though.<br>
&gt;<br>
&gt; I can tell you, though, that the frequency domain method will out perform<br>
&gt; the time domain in terms of CPU usage. But, since you are windowing there<br>
&gt; will be a latency. Apart from that, the output is identical by both methods.<br>
&gt;<br>
&gt; y(n) = x(n) * g(n)<br>
&gt; Y(k) = X(k)G(k), y(n) = IDFT(Y(k))<br>
&gt;<br>
&gt; where g(n) is the impulse response, X(k) is the discrete Fourier transform<br>
&gt; of x(n) and * is the convolution operation.<br>
&gt;<br>
&gt;<br>
&gt; On 05/05/2014 09:33 AM, Oli Larkin wrote:<br>
&gt;&gt;<br>
&gt;&gt; hi,<br>
&gt;&gt;<br>
&gt;&gt; is anyone aware of an example of both a brute force time domain (e.g.<br>
&gt;&gt; buffir~ in Max) and an FFT-based fast convolution patch in pd-vanilla? I<br>
&gt;&gt; would like to do a comparison of the two. Can be using a small IR, just for<br>
&gt;&gt; demo purposes.<br>
&gt;&gt;<br>
&gt;&gt; cheers,<br>
&gt;&gt;<br>
&gt;&gt; Oli<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; <a href="mailto:Pd-list@iem.at">Pd-list@iem.at</a> mailing list<br>
&gt;&gt; UNSUBSCRIBE and account-management -&gt;<br>
&gt;&gt; <a href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; <a href="mailto:Pd-list@iem.at">Pd-list@iem.at</a> mailing list<br>
&gt; UNSUBSCRIBE and account-management -&gt;<br>
&gt; <a href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br>
<br>
_______________________________________________<br>
<a href="mailto:Pd-list@iem.at">Pd-list@iem.at</a> mailing list<br>
UNSUBSCRIBE and account-management -&gt; <a href="http://lists.puredata.info/listinfo/pd-list" target="_blank">http://lists.puredata.info/listinfo/pd-list</a><br>
</div></div></blockquote></div><br></div>