<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Collective for Research in Interaction, Sound, and Signal Processing</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/" />
    <link rel="self" type="application/atom+xml" href="http://media.aau.dk/CRISSP/atom.xml" />
    <id>tag:media.aau.dk,2010-03-08:/CRISSP//1</id>
    <updated>2012-01-26T13:33:10Z</updated>
    <subtitle>Aalborg University Copenhagen, Medialogy</subtitle>
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type 4.34-en</generator>

<entry>
    <title>The Sonification Handbook</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2012/01/the-sonification-handbook.html" />
    <id>tag:media.aau.dk,2012:/CRISSP//1.1105</id>

    <published>2012-01-26T13:28:40Z</published>
    <updated>2012-01-26T13:33:10Z</updated>

    <summary>For those that have not yet heard: The Sonification Handbook edited by Thomas Hermann, Andy Hunt, John G. Neuhoff is published. And, even better, freely available for download here!...</summary>

    <author>
        <name>Sofia Dahl</name>
        <uri>http://www.sofiadahl.net/</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Interaction" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="sonification" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[For those that have not yet heard: The <a href="http://sonification.de/handbook/">Sonification Handbook</a>  edited by Thomas Hermann, Andy Hunt, John G. Neuhoff is published. And, even better, freely available for download <a href="http://sonification.de/handbook/download/TheSonificationHandbook-HermannHuntNeuhoff-2011.pdf">here</a>!]]>
        
    </content>
</entry>

<entry>
    <title>SMC 2012 in Copenhagen!!</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/09/smc-2012-in-copenhagen.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.1076</id>

    <published>2011-09-30T05:50:30Z</published>
    <updated>2011-09-30T05:52:18Z</updated>

    <summary><![CDATA[9th Sound and Music Computing Conference, 12-14 July 2012Medialogy section,&nbsp; Department of Architecture, Design and Media Technology, Aalborg University Copenhagenhttp://smc2012.smcnetwork.org/The SMC Conference is the forum for international exchanges around thecore interdisciplinary topics of Sound and Music Computing,and features workshops, lectures,...]]></summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Haptics" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Interaction" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Machine learning" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Music" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Science" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="smc2012conference" label="SMC 2012 conference" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="soundandmusiccomputing" label="sound and music computing" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[9th Sound and Music Computing Conference, 12-14 July 2012<br />Medialogy section,&nbsp; Department of Architecture, Design and Media Technology, Aalborg University Copenhagen<br /><a href="http://smc2012.smcnetwork.org/">http://smc2012.smcnetwork.org/</a><br /><br />The SMC Conference is the forum for international exchanges around the<br />core interdisciplinary topics of Sound and Music Computing,<br />and features workshops, lectures, posters, demos, concerts, sound installations, and<br />satellite events. The SMC Summer School, which takes place just before the<br />conference, aims at giving young researchers the opportunity to <br />interactively learn about core topics in this interdisciplinary field from experts,<br />and to build a network of international contacts.<br />The specific theme of SMC 2012 is "Illusions", and<br />that of the SMC Summer School is "Multimodality".<br /><br />================Important dates=================<br />Deadline for submissions of music and sound installations: Friday, February 3, 2012<br />Deadline for paper submissions: Monday 2 April, 2012<br />Notification of music acceptances: Friday, March 16, 2012<br />Deadline for applications to the Summer School: Friday March 30, 2012<br />Notification of acceptance to Summer School: Monday April 16, 2012<br />Deadline for submission of final music and sound installation materials: Friday, April 27, 2012<br />Notification of paper acceptances: Wednesday 2 May, 2012<br />Deadline for submission of camera-ready papers: Monday 4 June, 2012<br />SMC Summer School: Sunday 8 - Wednesday morning 11 July, 2012<br />SMC Workshops: Wednesday afternoon 11 July, 2012<br />SMC 2011: Thursday 12 - Saturday 14 July, 2012<br />===========================================<br /><br />SMC2012 will cover topics that lie at the core of the Sound and Music Computing research and creative exploration.<br />&nbsp;We broadly group these into:<br />&nbsp; - processing sound and music data<br />&nbsp; - modeling and understanding sound and music data<br />&nbsp; - interfaces for sound and music creation<br />&nbsp; -music creation and performance with established and novel hardware and software technologies<br /><br />================Call for papers==================<br />SMC 2012 will include paper presentations as both lectures and poster/<br />demos. We invite submissions examining all the core areas of the Sound<br />and Music Computing field. Submission related to the theme "Illusions" are especially encouraged.<br />&nbsp;All submissions will be peer-reviewed according to their novelty, technical content, presentation, and<br />contribution to the overall balance of topics represented at the<br />conference. Paper submissions should have a maximum of 8 pages<br />including figures and references, and a length of 6 pages is strongly<br />encouraged. Accepted papers will be designated to be presented either<br />as posters/demos or as lectures. More details are available at<br />http://smc2012.smcnetwork.org/<br />===========================================<br /><br />================Call for music works and sound installations==================<br />SMC 2012 will include four curated concerts addressing the conference topic "Illusions". We invite submissions of original compositions created for acoustic instruments and electronics, novel instruments and interfaces, music robots, and speakers as sound objects. Submissions of sound installation are also encouraged. See curatorial statements and call specifics at: <a href="http://smc2012.smcnetwork.org/">http://smc2012.smcnetwork.org</a>.<br />==============================================================]]>
        
    </content>
</entry>

<entry>
    <title>A blog devoted entirely to sparse representation</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/07/a-blog-devoted-entirely-to-sparse-representation.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.787</id>

    <published>2011-07-04T12:21:45Z</published>
    <updated>2011-07-04T12:29:14Z</updated>

    <summary>As part of my research activities funded by the Danish government, I am happy to announce my new blog: Null Space Pursuits. I have copied all of my content from here to there (though the links still point to CRISSP),...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Machine learning" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bloggingresearch" label="blogging research" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sparserepresentation" label="sparse representation" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[As part of my research activities funded by the Danish government, I am happy to announce my new blog: <a href="http://media.aau.dk/null_space_pursuits/">Null Space Pursuits</a>. I have copied all of my content from here to there (though the links still point to CRISSP), and will continue to document over the next 30 months my researches in varying detail.]]>
        
    </content>
</entry>

<entry>
    <title>SPARS 2011, day 4</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/07/spars-2011-day-4.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.267</id>

    <published>2011-07-04T09:06:06Z</published>
    <updated>2011-07-04T09:30:33Z</updated>

    <summary>The fourth and final day of SPARS 2011 served up two plenaries by two prodigious reserarchers: Joel Tropp and Stephen Wright. At the beginning of his talk, Tropp asked who in the room knows how MATLAB computes the SVD. Only...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="spars" label="SPARS" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[The fourth and final day of SPARS 2011 served up two plenaries by two prodigious reserarchers: <a href="http://users.cms.caltech.edu/~jtropp/">Joel Tropp</a> and <a href="http://pages.cs.wisc.edu/~swright/">Stephen Wright</a>. At the beginning of his talk, Tropp asked who in the room knows how MATLAB computes the SVD. Only a few out of about 200 raised their hand, and a few more gestured that they kind of knew. 
The problem is that the methods we use today are treated as black boxes, but are based on extremely optimized classical methods that are incapable of working with massive matrices (billions by billions and up). So, we need better tools. He presented his work in SVD by a randomized algorithm ... which at first sounds scarily inaccurate, but proves to be extremely effective at a much reduced computational cost.<br /><br />

In the last plenary, Wright presented a lot of work in state of the art methods for regularized optimization. At the beginning, he showed some fantastic pictures that he called an "Atlas of the Null Space," which showed where solutions to min l1 are the same as min l0.
His talked centered around the message that though we talk a lot of exact solutions, or sparsest representations, most applications in the real world only need good algorithms that give the correct support before the whole solution. The trick is to determine when to stop an algorithm, and post-process the results to find the better solution.<br /><br />

In between these talks, there were plenty others, discussing various items of interest with dictionary learning, audio inpainting (Po'D coming soon), and several posters, one of which is by CRISSP reader <a href="http://www.dtic.upf.edu/~gcoleman/">Graham Coleman</a>. He presented his novel work applying l1 minimization of sound feature mixtures to drive concatenative sound synthesis, or musaicing. (I have discussed an earlier version of this work <a href="http://media.aau.dk/CRISSP/2010/10/papers-of-the-day-pod-concatenative-synthesis-edition.html">here</a>.) Coleman's approach appears to be the next generation of concatenative synthesis.<br /><br />

All in all, this workshop was an excellent use of my time and money. Its duration was just perfect that after the last session I really felt as if my fuel tank was completely full. The organizers did an extremely nice job of selecting plenary speakers, assembling a wide range of quality work, and finding an accommodating venue with helpful staff. I even heard that the committee was able to raise enough funds so that many of the student participants had their accommodations paid for.
I am really looking forward to the 2013 edition of SPARS (or CoSPARS).]]>
        
    </content>
</entry>

<entry>
    <title>SPARS 2011, day 3</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/spars-2011-day-3.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.266</id>

    <published>2011-06-29T17:49:30Z</published>
    <updated>2011-07-04T09:41:16Z</updated>

    <summary>Big things today, with plenaries given by David Donoho and Martin Vetterli. Donoho answered all the questions I have regarding the variability of recovery algorithms on distributions underlying sparse vectors. I just need a few years to understand them. I...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[Big things today, with plenaries given by David Donoho and Martin Vetterli.
Donoho answered all the questions I have regarding the variability of recovery algorithms on distributions underlying sparse vectors.
I just need a few years to understand them.
I also need to look more closely at approximate message passing.
And Vetterli gave a great talk, discussing the tendency in algorithm development to jump to a solution before solving the outstanding problem, e.g., sampling the real continuous world on a discretized grid.<br /><br />

Now I need to eat dinner, and run some experiments.]]>
        
    </content>
</entry>

<entry>
    <title>SPARS 2011, day 2</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/spars-2011-day-2.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.265</id>

    <published>2011-06-28T19:43:38Z</published>
    <updated>2011-06-28T20:21:58Z</updated>

    <summary>Though the SPARS2011 twitter feed appears miserable, this workshop is jam packed by excellent presentations and discussions. I think too many people are having too much good discussion to have too much time to twitter. Today at SPARS 2011: Heavy...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="sparseapproximation" label="sparse approximation" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[Though the <a href="http://twitter.com/#!/search?q=%23spars11">SPARS2011 twitter feed</a> appears miserable, this workshop is jam packed by excellent presentations and discussions. I think too many people are having too much good discussion to have too much time to twitter.<br /><br />

Today at SPARS 2011: Heavy hitters Francis Bach and Rémi Gribonval delivered the two plenary talks. This morning Bach talked on a new subject for me: submodular functions. 
In particular, he is exploring these ideas for creating sparsity-inducing norms.
A motivation for this work is that while the l1 norm promotes sparsity within groups, it does not promote sparsity among groups... or vice versa (it is new to me). But I liked how he described his formalization as "the norm-design business."
Someone asked him a question about analyzing greedy methods vs. convex optimization.
Bach's answer made me realize that we can more completely understand the behavior of convex optimization methods than greedy methods because convex methods are decoupled from the dictionary. For greedy methods, the dictionary is involved from the get go.<br /><br />

This afternoon, Gribonval talked on "cosparsity", or when a signal is sparsely represented by the dual of a frame instead of the frame itself. His entire talk revolved around looking more closely at the assumption that atomic decomposition and a transform are somehow similar. Or that when we say a signal is sparse, we mean it is sparse in some dictionary; but we can also mean its projection on a frame is sparse. This is then "cosparsity", which brings with it <a href="http://media.aau.dk/CRISSP/2010/05/paper-of-the-day-pod-compressed-sensing-and-coherent-dictionaries-edition.html">l1-analysis</a>. 
To be a little more formal, we can considering solving the "synthesis" problem
$$
\min_\vz || \vz ||_1 \; \textrm{subject to} \; \vy = \MA \MD \vz
$$
where we assume \(\vz\) is sparse; or the "analysis" problem
$$
\min_\vx || \MG \vx ||_1 \; \textrm{subject to} \; \vy = \MA \vx
$$
where we assume the analysis (or transformation) of \(\vx\) by \(\MG\), i.e., \(\MG\vx\), is sparse.
Gribonval et al. have done an excellent job interpreting what is really going on with l1-analysis. Instead of wanting to minimize the number of non-zeros in the signal domain, l1-analysis wants to maximize the number of zero in the transform domain.
Later on, his student Sangnam Nam presented extraordinary results of this work with their Greedy Analysis Pursuit, which attempts to null non-zeros in the solution.
This reminded me a bit about the <a href="http://media.aau.dk/CRISSP/2010/04/paper-of-the-day-pod-complementary-matching-pursuit-edition.html">complementary matching pursuit</a>, but this is quantitatively different. Gribonval joked that "sparsity" may now be "over." The new hot topic is "cosparsity."<br /><br />

There were many other exciting talks too, showing extraordinary results; 
but now I must go and work on some interesting ideas that may or may not require my computer to run through the night.]]>
        
    </content>
</entry>

<entry>
    <title>SPARS 2011</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/spars-2011-1.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.264</id>

    <published>2011-06-27T08:24:56Z</published>
    <updated>2011-06-28T19:43:18Z</updated>

    <summary>And so it begins! A whole week of nothing but sparsity in various forms and guises. My summer has officially started! The proceedings collect all the accepted one-page submissions, which I find provide very tantalizing details. And for a cool...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="sparseapproximation" label="sparse approximation" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[And so it begins! <a href="http://ecos.maths.ed.ac.uk/SPARS11/program.html">A whole week</a> of nothing but sparsity in various forms and guises. My summer has officially started!<br /><br />

The proceedings collect all the accepted one-page submissions, which I find provide very tantalizing details. And for a cool down, I am reading Michael Elad's excellent book <a href="http://www.amazon.com/Sparse-Redundant-Representations-Applications-Processing/dp/144197010X/ref=sr_1_1?ie=UTF8&s=books&qid=1283867728&sr=8-1">Sparse and Redundant Representations: From Theory to Applications in Signal and Image Processing</a>. It does for sparse signal processing what <a href="http://www.amazon.com/Digital-Filters-Richard-W-Hamming/dp/048665088X">Hamming's book</a> does for digital filters: completely accessible, drawing together numerous disciplines, and giving a good big picture perspective.<br /><br />

<hr><br /><br />

Today began with a bang, featuring <a href="http://yima.csl.illinois.edu/">Yi Ma</a>. 
Just as <a href="http://media.aau.dk/CRISSP/2011/05/andrew-ngs-google-talk-about-unsupervised-feature-learning-and-deep-learning.html">Andrew Ng's Google Talk</a>, Ma amazed me (and I am sure many others) with his examples of <a href="http://perception.csl.uiuc.edu/matrix-rank/applications.html">the incredible power of Robust PCA</a> for everything from face and text alignment, to extracting the geometry of buildings from 2D pictures without any use of edge or corner detection.
All one needs are the pixels, and the rest is done by the assumption that the image can be decomposed into a low rank texture matrix, and a sparse matrix with non-textural items, like a person moving in front of a background.
One of my favorite examples was where he took 30 images of Bill Gate's face. 
Robust PCA aligned them all, corrected for transformations like shearing, and produced a mean image of Bill Gates.
Now, I wonder, can we do the same for a piece of classical music, where we create a mean version of a particular Bach Partita from a dozen Glenn Gould recordings?<br /><br />

There were many other fantastic talks and conversations to be had.
Because my internet access at this expensive hotel is free only for 30 minutes every 24 hours at a severely limited bandwidth, I must limit my description to that. 
Tomorrow will be another exciting day in "Sparseland", as Elad calls it.]]>
        
    </content>
</entry>

<entry>
    <title>CMP in MPTK: Third Results</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/cmp-in-mptk-third-results.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.263</id>

    <published>2011-06-17T09:21:35Z</published>
    <updated>2011-06-19T08:06:58Z</updated>

    <summary>In a previous entry, I compared our results with those produced by my own implementation of CMP in MATLAB --- which did not suffer from the bug because it computes the optimal amplitude and phases in a slow way with...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cyclicmatchingpursuit" label="cyclic matching pursuit" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mptk" label="MPTK" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[In a <a href="http://media.aau.dk/CRISSP/2011/06/cmp-in-mptk-second-results-and-second-thoughts.html">previous entry</a>, I compared our results with those produced by my own implementation of CMP in MATLAB --- which did not suffer from <a href="http://media.aau.dk/CRISSP/2011/06/grab-your-things-ive-come-to-take-you-home.html">the bug</a> because it computes the optimal amplitude and phases in a slow way with matrix inverses. Now, with the new corrected code, I have produced the following results.
Just for comparison, here are the residual energy decays of my previous experiments, detailed in <a href="http://media.aau.dk/CRISSP/2010/11/paper-of-the-day-pod-cyclic-matching-pursuit-with-a-time-frequency-dictionary-edition.html">my paper on CMP with time-frequency dictionaries</a>. <br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2010/11/dsfdsf-286.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2010/11/dsfdsf-286.html','popup','width=872,height=570,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2010/11/dsfdsf-thumb-470x307-286.jpg" width="470" height="307" alt="dsfdsf.jpg" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Now, with the corrections, I observe the decays. The "MPold" decay is that produced by the uncorrected MPTK.
"MP" shows that of the new code.
Only in Attack and Sine do we see much difference;
and at times in Sine the previous version of MPTK beats the corrected version. (Such is the behavior of greedy algorithms. I will write a Po'D about this soon.)
Anyhow, the decays of CMP-\(\ell\) (where the number denotes the largest number of possible cycles of refinement, but I suspend refinement cycles when energyAfter/energyBefore > 0.999), comports with the decays I see in my MATLAB implementation (see above).
So, now I am comfortable moving on.
<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/CMPtests01-649.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/CMPtests01-649.html','popup','width=767,height=564,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/CMPtests01-thumb-470x345-649.png" width="470" height="345" alt="CMPtests01.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Below we see the decays and cycle refinements for three different CMPs for these four signals. (Note the change in the y axes.) Bimodal appears to benefit the most in the short term from the refinement cycles, after which improvement is sporadic.
The modeling of Sine has a flurry of improvements.
It is interesting to note that as \(\ell\) increases, we do not necessarily see better models with respect to the residual energy. For instance, for Attack, the residual energy for CMP-1 beats the others.<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/CMPtests01b-652.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/CMPtests01b-652.html','popup','width=818,height=561,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/CMPtests01b-thumb-470x322-652.png" width="470" height="322" alt="CMPtests01b.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

And briefly back to the glockenspiel signal, below we see the decays and improvements
using a multiscale Gabor dictionary (up to atoms with scale 512 samples).

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay-655.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay-655.html','popup','width=1128,height=692,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay-thumb-470x288-655.png" width="470" height="288" alt="glock2_energydecay.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>]]>
        
    </content>
</entry>

<entry>
    <title>Grab your things, I&apos;ve come to take you home!</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/grab-your-things-ive-come-to-take-you-home.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.262</id>

    <published>2011-06-16T22:25:14Z</published>
    <updated>2011-06-16T22:29:23Z</updated>

    <summary>I have solved the mystery that has pushed me for the past week into excruciatingly fun debugging sessions. Yes, I know I mentioned on June 9 that CMP was extremely easy to implement in MPTK. Then came second thoughts as...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bugsdefeated" label="bugs defeated" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="cyclicmatchingpursuit" label="cyclic matching pursuit" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mptk" label="MPTK" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[I have solved the mystery that has pushed me for the past week into excruciatingly fun debugging sessions. Yes, I know <a href="http://media.aau.dk/CRISSP/2011/06/cmp-in-mptk-first-results.html">I mentioned on June 9</a> that CMP was extremely easy to implement in MPTK. Then came <a href="http://media.aau.dk/CRISSP/2011/06/cmp-in-mptk-second-results-and-second-thoughts.html">second thoughts</a> as to the behavior of the implementation. And there followed <a href="http://media.aau.dk/CRISSP/2011/06/debugging-all-day.html">more observations</a>, and <a href="http://media.aau.dk/CRISSP/2011/06/a-bug-or-a-feature.html">rambling observations</a>, and then the <a href="http://media.aau.dk/CRISSP/2011/06/debugging-repository.html">videos appeared</a>. And then the <a href="http://media.aau.dk/CRISSP/2011/06/dont-give-up.html">music video appeared</a>. Well, now here's another: <a href="http://media.aau.dk/CRISSP/2011/06/16/ex1_MP_atoms_solved.mov">ex1_MP_atoms_solved.mov</a><br /><br />]]>
        <![CDATA[In decomposing a real signal using MP and a dictionary of complex atoms, at each step we seek for the best atom in the sense that it will remove the most energy from the intermediate residual signal without taking into account any orthogonal projection after selection (otherwise MP becomes OOMP, or OLS, or greedy forward selection, etc.).
The fact that we have a real signal is no problem for our complex dictionary.
We can make any real atom by a convenient use of the complex conjugate.
Hence, we can construct a real atom \(\vd\) from a unit norm complex one \(\vg\) and its conjugate \(\vg^*\)
$$
\vd = \frac{a}{2} \left [ e^{i\phi} \vg + e^{-i\phi} \vg^* \right ].
$$
Given a real signal \(\vx\), we can adjust the amplitude \(a\) and phase \(\phi\) to construct the best real atom in the sense that
$$
\min_{a,\phi} || \vx - \frac{a}{2} \left [ e^{i\phi} \vg + e^{-i\phi} \vg^* \right ] ||_2.
$$
If we define \(\MG = [ \vg | \vg^*]\), and \(\vz^T = a/2 [e^{i\phi}, e^{-i\phi}]\),
then this becomes
$$
\min_{\vz} || \vx - \MG\vz ||_2
$$
which is a least squares problem and has the solution
$$
\vz_o = (\MG^H\MG)^{-1}\MG^H\vx
$$
as long as \(\vg\) is a complex atom, i.e., \(|\vg^H\vg^*| < 1+\epsilon\),
where \(\epsilon\) allows for the fact that machines do not have infinite precision.
Note too that \(\MG\vz_o\) is the orthogonal projection of \(\vx\) onto the span of \(\vg\) and its conjugate.
<br /><br />

The columns of the matrix \(\MG(\MG^H\MG)^{-1}\) actually form the "dual basis", or "biorthogonal basis", to the columns in \(\MG\).
Since the Gramian is just a 2x2 matrix, we can invert is easily and obtain these dual vectors:
$$
\vh = \frac{\vg - \langle \vg, \vg^* \rangle \vg^* }{1 - | \langle \vg, \vg^* \rangle|^2}
$$
the other being the conjugate.
Note that though \(||\vg||_2 = 1\), the dual may not have the same norm.
What is cool about dual bases is that we can project on either, but we must reconstruct on the other.
So, considering that we have a complex unit norm atom from the dictionary,
and that we want to find the best real atom from it given a signal,
we project \(\vx\) onto the unit norm atom and its conjugate and build back with the dual:
$$
\frac{1}{\gamma} \left ( \langle \vx, \vg \rangle \left [ \vg - \langle \vg, \vg^* \rangle \vg^*\right ] 
+ \langle \vx, \vg^* \rangle \left [ \vg^* - \langle \vg^*, \vg \rangle \vg\right ] \right )
= \frac{a}{2} \left [ e^{i\phi} \vg + e^{-i\phi} \vg^* \right ]
$$
where \(\gamma := 1 - | \langle \vg, \vg^* \rangle|^2\).
The problem now is to find \(a\) and \(\phi\).<br /><br />

If we make the following definitions:
$$
\begin{align}
x & := \langle \vx, \vg \rangle \\
r & := \langle \vg, \vg^* \rangle
\end{align}
$$
then the above becomes
$$
x\vg + x^*r^*\vg - c r\vg^* + x^*\vg^* = \frac{a\gamma}{2} \left (\cos \phi + i \sin \phi\right )\vg + \frac{a\gamma}{2} \left (\cos \phi - i \sin \phi\right )\vg^*.
$$
Now, one may think, as I first did, that we can group and separate the terms on each side multiplying \(\vg\), and then solve for \(a\) and \(\phi\).
But unless \(\vg^*\) is orthogonal to \(\vg\), that is not a good thing to do.
Instead, multiply each side by \(\vg^H\):
$$
x + x^*r^* - c r^2 + x^*r = \frac{a\gamma}{2} \left (\cos \phi + i \sin \phi\right ) + \frac{a\gamma}{2} \left (\cos \phi - i \sin \phi\right )r.
$$
since \(\vg^H\vg = 1\), and \(\vg^H\vg^* = r^*\).
Now we can group things based on real and imaginary because those components are definitely orthogonal.
We thus obtain the two equations
$$
\begin{align}
\text{Real}\{x + x^*r^* - c r^2 + x^*r\} & = \frac{a\gamma}{2} \left ( 1 + r \right ) \cos \phi  \\
\text{Imag}\{x + x^*r^* - c r^2 + x^*r\} & = \frac{a\gamma}{2} \left (1 - r \right ) \sin \phi.
\end{align}
$$
Now we can solve for \(a\) and \(\phi\) quite simply.<br /><br />

What I noticed in the code of MPTK was that \(\gamma\) was missing from the computation of the amplitudes.
When I inserted back in, everything worked as it should!
But, as I predicted, its absence was absolutely and incredibly subtle.
For most atoms with no negligible imaginary part, \(1 - | \langle \vg, \vg^* \rangle|^2 \approx 1\).
This is especially true when decomposing audio signals because only
atoms with modulation frequencies close to zero and Nyquist will have a \(\gamma\) that is not approximated by 1.
For my length-64 Gaussian-windowed atoms with a modulation frequency 1/64 or 31/64
\(\gamma = 0.8038\).
When we go to a modulation frequency 2/64, or 30/64, this becomes \(\gamma = 0.9985\).
For length-512 atoms, atoms with a modulation frequency 1/512 or 255/512 have
\(\gamma = 0.7951\).
When we go to a modulation frequency 2/512, or 254/512, this becomes \(\gamma = 0.9982\).
And for length-16384 atoms, atoms with a modulation frequency 1/16384 or 8191/16384 have
\(\gamma = 0.7939\).
When we go to a modulation frequency 2/16384, or 8190/16384, this becomes \(\gamma = 0.9982\).<br /><br />

This explains why, no matter how large I scaled my atoms, I was only seeing this effect on the second and the penultimate frequency indexes.
However, the effect appears to be large.
Here are some new plots.
Below is the decomposition of the attack signal using a single scale dictionary.
Compare these with <a href="http://media.aau.dk/CRISSP/2011/06/cmp-in-mptk-second-results-and-second-thoughts.html">those</a>.<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecay_solved-643.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecay_solved-643.html','popup','width=860,height=582,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecay_solved-thumb-470x318-643.png" width="470" height="318" alt="ex1_energydecay_solved.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Tomorrow I will run the glock examples again.
What a great way to end my time here!]]>
    </content>
</entry>

<entry>
    <title>Don&apos;t Give Up</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/dont-give-up.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.261</id>

    <published>2011-06-15T18:44:22Z</published>
    <updated>2011-06-15T18:52:47Z</updated>

    <summary>This is my life the past few days. And yet again, I think I have it cornered. The same thing happens for atoms at the Nyquist frequency. Now, how to fix it?...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Humor" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="mptk" label="MPTK" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[<a href="http://media.aau.dk/CRISSP/2011/06/15/ex1_MP_atomsfreq1.mov">This</a> is my life the past few days. And yet again, I think I have it cornered. The same thing happens for atoms at the Nyquist frequency.
Now, how to fix it?]]>
        
    </content>
</entry>

<entry>
    <title>People, normalize your signals before you write wavs</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/people-normalize-your-signals-before-you-write-wavs.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.259</id>

    <published>2011-06-15T11:36:11Z</published>
    <updated>2011-06-15T14:59:41Z</updated>

    <summary>MPTK works! ex1_MP_atoms.mov In my experiments before, the MP reconstruction algorithm was hard clipping all values with magnitude greater than 1. So that is from where the spikes come. Oh, for F&apos;s sakes....</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Humor" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Music" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="bugs" label="bugs" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mptk" label="MPTK" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="normalization" label="normalization" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[MPTK works!<br /><br />

<a href="http://media.aau.dk/CRISSP/2011/06/15/ex1_MP_atoms.mov">ex1_MP_atoms.mov</a><br /><br />

In my experiments before, the MP reconstruction algorithm was hard clipping all values with magnitude greater than 1. So that is from where the spikes come. Oh, for F's sakes.]]>
        
    </content>
</entry>

<entry>
    <title>Debugging repository</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/debugging-repository.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.258</id>

    <published>2011-06-14T10:11:23Z</published>
    <updated>2011-06-14T19:33:51Z</updated>

    <summary>We have decided to get to the bottom of the unusual behavior of MPTK, since the next steps of our work on CMP depend on it. This entails comparing the results from my MATLAB implementation with those of MPTK (and...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cyclicmatchingpursuit" label="cyclic matching pursuit" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mptk" label="MPTK" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        We have decided to get to the bottom of the unusual behavior of MPTK,
since the next steps of our work on CMP depend on it.
This entails comparing the results from my MATLAB implementation with those of MPTK (and CMPTK) on the same dictionary.
I have decomposed one signal of dimension 1024 samples,
with a dictionary of modulated Gaussian windows of scale 64 samples,
with a hop size of 8 samples.
The MPTK dictionary is defined as follows (couldn&apos;t use pre html tags for some reason, so I attach it as a png):


        <![CDATA[<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/dfdsf-630.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/dfdsf-630.html','popup','width=333,height=210,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/dfdsf-thumb-470x296-630.png" width="350" alt="dfdsf.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

This "windowOpt = 0" business means that the variance of the Gaussian window is set to the default 0.02.
In my MATLAB code I have attempted to do the same. Here is how MPTK computes the window (actually only half of it is needed) of even length length:
<blockquote><pre>
optional = 0.02;
optional = 1/(2*optional*(length+1)*(length+1));
    for ( i = 0; i < length/2; i++, p1++, p2-- ) {
      k = (double) i - ( (double) (length - 1) )/2.0;
      newPoint = exp(-k*k*optional);
      *p2 = *p1 = (Dsp_Win_t) newPoint;
    }
</pre></blockquote>
Put together, p1 and p2 define the entire window.
Here is how I compute the same Gaussian window in MATLAB:
<blockquote><pre>
winVals = zeros(1,size);
optional = 0.02;
optional = 1/(2*optional*(size+1)*(size+1));
counter = 1;
for ii=0:floor(size/2)-1
    kk = ii - (size-1)/2;
    winVals(counter) = exp(-kk.^2*optional);
    winVals(size - counter + 1) = exp(-kk.^2*optional);
    counter = counter + 1;
end
</pre></blockquote>
Both dictionaries have 3993 complex atoms.
So far, everything checks out.<br /><br />

In the graph below, I show the ratios of residual energies due to my implementation to those produced by MPTK/CMPTK.
Above the periwinkle dashed line, the residual is larger in MATLAB that in MPTK; and vice versa below the line.
We see for the most part the differences of MP/MPTK are negligible.
This could be due to some indexes being one off, some of which I did find in my code and fixed.
For CMP/CMPTK however, the story is different. (I am only performing one cycle of refinement in each case.)
There are no reported increases of the residual energy in CMP,
but in CMPTK there are plenty, beginning with atom 11.<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydifferences-627.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydifferences-627.html','popup','width=842,height=582,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydifferences-thumb-470x324-627.png" width="470" height="324" alt="ex1_energydifferences.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>
Let's have a look at the residual decreases of CMP in MATLAB:
<blockquote><pre>
2: Energy reduction of 0.27118%
3: Energy reduction of 0.13418%
4: Energy reduction of 0.37532%
5: Energy reduction of 0.073902%
6: Energy reduction of 15.5745%
7: Energy reduction of 5.8543%
8: Energy reduction of 1.0909%
9: Energy reduction of 1.764%
10: Energy reduction of 1.497%
</pre></blockquote>

And now of CMPTK
<blockquote><pre>
2: Energy reduction of 0.266262% from 1 of 1 possible cycles
3: Energy reduction of 0.131654% from 1 of 1 possible cycles
4: Energy reduction of 0.40187% from 1 of 1 possible cycles
5: Energy reduction of 0.0768828% from 1 of 1 possible cycles
6: Energy reduction of 4.58075% from 1 of 1 possible cycles <-----
7: Energy reduction of 11.134% from 1 of 1 possible cycles
8: Energy reduction of 2.4887% from 1 of 1 possible cycles
9: Energy reduction of 1.68054% from 1 of 1 possible cycles
10: Energy reduction of 1.72243% from 1 of 1 possible cycles
</pre></blockquote>

All looks compatible until iteration 5 (arrow). We see that in the graph above too, when CMPTK performance takes a nose dive like my recent investments in CMP, Inc.<br/><br/>

So what is the atom that causes trouble at iteration 11?
There is nothing unusual about it. It begins at sample 80 (shouldn't that be 79 if we begin indexing at 0?), has a frequency of 0.015625*8192 = 128 Hz, an amp of 0.277851, and a phase of -1.82707. This atom causes the residual energy to increase 1.146%.
Here is where we take a look at the residual just before and just after this atom comes into play.<br /><br />

(Editors note: several hours passed between these two paragraphs, during which I had a long think to the bus stop, and some more think over dinner.)<br /><br />

Upon returning to home, I decided to perform the ultimate test of sanity: put two atoms from the dictionary in a signal, and see what happens. With this I believe I have cornered the problem. Take a look at the following movie.
My MATLAB implementation vs. MPTK. One is slow, and one is speedy.
Which one will win?
<a href="http://media.aau.dk/CRISSP/2011/06/14/ex1_MP_atoms.mov">ex1_MP_atoms.mov</a>. Clearly, MPTK has made a very poor choice. And I believe it all comes down to the position index selecting the atom in the block.
What happens when I make off by one in my MATLAB MP those positions at which I am searching for the largest magnitude projection (i.e., the atom hop size)?:<a href="http://media.aau.dk/CRISSP/2011/06/14/ex1_MP_atoms2.mov">ex1_MP_atoms2.mov</a>.
Not only do I pick up the same wrong atoms as MPTK, my computer's battery nears empty. The 2-norm of the differences of the residuals is 1e-4 --- which is not too large, but not too small.
Finally, when I shift the dictionary such that the atoms line up with how MPTK expects them, and keep my erroneous MP, I get the following: <a href="http://media.aau.dk/CRISSP/2011/06/14/ex1_MP_atoms3.mov">ex1_MP_atoms3.mov</a>. Yay! It works!!!<br /><br /> 

But wait. That's not all. Often I see the following behavior: <a href="http://media.aau.dk/CRISSP/2011/06/14/ex1_MP_atoms4.mov">ex1_MP_atoms4.mov</a>. That first projection was a doozy for MPTK. It left a massive dirac. And those 3 atoms aren't even close to each other to interfere. And here is one where it happens twice: <a href="http://media.aau.dk/CRISSP/2011/06/14/ex1_MP_atoms5.mov">ex1_MP_atoms5.mov</a>. My MP converges after 3 steps with an SRR of 94 dB; while MPTK has a paltry 31 dB SRR. The only thing I can think of is that MPTK is so fast that it becomes extremely excited when something fits so perfectly that it twists its atoms in knots before subtraction.<br /><br /> 

So, not only do we need to change the positions at which MPTK searches for maximums, 
but also something in the atom creation causing those diracs. And then CMPTK will hopefully be ready for the next step.]]>
    </content>
</entry>

<entry>
    <title>Paper of the Day (Po&apos;D): Encoding vs. Training with Sparse Coding Edition</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/paper-of-the-day-pod-encoding-vs-training-with-sparse-coding-edition.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.253</id>

    <published>2011-06-13T21:45:51Z</published>
    <updated>2011-06-15T06:44:08Z</updated>

    <summary>Hello, and welcome to Paper of the Day (Po&apos;D): Encoding vs. Training with Sparse Coding Edition. Today&apos;s paper is A. Coates and A. Y. Ng, &quot;The Importance of Encoding Versus Training with Sparse Coding and Vector Quantization&quot;, In Proc. Int....</summary>

    <author>
        <name>Pardis Noorzad</name>
        <uri>http://www.pardisnoorzad.com/about/</uri>
    </author>
    
        <category term="Machine learning" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="coordinatedescent" label="coordinate descent" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="dictionarylearning" label="dictionary learning" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="featurelearning" label="feature learning" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="orthogonalmatchingpursuit" label="orthogonal matching pursuit" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="sparsecoding" label="sparse coding" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="unsupervisedlearning" label="unsupervised learning" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[Hello, and welcome to Paper of the Day (Po'D): Encoding vs. Training with Sparse Coding Edition. Today's paper is A. Coates and A. Y. Ng, "The Importance of Encoding Versus Training with Sparse Coding and Vector Quantization", In Proc. Int. Conf. on Machine Learning, Bellevue, Washington, USA, Jun. 2011. In this work, which is a follow-up to their <a href="http://media.aau.dk/CRISSP/2011/05/paper-of-the-day-pod-an-analysis-of-single-layer-networks-in-unsupervised-feature-learning-edition.html">AISTATS'11 paper</a>, the authors explain why the dictionary used in encoding the data is not as important in providing a good representation, as the encoding algorithm itself. The authors report competitive results even when the dictionary is populated with random samples from the data.<br />]]>
        <![CDATA[In this paper, by "training" the authors mean learning the dictionary \(D\), and by 
"encoding" they mean mapping the input \(x\) to feature \(f\) given dictionary
 \(D\). The authors argue that if we are able to break down each feature learning method into its comprising training and encoding routines, we can then combine the subroutines from different feature learning methods and get more efficient algorithms without sacrificing (and sometimes improving) performance on classification tasks. They report classification results using 5-fold cross-validation with linear SVM on <a href="http://www.cs.utoronto.ca/%7Ekriz/cifar.html">CIFAR-10</a>, <a href="http://www.cs.nyu.edu/%7Eylclab/data/norb-v1.0/">NORB</a>, and <a href="http://www.vision.caltech.edu/Image_Datasets/Caltech101/">Caltech 101</a> (81.5%, 95%, and 72.6%, the first two being state-of-the-art results).<br /><br />The authors experiment with six methods for populating the dictionary, and a few methods for encoding using the dictionary. <br /><br />Here are the methods for learning/populating the dictionary (we are seeking dictionary \(D \in \mathcal{R}^{n \times d}\) such that each atom (column) has unit \(\ell_2\)-norm):<br /><ol><li>Sparse coding (SC) with coordinate descent: $$\min_{D, s^{(i)}} \sum_i \|Ds^{(i)} - x^{(i)}\|_2^2 + \lambda\|s^{(i)}\|_1.$$ One way to solve this
    optimization problem is to alternate minimization between the dictionary \(D\) and sparse codes \(\{s^{(i)}\}\) (one is kept fixed while the objective function is minimized w.r.t. the other and so on). The authors obtain the parameter \(\lambda\) by minimizing its average cross-validation error over a grid of candid values (as is suggested in the paper they cite).<br /></li><li>Orthogonal matching pursuit (OMP-k): $$\begin{align}&amp;\min_{D, s^{(i)}} \sum_i \|Ds^{(i)} - x^{(i)}\|_2^2 \\ &amp; \text{subject to } \|s^{(i)}\|_0 \leq k\text{, } \forall i\text{,}\end{align}$$where \(k\) is an upper bound on the number of nonzero elements in \(s^{(i)}\). To solve this optimization problem, one would alternate between minimizing \(D\) and \(\{s^{(i)}\}\), just like above.<br /></li><ul><li>Coordinate descent and OMP are algorithms for obtaining sparse codes given a dictionary, the dictionary on the other hand, can be obtained using gradient descent.</li><li>Optimizing both 1. and 2., you get the sparse codes as a byproduct of learning the dictionary (the training and encoding phases are intertwined). However, this doesn't stop us from holding on only to the dictionary obtained in this step and computing the codes by other means.&nbsp;</li></ul><li>Sparse restricted Boltzmann machine (RBM) and sparse auto-encoder: (I will go over these in later posts.)<br /></li><li>Random downsampling of data matrix \(X\) containing normalized \(x^{(i)}\)<br /></li><li>Random weights: One fills the dictionary with normalized columns sampled from the standard normal distribution.</li></ol>And here are the methods for encoding:<br /><ol><li>SC: Same optimization problem as above, \(D\) fixed, possibly different \(\lambda\), and setting the elements of feature \(f\) as $$\begin{align}f_j &amp;= \max\{0, s_j\} \\ f_{j+d} &amp;= \max\{0, -s_j\}.\end{align}$$Notice that instead of \(d\) dimensions, the feature \(f\) has \(2d\) dimensions. The authors call this "polarity splitting" and I don't currently understand the significance of it.<br /></li><li>OMP-k: Settings like 1. <br /></li><li>Soft thresholding: For fixed threshold \(\alpha\), they assign \(f\) as follows, $$\begin{align}f_j &amp;= \max\{0, D^{(j)T}x - \alpha\} \\ f_{j+d} &amp;= \max\{0, -D^{(j)T}x - \alpha\}.\end{align}$$</li><li>The natural encoding: If the dictionary is learned with SC, then the already-learned codes are used. Same goes for OMP. For RBM and the autoencoder, one computes the activation at the hidden nodes using the logistic sigmoid function \(g\): $$\begin{align}f_j &amp;= g(W^{(j)}x +b)\\f_{j+d} &amp;= g(-W^{(j)}x +b), \end{align}$$ where \(W = D^T\) and \(W^{(j)}\) is the \(j\)th row of \(W\). For 5. and 6., the authors use the dictionary as a linear map, i.e., \(f = D^Tx\) (this is like random projection, except instead of decreasing dimensionality it increases it, assuming \(d &gt; n\)).</li></ol>The authors obtain the best result on CIFAR-10 by using OMP-1 for training, and soft thresholding for encoding (and showing that the fatter the dictionary -- e.g., d = 6000 -- the better). They achieve the best result for NORB using random patches as the dictionary, and SC for encoding. Same goes for Caltech 101, although this result trails behind the state-of-the-art by 3.1%. The authors report the accuracies for each training/encoding pair for classification on CIFAR-10 in the first table (pasted below).&nbsp; In the second table, they report the best accuracies obtained by anyone on CIFAR-10.<br /><br /><a href="http://media.aau.dk/CRISSP/assets_c/2011/06/Table1-585.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/Table1-585.html','popup','width=567,height=375,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/Table1-thumb-360x238-585.png" alt="Table1.png" class="mt-image-center" style="text-align: center; display: block; margin: 0pt auto 20px;" height="238" width="360" /></a><a href="http://media.aau.dk/CRISSP/assets_c/2011/06/Table2-588.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/Table2-588.html','popup','width=605,height=340,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/Table2-thumb-360x202-588.png" alt="Table2.png" class="mt-image-center" style="text-align: center; display: block; margin: 0pt auto 20px;" height="202" width="360" /></a>Let's go over how the authors use the dataset in the unsupervised feature learning phase. In the case of CIFAR and NORB, they set \(x^{(i)} 
\in \mathcal{R}^n\) to randomly-chosen, normalized, 
vectorized \((6 \times 6) \times 3\) patches. As for Caltech 101, the 
\(x^{(i)}\) are the \(128\)-dimensional SIFT descriptors extracted from 
each random \(16 \times 16\) patch. Before sending it over to the dictionary training algorithm, they perform ZCA-whitening on the whole dataset \(X = [x^{(1)} , \ldots, x^{(1600)}]\).<br /><br />Given the feature mapping parameterized by \(D\), here's an overview of the pipeline that the authors set up for performing classification. First, they extract patches \(\{x^{(i)}\}\) (with the size specified above) with a shift of one pixel for CIFAR-10 and NORB, and eight pixels for Caltech 101, covering the whole image. For CIFAR-10 and NORB, the \(x^{(i)}\)s are the raw pixel values for the patch, whereas for Caltech 101, they are the values of the single SIFT descriptor extracted from the patch. For each pair of training/encoding method, the authors use the dictionary \(D\) to get feature \(f^{(i)}\) for each \(x^{(i)}\). So for example, for each&nbsp; \(32 \times 32\) image in the CIFAR-10 dataset we get (given the settings specified) \(27\times 27 \times 1600 \times 2 = 2, 332, 800\) dimensions! To reduce the dimensionality of the feature space a pooling step is carried out (differently for each dataset):<br /><ul><li>CIFAR-10: The authors average the feature values over the four quadrants of the image, yielding the final feature vector representing that image. (With pooling, we are down to \(4 \times 1600 \times 2\) dimensions.)</li><li>NORB: From what I understand here, they perform two stages of downsampling on the original \(108 \times 108\) images before extracting the patches. But then, they don't mention their pooling strategy after the feature mapping is done.</li><li>Caltech 101: Here, the authors perform "spatial pyramid" pooling. That is, they perform max-pooling on the features over \(4 \times 4\), then \(2 \times 2\), and \(1 \times 1\) grids in a hierarchical manner. They concatenate the results to form the final feature vector representing the image.</li></ul>Having thus obtained a single feature vector for each image in the test and training sets, the authors train a (actually many) linear SVM(s) to classify. <br /><br />In my opinion, the results of this paper are interesting but not completely surprising. Consider PCA and random 
projection (although they don't result in overcomplete 
dictionaries as the methods employed in this paper). We know that (in 
some tasks) random orthonormal weights are 
comparable to their "data-aware" and learned 
counterparts, i.e., the principal components. The results also explain why the k-means algorithm (employed in 
the AISTATS'11 paper) fared so well as the scheme for learning the atoms
 of the dictionary. ]]>
    </content>
</entry>

<entry>
    <title>Some Experiments with Glockenspeil</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/some-experiments-with-glockenspeil.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.257</id>

    <published>2011-06-13T16:11:52Z</published>
    <updated>2011-06-14T06:06:42Z</updated>

    <summary>Today I have been experimenting with CMPTK and a real audio signal. With this larger signal, the energy errors by which I have been plagued this last week seem to be much more rare. Below we see the residual energy...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Audio Signals" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Signal Processing" scheme="http://www.sixapart.com/ns/types#category" />
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cyclicmatchingpursuit" label="cyclic matching pursuit" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mptk" label="MPTK" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[Today I have been experimenting with CMPTK and a <a href="http://media.aau.dk/CRISSP/2011/06/13/glock2.wav">real audio signal</a>.
With this larger signal, the energy errors by which I have been plagued this last week seem to be much more rare.<br /><br />

Below we see the residual energy decay of this example with MP and CMPTK using a   dictionary of Gabor atoms (Gaussian window) of only two scales: 128/32 and 4906/64/8192 (scale/hop/FFTsize if different from scale).
I run 200 iterations.
CMP-\(l\) is implemented such that all representations at each order undergo at least one cycle. When \(l = 5\), more refinement cycles can be performed until the ratio of residual energies before and after a cycle is less than 1.002, or less than about 0.009 dB.
I also plot in this graph, the "cycle energy decrease," which is the ratio of the residual energy before and after the entire refinement at the iteration.
We find a few large spikes of improvement.
At the end of 200 iterations, the models produced by CMP have an error 2.2 dB better than that produced by MP.]]>
        <![CDATA[<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay_double-601.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay_double-601.html','popup','width=1112,height=692,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay_double-thumb-470x292-601.png" width="470" height="292" alt="glock2_energydecay_double.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Below, I show the time-domain residual signals resulting from both MP and CMP-1.
For the most part, the CMP-1 error signal is below that of MP; but strangely the first attack causes more problems for CMP-1 than the other attacks.<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_errorsdouble-608.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_errorsdouble-608.html','popup','width=1042,height=692,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_errorsdouble-thumb-470x312-608.png" width="470" height="312" alt="glock2_errorsdouble.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Let's have a listen to the sounds.
Here is the <a href="http://media.aau.dk/CRISSP/2011/06/13/glock2_MPresidual.wav">residual due to MP</a>;
and here is the <a href="http://media.aau.dk/CRISSP/2011/06/13/glock2_CMP1residual.wav"> residual due to CMP-1</a>.
I can't really tell much difference, except the CMP-1 residual is a bit quieter.
I don't hear any significant differences in the pre-echos of the attacks,
for which I was candidly hoping.
But if we take a closer look at how the attacks are being modeled by the
shorter atoms, we see some promising results.
Below I show each resynthesis aligned to the original signal using only the atoms of scale 128 samples (which is 6 ms at this sampling rate 22.05 kHz).
For the MP decomposition, 109 atoms out of 200 fit this description.
For both CMP decompositions, 105 atoms fit this description.
Except for the third, the attacks modeled by CMP look more cleanly synthesized than that of MP --- especially the second attack, which appears delayed by MP.
<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_attacks-624.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_attacks-624.html','popup','width=1036,height=692,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_attacks-thumb-470x313-624.png" width="470" height="313" alt="glock2_attacks.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Now, what if we do not use the condition that the refinement process can end if there is no significant reduction in residual energy? 
Using the same dictionary as above,
the figure below shows residual energy decay of this example with MP and CMPTK 
with one or two refinement cycles (5 will take too long, but I might run it overnight).
This means that MP will have 200 atom selections and 200 subtractions,
and CMP-1 will have 20,100 atom selections and 40,200 additions, and CMP-2 will have 40,200 atom selections and 80,400 additions.
Compared with the figure above, I don't see any benefit to forcing a certain number of refinement cycles --- which is a good thing for reducing the computational complexity.
A look at the residual signals confirms this. 
(I will not run \(l=5\) overnight.)
<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay_doublef-613.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay_doublef-613.html','popup','width=1112,height=692,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_energydecay_doublef-thumb-470x292-613.png" width="470" height="292" alt="glock2_energydecay_doublef.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Now, we move on to a richer dictionary. Below we see the residual energy decay of this example with MP and CMPTK for a dictionary of Gabor atoms (Gaussian window) of eight scales: 32/8, 128/32, 256/64, 512/128, 1024/128, 2048/256, 4096/512/8192, 8192/1024/16384 (scale/hop/FFTsize if different from scale).
For these examples, I have kept the rule that at least one refinement cycle is required, but additional ones will be performed as long as the ratio of residual energies before and after a cycle is greater than 1.002, or greater than about 0.009 dB.
Compared to that of the two-scale dictionary above, 
we see a better decay of the residual energy, but there appears to be less maximum improvement with the cycles.
Here the values extend up to nearly 0.15 dB; but for the two-scale dictionary the max improvement is twice that.
Just by eyeballing the two though, I think the mean improvements are about the same.
<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/glock21_energydecay_multi-616.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/glock21_energydecay_multi-616.html','popup','width=1128,height=692,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/glock21_energydecay_multi-thumb-470x288-616.png" width="470" height="288" alt="glock21_energydecay_multi.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Below, I show the time-domain residual signals resulting from both MP and CMP-1 with this multiscale dictionary.
For the most part, the CMP-1 error signal is below that of MP. Both methods appear to have the same problem with the first attack.<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_errors_multi-619.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_errors_multi-619.html','popup','width=1042,height=692,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/glock2_errors_multi-thumb-470x312-619.png" width="470" height="312" alt="glock2_errors_multi.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Let's have a listen to the sounds.
Here is the <a href="http://media.aau.dk/CRISSP/2011/06/13/glock2_MPresidualm.wav">residual due to MP</a>;
and the <a href="http://media.aau.dk/CRISSP/2011/06/13/glock2_CMP1residualm.wav">residual due to CMP-1</a>.
Again, I can't really hear the 1 dB difference.<br /><br />

Anyhow, the take home messages from all my weekend experiments appear to be these:
<ol>
	<li>Globally, CMP does not appear to improve a signal model enough over that of MP to warrant its significantly higher computational complexity.</li>
<li>We need to employ a much better strategy at localized levels to avoid as much as possible this additional overhead to have the greatest gains.</li>
<li>The architecture of CMP remains an attractive alternative to that of MP and OMP,
where once an atom is selected, it remains a part of the model forever.</li>
<li>Its cyclic application of a simple procedure also permits the application
of more complex criteria for atom replacement, such as perceptual weightings, 
and "<a href="http://media.aau.dk/CRISSP/2011/03/artifacts-in-greedy-pursuits.html">dark energy</a>" (my favorite!)</li>
<li>Thus, we must augment CMP with localized considerations;
and I believe I can see at least a dozen variations.</li>
<li>With which one should I begin?</li>
</ol>]]>
    </content>
</entry>

<entry>
    <title>A bug or a feature?</title>
    <link rel="alternate" type="text/html" href="http://media.aau.dk/CRISSP/2011/06/a-bug-or-a-feature.html" />
    <id>tag:media.aau.dk,2011:/CRISSP//1.256</id>

    <published>2011-06-12T21:49:40Z</published>
    <updated>2011-06-12T22:01:08Z</updated>

    <summary>I have been thinking about why CMPTK using a MDCT dictionary with Kaiser-Bessel windows produced no increases in energy, unlike all the other dictionaries I have been trying. Maybe it is a confluence of window shape, and real signals being...</summary>

    <author>
        <name>Bob L. Sturm</name>
        <uri>http://imi.aau.dk/~bst</uri>
    </author>
    
        <category term="Sparse Approximation" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="cyclicmatchingpursuit" label="cyclic matching pursuit" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="mptk" label="MPTK" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="softwarebugs" label="software bugs" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="da" xml:base="http://media.aau.dk/CRISSP/">
        <![CDATA[I have been thinking about why CMPTK using a MDCT dictionary with Kaiser-Bessel windows produced no increases in energy, unlike all the other dictionaries I have been trying. Maybe it is a confluence of window shape, and real signals being approximated by complex atoms, as well as various approximations being made inside MPTK.
So I tried something. (<em>Warning: the following is a rather rambling record of observations, probably what happens inside Dr. House's head.</em>)]]>
        <![CDATA[Let's try a dictionary of atoms created by modulating a Gaussian window of scale 128 samples, and hopped by 1 sample. I find increases in energy, the largest of which is about 0.6% of the energy. Here is a picture of the residual energy decays for example 1 (attack):<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecay_gaborGauss128-595.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecay_gaborGauss128-595.html','popup','width=860,height=582,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecay_gaborGauss128-thumb-470x318-595.png" width="470" height="318" alt="ex1_energydecay_gaborGauss128.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

Now let's try a dictionary of atoms created by modulating a Hann(ing) window of scale 128 samples, and hopped by 1 sample. I find no increases.
Here is a picture of the residual energy decays for example 1 (attack):<br /><br />

<a href="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecayHanning-598.html" onclick="window.open('http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecayHanning-598.html','popup','width=860,height=582,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img src="http://media.aau.dk/CRISSP/assets_c/2011/06/ex1_energydecayHanning-thumb-470x318-598.png" width="470" height="318" alt="ex1_energydecayHanning.png" class="mt-image-center" style="text-align: center; display: block; margin: 0 auto 20px;" /></a>

The Gaussian dictionary does a little better it seems, even though CMPTK was at times increasing the residual energy.
I try the same thing, but using a Cosine window -- no errors. Or a rectangular window --- no errors. But these do more poorly than Hanning (except for the sinusoidal signal example 3).
Now, back to the modulated Gaussian windows. 
Changing the scale to 256 samples, making the hop 8, but doubling the variance of the window, I get no errors!
Making its FFT size to 512 samples (zero padding), I get NO errors.
Changing its scale to 64 samples, keeping the hop and zero padding, I get lots of errors.
Removing the zero padding, NO errors.
Changing its scale to 130 (not a power of 2), putting zero padding back, lots of errors.
Removing the FFT size option, NO errors.
Changing the variance back to the original --- lots of errors.
<br /><br />

So it seems that the window shape and/or the zero padding have a significant influence on these errors either separately or together. The errors do not seem to be caused by the phase optimization of the real atoms using complex ones. To explore this further, let's look at a multiscale dictionary. This one is composed of modulated Gaussian windows of scale/hop: 128/8, 256/8, and 512/16. There are NO errors.
If I decrease the size of the smallest scale to 64, I get errors.
If I double the variance of the windows, I get NO errors.
If I make the windows all Hann(ing), I get NO errors.
If I give the 64-scale window a zeropadding to 256 samples, I get lots of big errors.
Putting the zeropadding on the largest window, to 1024 samples, gives errors.
However, putting the zero padding on the second largest window, out to 512 samples, gives NO errors. (The signal has a length 1024, so I wonder if that is a problem.)<br /><br />

Let's add more to this multiscale dictionary.
Putting in a Dirac basis gives no errors.
Putting in a window of size/hop 64/8 produces errors.
Changing that scale to 12 produces NO errors.
Changing that to 45, 34, or 24 creates errors.
It seems like when all the atom scales are large enough, errors are less likely.
But sometimes not.
Perhaps the problem is also that my test signals are 1024 samples.
I am trying with the Glockenspiel example, and no errors are being produced...
So, it looks as if CMPTK is implemented correctly, it just has "features."
Something else is going on that is causing the refinement iteration to skip over the best atom. And that something appears more and more like it has nothing to do with what I did or didn't do.]]>
    </content>
</entry>

</feed>
