A few months ago someone suggested me to go home and read some beginner books. Actually, nearly a decade ago, I co-authored a book on modular audio processing titled "Visual VSTi Programming", teaching people how to implement all the classical DSP algorithms. And before you say that modular audio is only for beginners and lamers, let me say that I've hand-written more than 200 DSP modules in C++, and that book represents my knowledge 10 years ago. By education, I'm an IT teacher and linguist.
Which knowledge do you think is worth more? 1) have read a book about it 2) implemented it in code 3) implemented it in code, and also taught others how to do it Over the years, I invented and implemented several new DSP algorithms, ones that you won't find in any book, anywhere. To show you the work I have done over the years, I uploaded some audio demos of the musical filters, effects and instruments that I invented. I think that is all 100% on-topic here, these are strictly *musical* filters. Before you dismiss my theories, listen to my DSP work: "DSP Algorithms of the Future" http://morpheus.spectralhead.com/demos/ For comparison, I also included audio examples of Robert Bristow-Johnson's cookbook biquad filters, who argued that my theories are wrong, and I should do things by the book. I'm not telling you which sounds better. You be the judge - which sounds better? The "classic", old-school algorithms that you find in textbooks and old papers, or the ones that came out of my head? After listening to my demos, if you wanted to learn digital filters and synthesis, who would you ask? Robert, or me? (You can also compare them to your own audio algorithms, if you have any). Personally, I prefer to invent the future that yet doesn't exist in books, instead of re-iterating the past the 1000th time. Most of these filter algorithms you won't find in any book, anywhere, as they're entirely my own inventions, not following any 'traditinal' designs. I'm a pragmatic person - I do what "works" in any given situation, even if it contradicts someone's theory. Shannon's work is titled "A Mathematical *Theory* of Communication" - which is, as the title says, just a "theory" (although a very inspiring one). It's not a Bible or a "One Universal Truth". As soon as you start applying "Shannon entropy" to certain real-world scenario outside some 1950s telecommunications context, it doesn't fully make sense. Real-world example: Imagine that I download the Titanic movie from the internet (during which, it already became a 'message', more precisely, fragmented over several TCP/IP packets). [And if you prefer to stay strictly on-topic, you could substitute the Titanic with your favourite musical album, say, encoded as PCM or MP3.] Now imagine that I burn that movie to a DVD, and send it to you in a message (say, in the mail). So I've sent the string of bits that represent the Titanic movie to you over a non-noisy physical carrier on an optical media. (More precisely, the optical media is "noisy" from the dust and scratches, but it has its own built-in error correction.) Question: what is the "entropy" of my message? Now, this question doesn't make much sense. First of all, how do you even define that at all in this context? Second, what would even be the *purpose* of assigning some real-valued number between 0-1 to a movie? What? You say, the Titanic movie cannot be a message? Who said that? Seriously, did Shannon say, that a message *cannot* be 4.5 gigabytes long? And if it *can* be 4.5 GB long (why not?), then why couldn't it be the Titanic movie, encoded as x264 MPEG4? Why would one make such arbitrary restriction? (Remember: *all* digital messages consist of "bits", so any "digital message" is effectiely a "string of bits".) [Food for thought: the usage of the 0-1 range to express measure of information, is an entirely arbitrarily chosen metric, which is followed merely by convention. In practice, it could be any range. Someone, somewhere in history, once said: "Hmm... I like the number '1'.... Let's use that as upper bound for amount of information!" And since, it's followed by tradition. Now, when I do practical computing on fixed point numbers, I may find it more practical to use a fixed point integer number instead, as the samples or pixels I am processing are often in fixed point anyways. So why do int->float conversion in the first place, when it's not necessary? Normalization is costy, division being the *most expensive* operation, like, costing literally 30x as much as a single addition (which may make normalization extremely costy if you want to do it a billion times), and is often redundant, and may actually decrease precision or introduce quantization errors. This should be trivial for anyone being intimately familiar with floating point representation of numbers. Since IIRC the originally suggested problem was that "you cannot compute so many correlations" - in response to that, I gave the *simplest*, dumbest possible decorrelation estimator that is the easiest (=cheapest) to compute. That's what you asked for... Of course, you can make it fancy, normalize it to one, etc. but that also adds to the cost. You can also imply normalization during computation, without actually doing it. So I skip normalization when it's not needed, hence I don't always use 0-1 range to express something. That's an arbitrarily chosen range anyways - consider this: how do you even express 0-1 on an embedded microprocessor that has no floating point operations and registers? In *practice*, even standard IEEE 754 floats are just approximations. There are no *precise* floating point numbers in the digital world, everything is just "bits" and "approximations" (unless you do symbolic processing or arbitrary precision arithmetic, which is a whole different story). Again, in the "real world", everything is just "bits", whatever symbolic information they represent on a semantic level. Why are you missing the entire physical layer in the OSI model?] Now, for the sake of a thought experiment, let's imagine that we could calculate the "Shannon-entropy" of the Titanic movie precisely when I send it to you in a message: "Well, at first I was unfamiliar with the movie when I watched it, so it had an entropy of 1.0. Later I watched it again, but since I remembered most of it already, it had an entropy of 0.2371625. A half year later I watched it again, by which time I forgot about half of it, so it had an entropy of 0.71264." ... to me, this doesn't make much sense. Assigning some real-valued number between 0-1 to the Titanic movie to determine it's "information content" for a certain recepient, doesn't sound any less nonsense to me than how nonsense it sounds to you that I assign some real-valued number to an arbitrary string of bits based on decorrelation analysis to estimate its information content for the purpose of various processing. (Well, you could define the entropy based on the probability of "accidentally" sending you the bits that represent the Titanic movie encoded as x264 MPEG4, if I started sending you bits randomly. Which, for all practical purposes, has a probability of zero.) To me, it is a lot more interesting to test things like, "if I remove a certain pixel from the movie, will your brain still perceive the whole as the *same* information? Will your brain notice that "missing" pixel? If not, then - in my view - that individual pixel has 'low entropy', compared to those pixels, which are not a good idea to take away as your brain will "notice" that. If your mind doesn't "perceive" something and you can freely take it away without loss of perceived content for the recepient, is it "information"? How many pixels can I take away, until the recepient still "recognizes" the information? Where do the "bits" end, and where does the "content" start? Considering these questions is already useful for things like, video compression, and we might call this "perception-based approach to information". (As I know, Shannon was also concerned with data compression, so this is relevant to his work.) Once you start applying "Shannon entropy" in the strict sense to certain real-world contexts, it kinda stops making sense. It's not "impossible" to determine, it rather makes no sense in the context. For example, if your goal is to determine how much information is "new" in a message for a certain recepient, you could simply do some social engineering, and hand out a questionaire to the recepient of the message, and simply ask that information. If you give enough incentive, and use the proper questions, the recepient will simply tell you. After all, the notion that the recepient is already 'familiar' with some information, assumes that the recepient has 'intelligence', and so, can answer questions. If the recepient has no intelligence, and cannot answer, then why are you even sending a message? It makes no sense to send a message to a rock... So if it follows from Shannon's theory that the recepeient has intelligence, why not simply ask what you want to find out? Did Shannon say, that you *cannot* ask a question from the recepient of the message? Why make such an arbitrary restriction that "asking questions is forbidden"? If it's not forbidden, then why not simply ask the recepient: "On a scale of 0 to 1, how much of this info is new to you?" In that case, it becomes a simple social engineering and psychology question how to "extract" that information from the recepient of the message as accurately as possible (assuming you want to base your measure of information on how much the recepient "knows", which already implies intelligence on the part of the receiver at the other end of the channel). Again, it makes no sense to send a message to a rock that cannot answer. So the proper question to ask is: "what are you *really* trying to do here, and why are you using the wrong approach?" Sure, if you make several arbitrarily made up restrictions, like "message cannot be the Titanic", "askings questions is forbidden", "information is based on probability as a whole", "you're an idiot because I said so" etc. then things become trivially impossible. But why even make such restrictions in the first place? If you don't know something, you just need to ask more questions, and keep asking until you have the answer with a sufficient precision (which may take a long time). If you instead just sit there and keep saying "it's impossible for me to find out this information, because instead of simply asking it, I am trying to determine the probabilty" - then sure, you'll never find out what you want... But what are you even trying to *do* anyways? What *real-world* problem are you trying to solve? Give me your *real-world* problem, and I'll give you a solution or an approximation. But if your "problem" that you're trying to solve doesn't make sense outside some theoretical context, then I cannot help you. In that case, your "problem" doesn't have much to do with any real-world scenario. On the positive side, at least I can use my own theory of entropy to do graphics processing, video processing, image compression, video compression, smart enhancement filters, motion detection, noise removal and SNR increasement, color classification, face recognition, various practical information estimates (sadly, all of which are off-topic here), and also new musical effects, that I cannot do with "Shannon entropy", which makes no sense outside some limited contexts. I believe, I also invented a new type of audio filter with interesting properties that I'm still invetigating, as I've never seen that type of filter described anywhere in the literature. (I plan to turn this into practical audio plugins, which is non-trivial as the filter is non-casual, and also needs to solve the zero-delay feedback problem. BTW this filter alone would make a very interesting DSP paper.) But who cares - in the eyes of some arrogant academics who keep their nose high (because they're afraid to admit that their knowledge is limited), I'll be considered an idiot no matter how many great new algorithms or audio filters I invent, because I contradicted their Bible, and dared to use the highly-overused term 'entropy' to express something. (Maybe I should have called it "decorrelation coefficient" instead, to avoid the wrath of a bunch of Shannon-zealots. Anyways is there some International Entropy Comittee which decides what can be called "entropy", and what can't? I never heard of such... I think it's one of the most overused technical terms in history.) So at the end of the day, it doesn't matter how many books you've read, or even what you *think*. The bottom line is: what have you *done*? I've shown you what I've *done* in the field of music-DSP, you heard the audio algorithms that I invented and implemented. As you see, I'm a person who "gets things done". What have *you* done? Until you've shown your work is worthy of respect, you're just talking. Best regards, Peter Schoffhauzer researcher, inventor, author CEO at Spectralhead Audio IRC: #music-dsp on EFNet P.S. For those interested in alternative methods of approximating the 'information' content of an a arbitrary message, here's an interesting neural network experiment I did a few years ago, using standard feedforward backpropagation learning that you'll find described in any introductory beginner level artificial intelligence book: http://scp.web.elte.hu/neuro/ As you see, the neural networks could 'extract' much of the information present in the image fairly well, despite the fact that my algorithm knew nothing about any kind of *probability*. Depending on the complexity of the neural network, it gave approximations of the 'information' (=content) with varying levels of detail and precision. So this is a kind of an "information extractor" algorithm, a form of automated machine learning. Imagine that you can do the same for audio, which is an area of my research. Notice, that this can be also thought of as a "high-level lossy image compression", as the image gets represented by a small number of coefficients in form of weights of the neurons in the simulated neural network. This is in fact, similar to how information is extracted and stored in your brain in form of neuronal connections, as you mentally process sensory input (=information). This can be later used for say, face recognition, as it is like a filter that "resonates" at a certain input. (If it weren't extremely slow to compute, this could be used for image compression, and I'm considering trying to speed it up by combining this with 2D wavelet processing.) Sure, if you - for whatever reason - insist on defining "information" based on probability as a *whole*, then this is of no use to you at all. But what *purpose* would it serve to have a real-valued number between 0-1 assigned to each of these images (assuming, they're each sent in a message)? Say, Image #3 (when sent in a message to recepient X) had a "Shannon-entropy" of 0.321679. So what? To me, that sounds pretty boring and useless, regardless of context.... I think my approaches are a lot more practical, exciting and fun, than merely assigning a 0-1 valued number to the whole message, which is again, pretty boring and of not much use (unless you use that information to classify messages based on that number). Otherwise, what would you *do* with that number? After all, even *knowing* it may not be useful for anything practical at all. So then what are you even trying to *do* ? And why stop at the level of messages? The smallest unit of digital information is a *bit*, not a *message*. All messages in digital communication consist strictly of *bits*. I certainly remember a passage from Shannon's "Theory of Communication" where he discusses the information content in the individual symbols (letters, words etc.) that constitute the message. If you take the lowest common denominator of all symbols used in digital communication, you arrive at *bits*, which is the tiniest symbol having a symbol space of two. Why skip that part of Shannon's work entirely? Not all symbols in a message have *equal* entropy... Did you even *read* what Shannon wrote? Am I the only one on this mailing list who actually *read* this section from Shannon? Are you guys trying to argue with Shannon himself? I don't know *where* you got your information from, but certainly not from Shannon. If you missed that part where he's discussing the entropy of individual symbols that constitute a message, you're certainly missing something from his work... Where did he wrote that the only unit to analyze is a *whole message*? He *certainly* analyzes symbolic constituents and their *correlations*, for example if I send you the word "mathematica" in a message, there's some amount of *correlation* between the symbols (=letters) that constitute that message, due to the peculiar nature of the English language, decreasing the "entropy" as a whole due to the *correlation* of symbols, which was of interest for Shannon, and is of interest to us linguists, and is similar to what I was talking about earlier ("the more correlated the symbols are, the less the entropy"). I merely took Shannon's approach, and applied it to the symbols that constitute any digital message (=bits), and analyze the *correlation* between bits, similar to how Shannon analyzed the *correlation* between symbols (like letters) in a message. There could be a myriad ways of constructing algorithms that approximate the *correlation* between symbols (= bits, letters, words, pixels, samples, etc.), which, again, constituted an important part of Shannon's work in determining the *entropy* of the whole message. Why skip that part of his work entirely? I have no idea which *book* told you that the only thing to analyze is "whole messages", but that is *certainly* not true of Shannon's work. So I'd recommend to throw that book far away, and read Shannon's work instead, carefully paying attention to the sections where he discusses the entropy of individual constituent symbols in a message. (Why are you even reading books that completely skip half of the story? Those books are to be thrown away or burned.) These neural network algorithms didn't exist back in the prime days of Shannon, and even using today's computers, it took me hours to render each of those tiny images, as it's extremely computation-intensive to 'extract' or 'learn' information using simulated neural networks and automated machine learning. (This is one of the reasons why I prefer simple unnormalized bit arithmetics based decorrelation analysis instead, as that's a lot faster to process a billion times, and gives a perceptionally useful result.) If your "message" is a green rectangle with a red disk in the centre, a simple neural network can automatically "recognize" and extract that information easily, without "knowing" anything about your message beforehand, which is routinely used technology (also in audio processing, speech recognition etc.) Without considering how information is perceived, processed and retrieved in your own brain, and how you can simulate that, one thing is certain: you'll never get the full picture about "information". What I am concerned with, is not whether I can 'extract' the information content of an arbitrary message or not, but rather: how to do it *faster* and *better*, with less computation and better precision. How can I recover lost bits of an information/signal? How can I "enhance" the information, and suppress the noise and low-entropy parts? How can I "compress" the signal by dropping certain bits? How can I approximate the information using simulated neural networks? How can I make better quality resamplers, noise reduction and restoration filters? How can I make a computer "learn" a musical piece or a musical style? How can I mathematically express what a human brain considers "art"? How can I make better, faster, more precise filters? To me, these sound a lot more interesting, than merely "assigning a number between 0-1 to each message", which sounds pretty useless overall, so *why* are you even trying to do *that*? Without turning it into some *action*, it doesn't make much sense to do... Since I'm pragmatic, I do what "works", and I don't need anybody's approval to do it. Especially not someone, whose bilinear transformed biquad filters have more Nyquist warping and error compared to analog prototypes, than mine, or someone who admittedly has "no clue of entropy estimation". So, I don't want to disturb your arrogant religious circles, sorry for any fuss I made. The sad fact is that your religion is not even "Shannon-religion", rather, some dumbed-down edition that completely skips a lot of Shannon's work. I believe if Shannon lived today and joined this discussion, you would even argue him, as he was concerned with *correlation* of *symbols* constituting a message to determine it's entropy (if in doubt - read his work). If you missed that part, you missed the point of his theory... (And for some reason, some of you seem to be missing the physical layer in the OSI model entirely.) I believe you would tell Shannon: "No, you're an idiot! Go home and read some beginner books... We *don't* analyze the correlation of the symbols in a message!!" So, have fun with your books, I'm rather busy elsewhere, inventing the future, and turning all my "weird" ideas into audio filters and plugins. -- dupswapdrop -- the music-dsp mailing list and website: subscription info, FAQ, source code archive, list archive, book reviews, dsp links http://music.columbia.edu/cmc/music-dsp http://music.columbia.edu/mailman/listinfo/music-dsp