Faster-Than-Fast Fourier Transform
First time accepted submitter CanEHdian writes "MIT news reports on research done resulting in a Faster-than-fast Fourier Transform algorithm. 'At the Association for Computing Machinery's Symposium on Discrete Algorithms (SODA) this week, a group of MIT researchers will present a new algorithm that, in a large range of practically important cases, improves on the fast Fourier transform. Under some circumstances, the improvement can be dramatic — a tenfold increase in speed. The new algorithm could be particularly useful for image compression, enabling, say, smartphones to wirelessly transmit large video files without draining their batteries or consuming their monthly bandwidth allotments.'"
In before _____.
Key phrase:
"smartphones to wirelessly transmit large video files without ... consuming their monthly bandwidth allotments."
Everyone see the connection to the Copyright Mayhem this week?
Bueller?
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
Doesn't some part of Internet Security (of ____, I'll leave that to my betters to explain) rely on Fourier properties?
So if we can bust those "Faster than Fast", what next?
My first Journal Entry ever, in 8 years! http://slashdot.org/journal/365947/aphelion-scifi-fantasy-horror-poetry-webzine
It doesn't improve the regular FFT but only sparse variants. Image or Audio compression nearly always uses the regular non-sparse FFT.
Jan
So the cat gets transformed even faster.
(apologies to XKCD)
Twitter supports and protects racists - by smearing their critics with the "Hate Speech" label.
Lossy compression such as MP3, AAC, and according to TFS also video compression, are all fundamentally based on FFT (fast fourier transforms). Depending on how well this new specific method works, we could see decreases in the time it takes to encode all this stuff. Which can be quite a long time... have you ever tried to do a 2-pass MPEG 4 conversion on a feature-length digital video? Video encoding doesn't scale well to multiple cores either, so nowadays when performance increases coming mostly from adding more cores... video encoding hasn't been getting faster at the same pace it used to. I'm thinking this new FFT algorithm could make a big difference in encoding speeds.
Additionally, I know lots of audio (and I'm assuming video) effects, DSPs of the kind you find in Adobe Audition, Audacity, et al., rely on FFTs. Computing such effects could get a lot faster. With increases in both the speed of adding effects, and compression afterwards, we might be seeing a significant speedup in the overall digital audio/video-editing process.
DSP with Arduino
What is wrong with this picture?
Processors used in Arduino (Atmel 8-bit AVR series) are minimal, general-purpose microcontrollers, a replacement for earlier PIC microcontrollers. Using them for DSP is only slightly less stupid than building DSP boards entirely out of individual discrete transistors. There is A WHOLE FUCKING CATEGORY OF IC dedicated to DSP, plenty of microcontroller-style yet high-performance SoC suitable for DSP, and FPGA with DSP-specific blocks.
But noooo, ignorant people such as yourself, would rather recommend the most un-DSP-ish device in the world just because it comes bundled with Java-based IDE that runs on your beloved wiiiiiiiiindows and has the ugliest editor ever written since xedit.
Contrary to the popular belief, there indeed is no God.
I'm sure I'm not the only person who completely understands what a FFT does but simply can't get his head around the actual implementations details. I simply don't get how a signal of many mixed frequencies which essentially means the amplitude is moving all over the place can travel through some equations and a neat list of the fundamental and harmonics can pop out. Its mathematical magic to me. Wish I could "get" it. But I guess I'll just have to settle for using it.
While I do argue with your point, there are a ton of devices that would benefit from it. Why do you think the implementations of FFT for 8/16-bit microcontrollers such as the 8051 are so popular? DSPs are popular in applications that make heavy use of FFT, but there are a ton of general purpose implementations that require FFT algoritms, ranging from multitone generation/decoding to D/A conversion. Why should I use 2 ICs (plus assorted external logic) on a given circuit, if I can easily do it in software on my general-purpose microcontroller, that besides the integrated ram and rom, also bundles me with a serial port, multiple I/O ports and a ton of "extra" features, at a fraction of the price?
Well, if for some reason someone is already using Arduino boards to do a bunch of stuff it might make sense if it was just fast enough. But yeah, if you have a choice it doesn't make much sense to pick an Arduino for this task.
So far the only "usefulness" I've seen in the Arduino has been for that retro kick, being artificially limited to the kind of environment I haven't had to work in for a long time, but if I wanted to build something useful I'd probably at least want a 16-bit processor these days, the difference in price is negligible for any hobby project (hell, a 32-bit processor probably wouldn't be a major budget concern considering what you're likely to spend on the rest of your hardware when building something)...
Greylisting is to SMTP as NAT is to IPv4
Let me get this straight - you're saying you woke up in the middle of the night intending to take a dump, and somehow ended up posting about complex mathematical algorithms on the Internet instead? Respect.
In a cell phone or wi-fi, there are FFTs all over the place. They use them for things you would never suspect ... even if you have taken a DSP course. In modern radios (cell phones or anything else connected wirelessly) the DSP is the main chip.
Every time you find a computationally efficient way to do something, you improve battery life. So, phones can stay the same size and take advantage of even more streaming content.
I agree with the AC -- it would be cool. [S]he didn't suggest using it in commercial applications, just as a fun thing to do. With a possible ten-fold increase in speed, DSP that was out of the Arduino's range comes within it, so there are now more things the Arduino can do. That's cool. If you want to simply buy a purpose-built DSP chip that's fine, but in this place of all places don't knock the geeks who want to build the thing at home from the lowest-level components practicable.
Quidnam Latine loqui modo coepi?
Does this mean we get better and faster autotune?
From what I know, the Great Internet Mersenne Prime Search (GIMPS) uses a Fast Fourier Transform to quickly find the square of a number. This is a required part of the Lucas-Lehmer test (the test that determines if the number is prime).
If this form of FFT can do fast squaring, it will reduce the amount of time taken to find new, large primes.
This is a potentially exciting development in this field.
/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i
Not every FFT implementation is floating-point (I believe fixed-point implementations are quite more common than floating-point ones), and software-based floating point is not "somewhat slow", is "slow as hell". For many applications, fixed-point and good ol' lookup tables (either complete tables or sample points with interpolation) do the trick rather well.
No matter how good you think the latest and greatest algorithm is, there is usually someone who can come up with a way to improve on it.
For example, I DO know how to structure the probes done by MSS Code Factory such that you could stuff the rule base in Oracle and use some very Oracle-specific syntax to do the probes in one query, taking the first record from a sorted result set as your "answer" to the probe. I've written similar queries for other databases, but they're constrained by how many levels deep you want to write the query for. As there is no telling how deep the query would be for MSS Code Factory, and I don't want to tie myself to an expensive product like Oracle, what I have now is pretty much the best I can do at the moment. Maybe some day I'll come up with more tuning ideas, but not right now.
Kudos to the FFT team. I look forward to reading the details, though my memory of FFT math is pretty old, fuzzy, and shaky nowadays.
I used to be heavily into computer graphics and audio processing in the university days, but I've spent decades focusing on business programming instead. Unless you really LOVE graphics and sound, and want a job in a very narrow field (including video games), I think it's inevitable that you put away the toys and pick up the tools of industry that will earn you a pay cheque.
I do not fail; I succeed at finding out what does not work.
Saying that compression uses the regular "non-sparse" algorithm is rather meaningless; they use what is available, and I don't believe there was a sparse-optimized algo until now.
Comment removed based on user account deletion
The Spectrum Analyser. This is one of the most common uses is staring you right in the face in almost every mp3 player.
The interesting thing is that the greater time window over which the FFT operates, you can observe finer frequency detail within that particular window at the expense of how quickly the graph or bars change over time (in simplistic terms). I wonder how this new algo will change the frequency detail/transient time detail trade-off. Do we see more detail in both domains? Less? The same?
They will try to keep this under wraps as anything that speeds up video encoding/decoding will be classes as anti Hollywood and a tool for piracy.
Standby for a few mysterious disappearances of any public copies of the algorithm.
I'd rather be riding my '63 Triumph T120.
Slashdot could really use a +1 Insightful but Unnecessarily Dickish mod.
A year ago, there was still easily an order of magnitude difference in price going from AVR to 32-bit microcontroller land in base deve hardware alone. You say that for one hobby item the price difference (say $10 --->$100) is neglible, because they are both smallish numbers relative to income... 1) You need to learn multiplication 2) A lot of hobbyists have the desire to do their own version of "ubiquitous" computing.. Your "negligible" price difference theory breaks down in all the cases I'm familiar with.
And please spare me with examples of ultra cheap 32-bit systems, which I know always exist at any given moment. I still remember that time when the TI eval robot had a leaked promo code. That thing took down TIs website and then of course was promptly gone... When assisting a local youth group with a robotics project I looked at numerous "inexpensive" ARM options, only to find that at any given time product availability in this domain is *inconsistent*. Say what you will, but there is almost always an Arduino clone around, and if you fry it, you don't care. If you get a special on a 32-bit ARM system, good luck buying another in 3 months.
In my business, if you absolutely *NEED* a dev board you must still be prepared to pay $300-1000 bucks for the base board alone. I'm a day-job embedded product designer that also works with hobbyists at a hackerspace, so I am not hung up on any one usage and I can tell anybody that thinks that AVRs are irrelevant are still full of shit.. Where is your raspberry pi available for sale, fucker?
TFA trivializes the result. A reduction of up to 90% the speed is not theoretically interesting at all - it could always be overridden by difference in architecture and implementation, often making older algorithms faster. There are many better ways to describe the reduction in time complexity to the laymen.
The interesting thing is that the greater time window over which the FFT operates, you can observe finer frequency detail within that particular window at the expense of how quickly the graph or bars change over time (in simplistic terms). I wonder how this new algo will change the frequency detail/transient time detail trade-off. Do we see more detail in both domains? Less? The same?
This is a property of the Discrete Fourier transform itself. For a certain window size there are only a discrete number of frequencies that you can calculate.
The larger your window-> The more frequenecies you can see (at the expense of a longer sampling time)
FFT algorithms simply try to compute the DFT quickly, this advance is significant for paractical applications but doesn't change the underlying mathematics.
I fully expect it to be the same, as it comes down to information content. It's just not possible to extract information that isn't there, no matter what algorithm you use. Same problem as with "Enhance!" in the movies.
Bill - aka taniwha
--
Leave others their otherness. -- Aratak
No reason to shout. Let people have their hobby! I think AVR and similar inexpensive microprocessors are a great way to get started in "not purely software" hackery. And if Arduino and the likes make it even easier, the better! Just because not everyone was born with a keyboard in their hand, typing into emacs, doesn't mean they don't have the right to explore the realm of programming with whatever editor and platform they like. Sure, there are a lot of applications these 8-bit MCUs are ill-suited for, but let them figure that out by themselves. It's a learning process, but you in your arrogance shout at AC because he/she wished for something you think is impossible. And maybe it is, but the way you communicate that is somewhat arrogant. There are plenty of paths to becoming an educated hacker and if it's via a Java-based IDE on Windows that's just as well.
While I too am sick of seeing dinky little Arduino projects, there are plenty of good reasons to be doing FFT on low power micros.
For example, the company I work for designs battery powered wireless sensors: They have to be compact, consume minimal power and have minimal components for manufacture. We've got a single ATMega processor that sits between a sensor and a radio, doing, among other things, FFT and other 'DSP' functions to compress the data before we spend our precious milliamps transmitting it.
It really is the cheapeast, lowest power way to get the job done, sometimes a hardware DSP is overkill.
It's more than a property of the DFT - it's a much deeper mathematical truth than that. The same fundamental mathematics is used to derive the uncertainty princible in quantum mechanics: For a signal to be perfectly defined in frequency it must be infinite in time, and vice versa. When you apply the same to quantum wave-functions... the uncertainty limit isn't a limit on measurements. It's a limit on what the universe is capable of representing.
They do well when you need something a little more powerful and extensible than a PIC, but still need to watch the power consumption - and the shield system and standardised communication allowed for economy of scale in peripherals. You can take an arduino and just wire it to an ethernet interface, or a bluetooth interface, or an 11g interface, or an SD card reader, or all sorts of other forms of IO, without having to worry overly about compatibility. Plug and play for embedded computing.
A math coprocessor is designed to speed-up floating point computations. But a FFT can be applied to integers too, and there are plenty of integer based FFT applications (telecom, audio...). In this case a basic FPU will not help you. On such a small processor as in the Arduino any use of the FFT will likely be integer based, with a small FFT size (think coarse spectrum analyzer for example).
;)
The reason I say "basic FPU" above is that it seems to me most vector engines can also operate on integers, not only on floats. So they're not strictly FPU only anymore. And such vector units can typically also be used to speed-up integer FFTs, using a FFT specific addressing scheme (search for "Butterfly diagram" in wikipedia if you're interested). But then we're far from an Arduino
The interesting thing is that the greater time window over which the FFT operates, you can observe finer frequency detail within that particular window at the expense of how quickly the graph or bars change over time (in simplistic terms). I wonder how this new algo will change the frequency detail/transient time detail trade-off. Do we see more detail in both domains? Less? The same?
That's a consequence of a fundamental mathematical relationship between the frequency and time domains and has nothing to do with the algorithm itself. A signal of length L can be exactly represented by a Fourier series of frequencies 0, 1/L, 2/L, 3/L... etc., with nothing in between, so there's no finer detail to see.
As a scientist in the filed of Fourier Transform Spectroscopy I find this perspective quite interesting, even though it is not that different from other techniques we tried to apply in the field to improve performance. Needless to say, we are quite dependent on FFT performances in this field, even more since the deployment of Imagine FTS systems. Any improvement in FFT performance is noteworthy.
Lets see if its one of those "fields" where drastic performance improvement can be met! Regardless, it's quite an interesting break for signal processing.
Actually a very large number of projects you see out there in the hobby arena are the opposite. It's a case of people throwing 8-bit microcontrollers at simple problems that can more easily / better be solved with either some discrete parts, logic ICs, or even analogue circuits.
Currently I use 8bit AVRs (not Arduinos) for most of my projects, but when I look around I find I have the opposite opinion to you. I have a digital radio complete with 128x64 pixel screen and a menu system that goes 3-4 levels deep that all runs on an 8bit microcontroller. There are projects out there that collect data from various forms then transmit wirelessly to a datalogger. There's even entire web servers running on 8bit microcontrollers. What I'm really wondering is what kind of an incredibly complex project do you have that requires more than what's available in most common $10 8-bit microcontrollers?
Also 16bit microcontrollers and worse still ARMs, comes with an even larger feature set than the standard AVR that powers the Arduino. This has some repercussions including making software more complicated (more registers to juggle which could be good or bad), often means a more complicated footprint (how many 16bit microcontrollers come in a 12pin DIP package), and sadly for several companies also means no decent free developer tools or a crippled compiler.
So ... just what kind of supercomputer are you building with your fancy 16bits? :-)
Another use that I can see for this technology is to use it for emergency and impromptu news broadcasting, especially when faced with dictatorial authorities (like Iran/China/Syria) which will do anything to stop unfavorable news from getting out to the world
Muchas Gracias, Señor Edward Snowden !
Has research established a theoretical minimum amount of joules required to transmit one bit of info, at the limits of computation?
--
make install -not war
... how do you get from a load of say 16 bit samples into vectors? If I have sin wave sample data in an array such as the following:
0,5,10,5,0,-5,-10,-5,0
how does that then become a sequence of vectors to calculate the FT?
I've no idea. I've been using JDBC for the past 15 years, or ODBC for .Net, and it's been 3-4 years since I last touched Oracle. The tuning tricks I was taught 20 years ago still seem to work though, and for most databases, not just Oracle.
I have 30+ years of RDBMS experience, having cut my teeth on the very earliest releases of Oracle, Sybase, and Ingres back when I was working for NorTel in around '89. I was on a project tasked to write real life applications with each of them so the company could compare performance. So three of us each developed our approaches independently, focusing on one database, but working together to make sure we were implementing the same business solution in each case.
While my database assignment was Ingres 1.0, I learned a lot about the differences from our design meetings, and went from there to Florida, where I soon became an Oracle DBA-level resource, brought on as a query tuning expert by Orange County's GIS department, AT&T's Payroll Processing department, and a couple others. I tuned a 27 hour GIS department query to run in 2-3 hours, and took AT&T's payroll processing down to around 20% of the run time.
When it comes to databases, I know my schite, but that doesn't mean I know ALL the tricks by any means. The more I learn, the more I realize how much I don't know.
For example, I've never used Oracle's C/C++ OCI APIs.
I do not fail; I succeed at finding out what does not work.
What is wrong with this picture?
Moderation categories already encompass both categories mentioned, and are an improvement on a simple "like" or "dislike". Adding multiple combinations of moderation (e.g. Insightful + Flamebait or Informative + Troll or any of the other 90 combinations you would needlessly add to the slashdot moderation system) is only slightly less stupid than allowing the herd of cats that is the slashdot moderator community to just create arbitrary moderation categories out of thin air any time they feel like it. There ARE TWO WHOLE FUCKING CATEGORIES OF MODERATION already dedicated to "Insightful but Unnecessarily Dickish", namely Insightful and Flamebait. The general idea is that on average the +1 from the Insightful and the -1 from the Flamebait cancel each other out, and people checking the moderations on their comments over time will come to realize they should be less of a dick but retain their level of insight.
But noooo, ignorant people such as yourself, would rather recommend slashdot implement the most arbitrary and poorly architected moderation system in the world just so you can get the +5 insiiiiiiiiightful. (And even if you would argue that Dickish!=Flamebait you are proposing a new 11th moderation category for "insightful but Unecessarily Dickish" worth a +1, which would result in the sizable misanthropic subset of slashdot users who would actually TRY to get their posts moderated as your wondrous new moderation category, thinking it is an improvement over plain old insightful.)
If I have seen further it is by stealing the Intellectual Property of giants.
0,5,10,5,0,-5,-10,-5,0
You can consider them as vectors, but normally they are considered complex numbers.
....
0 + 0i, 5 + 0i, 10 + 0i, 5 + 0i,
"His name was James Damore."
Except when your device is already made with Arduino, and then it needs to do something new that is DSP. Then you need DSP with Arduino. Even if it's "stupid" it might be necessary. Most application development must use the HW already present in its installed base, or die trying.
Since DSP (or rather NSP, since "Native Signal Processing" is what non-DSP CPUs were needed to do when there was no DSP but only a CPU in the installed base) isn't impossible on microcontrollers, just somewhat impractical on many of them. Yet the AVR ATMega is common in Arduino, and includes a HW multiplier that can be used for multiply-accumulate that is the core of DSP:
Meanwhile, new Arduino Due boards include ARM processors with HW multipliers.
Even if the processor/microcontroller has no HW MAC, it can do DSP - just less efficiently. If its application needs DSP, it can do it.
Unless the developer just insists it's stupid. Then the Arduino cannot do it. But not because of the chip.
--
make install -not war
Do you have math showing the compression consumes less power than just transmitting the raw data? And that it's less latent to wait for compression than to wait for uncompressed data to finish arriving?
--
make install -not war
I started reading the paper, and get the general idea -- but haven't yet checked out the prereqs, pseudorandom spectrum permutations and flat filtering windows. Is there sample code of this algorithm available anywhere?
DSP is a *process*, not a *processor*.
You can run the same mathematical processes on a TMS320, DSP56K, FPGA, desktop PC, GPGPU video card, embedded ARM, PIC, AVR, even a 4-bit micro if you feel the need. Sure, a purpose-built DSP might be a bit faster at it than a microcontroller, but if the processor you choose is fast enough to run your DSP-like algorithm at the speed you need, what's the damn problem?
Case in point, there's really nothing better suited for decoding MP3/AAC audio than a DSP chip - a proper DSP can rip through filterbanks, MDCTs, etc. Yet almost every MP3 player on the market decodes these formats with an ARM core.
And back to the Arduino... AVRs have an 8x8->16 multiplier, post-increment/decrement addressing, and can run up to 20MHz so they're actually not that bad a choice for simple DSP algorithms that don't need a lot of dynamic range. An AVR has no trouble doing DTMF decoding on values captured from the ADC, or running a few DDS channels to generate sine waves and throw them out a PWM channel, despite those being classical DSP applications.
- Signed, someone who does DSP for a living.
Slashdot could REALLY use a +1 Insightful but Unnecessarily Dickish mod.
Do you have math showing the compression consumes less power than just transmitting the raw data?
Lots of it, the power budget drives the design of the entire sensor.
The micro-controller uses a lot less energy than the packet radio so it makes sense to process the raw sensor data on-board and transmit information such as fourier coefficients, integrals and other statistics. Every packet saved is another fraciton of a second the radio can be powered down.
It's a fairly common technique with sensor networks to process raw signals at the point of collection and transmit only the useful information, it makes the most use of your bandwidth and in this case energy.
Exactly represented, yes, but not practically so.
Often the signal you are looking for doesn't have a frequency that fits well with the FFT frequency distribution. (The sampling time is not evenly divisable by the signal period time.)
This causes a pure sinus signal at the wrong frequency to be visible as a spread of frequencies where it is almost impossible to see adjacent signals with a lower amplitude.
Being able to calculate DFT with a method that doesn't have the same requirements the FFT algorithm have might give some nice benefits to signal analysis.
I guess we will have to wait until they have presented their method until we know if it will have any practical uses.
...in a world where mathematicians patented their Ideas and when after violators with a vengeance.
$action = empty(PHP) ? backToC() : unset(PHP) ; "when the concrete cases are understood, the abstractions are readily
I don't think that Zigbee uses compression by default. Why do you think it doesn't, since Zigbee's main design goal is power efficiency?
--
make install -not war
If you mix them they taste terrible. (SOPA = soup in Spanish)
Singularity: a belief in the "God" idea with the "demiurge" relation inverted.
Given that mp3 decoding relies on MDCT, and that you can actually create a "digital" vu-meter (because you speak of mp3 players and bars, I guessed you were talking about it - I have never seen a mp3 player with an actual spectrum analyzer) with ampop-based filters (very common with 80s audio), I don't think the digital vu-meter is that awesome on a piece of high-tech equipment.
Zigbee power efficiency isn't that great (Have a look at the ANT+ protocol).
Besides, this is lossy compression on a well understood signal. It would be stupid to transmit 1000 bytes of raw data when we only need a dozen bytes of information.
And, do you know the most important area where this faster algorithm could be used? Yep, you are right, cryptography.
It could also use a bloo bloo bloo mod, now go fuck yourself.
<xml><I><am><so><damn>Web 2.0</damn></so></am></I></xml>
if you're running your EQ off of the time domain signal derived from the mp3, you're doing it wrong. :)
Sure. Most DSPs don't have floating point. Looks like the AVR has an 8x8 multiply, so that really helps. Most DSPs use 16x16 multiplies, accumulating with a 32 bit or larger accumulator. That's going to take several instructions on an 8 bit micro, but it's certainly feasible for things like audio with low data rates and small FFTs. On the other hand, if you're using an Arduino to do audio FFT for things like a spectrum analyzer, this technique won't help, since you're not interested in picking up a few signals, but all the frequency bands.
-- Erich
Slashdot reader since 1997
Posting a story about how a presentation will be given at SODA... about a day after SODA ended.
I actually went to this talk, which was scheduled for the first 8:30 AM timeslot as part of their evil conspiracy to get me to wake up early. The approach seemed remarkably straightforward, but I haven't gotten around to actually reading the paper yet -- I was too busy sightseeing around Kyoto.
You can run the same mathematical processes on a TMS320, DSP56K, FPGA, desktop PC, GPGPU video card, embedded ARM, PIC, AVR, even a 4-bit micro if you feel the need.
You can just as well run it on vacuum tubes or relays, however there are no real-world applications for that -- and the same applies for 8-bit microcontrollers.
An AVR has no trouble doing DTMF decoding on values captured from the ADC,
DTMF is specifically designed to be easy to decode with the worst possible limitations on a decoder. Claiming that it makes a microcontroller capable of DSP would be like saying that a lightbulb can be used to calculate exponents because it can produce a close approximation of a black body radiation spectrum.
or running a few DDS channels to generate sine waves and throw them out a PWM channel, despite those being classical DSP applications.
In name only. There is no actual processing involved.
- Signed, someone who does DSP for a living.
So do I, however I don't count trivial operation on tables of precomputed values as "DSP".
Contrary to the popular belief, there indeed is no God.
.. how do you get from a load of say 16 bit samples into vectors? If I have sin wave sample data in an array such as the following:
It's a single vector, not vectors (pllural): that's the important distinction. All the samples form a single vector.
In other words, if you have 1024 samples, then put them into a 1024 dimensional vector.
Does that clear it up?
SJW n. One who posts facts.
Slashdot could use a Insightful but -1 REALLY Dickish mod.
What is wrong with this picture?
Moderation categories already encompass both categories mentioned, and are an improvement on a simple "like" or "dislike". Adding multiple combinations of moderation (e.g. Insightful + Flamebait or Informative + Troll or any of the other 90 combinations you would needlessly add to the slashdot moderation system) is only slightly less stupid than allowing the herd of cats that is the slashdot moderator community to just create arbitrary moderation categories out of thin air any time they feel like it. There ARE TWO WHOLE FUCKING CATEGORIES OF MODERATION already dedicated to "Insightful but Unnecessarily Dickish", namely Insightful and Flamebait. The general idea is that on average the +1 from the Insightful and the -1 from the Flamebait cancel each other out, and people checking the moderations on their comments over time will come to realize they should be less of a dick but retain their level of insight.
But noooo, ignorant people such as yourself, would rather recommend slashdot implement the most arbitrary and poorly architected moderation system in the world just so you can get the +5 insiiiiiiiiightful. (And even if you would argue that Dickish!=Flamebait you are proposing a new 11th moderation category for "insightful but Unecessarily Dickish" worth a +1, which would result in the sizable misanthropic subset of slashdot users who would actually TRY to get their posts moderated as your wondrous new moderation category, thinking it is an improvement over plain old insightful.)
Were you deliberately trying to make GP's case, or was that an accident?
Does anyone know if this technique could be used to get a sparse approximation to a non-sparse signal (i.e. assume the signal only has a small number of components, and calculate what they would be to get a best match)?
That would be really useful - for example rather than JPEG/MPEG compression doing a regular FFT and throwing away the high frequency components, maybe you could use the fast sparse algorithm to quickly calculate an approximation in the first place.
So, you're talking about telemetry?
For large sets, this will be our guide even unto death, for the LORD will work for each type of data it is applied to...
DSP with Arduino
What is wrong with this picture?
There's nothing wrong with this picture. The Arduino is for hobbyists to learn and play, not for designing cost effective production grade products. If Arduino users can do DSP on their boards, the more power to them. Note that the upcoming Arduino Due is a Cortex-M3 (32 bit, 96MHz, no-FPU); this thing could do a fair amount of DSP compared to older Arduinos.
Only partially true. What many people don't know is that Heisenberg's derivation was slightly wrong because while it modeled the thing being measured with quantum mechanics, it incorrectly modeled the measuring device classically.
A rigorous analysis using qm for both was done Ozawa in 2003 (see http://arxiv.org/abs/1201.1833 which shows the correct uncertainty equations on p. 2).
From http://www.sciencedaily.com/releases/2012/01/120116095529.htm "In order to describe the fundamental uncertainty and the additional disturbance due to the measuring process, both particle and measurement device have to be treated in the framework of quantum theory,...But the product of error and disturbance can be made arbitrarily small -- even smaller than Heisenberg's original formulation"
You can just as well run it on vacuum tubes or relays, however there are no real-world applications for that -- and the same applies for 8-bit microcontrollers.
Here you go - a 8051 FFT application note and implementation http://www.silabs.com/Support%20Documents/TechnicalDocs/an142.pdf
DTMF is specifically designed to be easy to decode with the worst possible limitations on a decoder. Claiming that it makes a microcontroller capable of DSP would be like saying that a lightbulb can be used to calculate exponents because it can produce a close approximation of a black body radiation spectrum.
Yes, and you also have DTMF decoding "on a chip" if you want it. But most "fast" 8-bit microcontrollers can handle the Goertzel Algorithm just fine.
I don't know that I would have expressed this the way the GP did, but SuricouRaven is correct. Given a nonzero, time-limited signal, its Fourier transform can not be band limited, and vice versa.
If you weren't made of meat, perhaps the thing you think is a universal constant would be a variable. You can't actually know, because individual humans by definition cannot attain objectivity; it can only be approximated.
If objectivity can only be approximated, how do we know that your definitions are correct?
Limits on your perception and comprehension can be demonstrated to exist, therefore you can't know what all the limitations of the external universe are for certain
But one of the ways of thinking about Heisenberg uncertainty involves how we interact with particles. We would like to use particles that are both low energy (to not greatly affect the momentum of the particle we're trying to observe) and low wavelength (to get a better fix on its position). We just don't have such particles, at least not yet.
Slashdot could REALLY use a +1 Insightful but Unnecessarily Repetitive mod.
The point of this FFT improvement is for signals that are sparse in the frequency domain, not spatial domain. Most images _are_ sparse in frequency due to discretization during data collection.
Dude, did someone replace your valium with caffeine today? Or were you molested by an Atmega chip as a child? You need a day off! Go get acquainted with the strange orange ball in the sky!
But what about the inverse FFT? So I can FFT something quicker, but what about when I want to go the other way? ;)
Aliasing can be avoided by having a high enough sampling frequency.
More accurately, the number of frequency bins an FFT has is based on the number of samples you start with, which is based on the sampling rate times time, which ultimately gets back to Nyquist. You can only represent frequencies in the FFT that are within the nyquist rate, and an FFT has a number of frequency bins related to the number of samples being processed. The actual physical time of the sample window is a fall out of that combination of factors. Crank up the sampling rate over they same time period and you get more frequency bins and more accurate FFTs, contrary to what some of the other posters are going on about.
I have a digital radio complete with 128x64 pixel screen and a menu system that goes 3-4 levels deep that all runs on an 8bit microcontroller.
More than that: Every NES game you ever played runs on an 8-bit microcontroller.
What? Engineering difficulties occur in the sampling rates, the accuracy and noise floor of the A/D, and the hardware WAY before any quantum effects enter the picture. For FFT accuracy, the fundamental math is information theory and Nyquist.
Here you go - a 8051 FFT application note and implementation http://www.silabs.com/Support%20Documents/TechnicalDocs/an142.pdf [silabs.com]
Just because I can run FFT on a large abacus, does not mean that anyone should.
Yes, and you also have DTMF decoding "on a chip" if you want it. But most "fast" 8-bit microcontrollers can handle the Goertzel Algorithm just fine.
And those chips are obsolete now because microcontrollers caught up with them, and can do more in less space/cost/consumed current. This is not the case with DSP.
Contrary to the popular belief, there indeed is no God.
The general idea is that on average the +1 from the Insightful and the -1 from the Flamebait cancel each other out
Then why not just create a new menu option "Inciteful" that doesn't affect a comment's score but spends two mod points to give the poster this message?
In the "old days" these would take much longer than the integration calculations. by using a trig-identity you compute the new ones from power of two of the old ones using simple math. Or these days with large core memories you can pre-tabulate them, if you reuse the same lengths over and over.
I think the parent is getting at a problem I see at my job fairly frequently. Professional Firmware and DSP developers that have no knowledge about the effects or consequence of their code on the hardware itself. Ultimately re-implementing something that used to run fine in 1/10th the ram, and 1/40th the processor cycles (or less) in a brand new dual core DSP and still can't figure out why they aren't meeting performance requirements. I've seen these guys demand a bigger, faster, more power hungry CPU to run their code when a previous version that was literally a fraction of the capability ran the same algorithm.
True Story: I'm an FPGA dev, and I was helping out software guys debug why the DSP was completely missing messages and seemed to be dropping data. Turns out doing a thousand lines of heavy DSP INSIDE the interrupt handler is probably going to hang up the CPU and cause it to miss interrupts. The worst part was the blank stares we got when we told them this, and had to explain why that was a bad thing.
It seems the idea of actually writing good, fast, and power efficient code is a dying art because it's perceived as 'not necessary'. In some instances this thinking is correct (e.g. desktop computers), but in the embedded space where you're trying to keep the cost of final products down and minimize power usage, grabbing the fastest DSP part that TI makes is probably not always the best solution... but it's what you get when you think it's automatically OK/good to 'do everything in software'. There are costs and penalties to account for.
For pure hobbyists, none of this really applies, but I suspect that a good many of the people that do this stuff as a hobby are also at least tangentially involved in it in some way at their jobs, so it serves to bring up the considerations.
Same problem as with "Enhance!" in the movies.
The "Fast and Fouriers"?
which is totally what she said
There are costs and consequences for any particular hardware choice. Modern MP3 players (and/or phones) need a general purpose CPU for many of the things they do and then use that to do decode since a separate extra part is the worse option. If the device didn't already HAVE a general purpose CPU, then an arm core is probably not the best option to solve an individual DSP problem.
I think they're still working on the Whoosh mod.
(Well crafted, turing_m!)
My other car is a 1984 Nark Avenger.
That's a pretty fast Fourier transform.
my, your, his/her/its, our, your, their
I'm, you're, he's/she's/it's, we're, you're, they're
But, that's why this is interesting.
Where you might not have been able to squeeze in an FFT algorithm, now you might be able to.
But...for the price of an official Arduino, you could probably afford multiple DSP chips.
Time frequency uncertainty is a known issue in signal processing, and an explanation can be found early on in A Wavelet Tour of Signal Processing, for example. The post you are replying to stated that this is a fundamental property of the discrete Fourier transform, which it is.
-- The Grand Teddy Bear has Spoken: "Windows 8 Source Code Available NOW! more disgusting than your pr..."
That's almost true. However, if you know in advance that outside of a certain frequency range the signal is zero, the technique of subsampling can be used. The limit is bandwidth, not frequency.
Contribute to civilization: ari.aynrand.org/donate
Fair enough, you can also under sample, and then use the aliased image if you know that the frequency range the alias lands on does not contain data. As you say, a bandwidth problem. But in the context of the original statement, it isn't the time length of the sample set, so much as the number of samples per unit time that determines FFT fidelity, time is part of it, but it's not independent.
No, beacuse applying a new FFT algorithm (which now is readily published) to old problems is considered obvious for anyone skilled in the art. But if you could find a completely *new* thing to do with this algorithm, that wasn't possible earlier because Fast Fourier Transform wasn't fast enough - that you might be able to patent. A much more lucrative plan would be to search half a dozen of these old patents, implment them with the new algorithm and publish papers on these. Then collect you PhD, and get a cozy, moderately paying job.
I gotta say, putting a lot of code in the interrupt handler for a microcontroller/digital signal controller/dsp is a huge fail. That seems like something firmware engineers with an undergrad EE degree and a bit of experience should know. Even a software engineer with no low level hardware knowledge probably could have read in the DSP's programming guide that the ISR's execution would block the ISR from being triggered again.
Oh yeah, former TI dsp apps engineer here.
A witty saying proves you are wittier than the next guy.
Slashdot could REALLY use a +1 Insightful but Unnecessarily Repetitive mod.
Just another ignorant American.
Problem is of course, one can not know regardless of bandwidth for certain that outside a certain frequency range the signal is zero. One can only assume that it is close to zero. One can not "crank up" sampling rates to infinity to overcome this as every system has finite limits and hence error. The original paper spends much time discussing the nature of the error bounds for precisely this reason.
It seems the idea of actually writing good, fast, and power efficient code is a dying art
Boy, give this guy a gold star. Exactly for the reason he states (most people today learn programming by programming for desktop computers), finding a good embedded software person for battery-powered, portable applications is becoming a unicorn search.
Every time I hear someone say that they're burned out on software, and can't stand the thought of writing another line of server or game or PC code, I always suggest a change of venue from desktop to embedded software -- a change that, once (s)he adapts to the realities of life on a AAA or hearing-aid battery, will typically take a programmer from project commodity to project savior.
Here's the first sentence of the abstract: "We consider the problem of computing the k-sparse approximation to the discrete Fourier transform of an n-dimensional signal." Did you notice the word "approximation" in there? Right. This is an algorithm for calculating an approximation to the Fourier transform, not the actual Fourier transform. There are, to be sure, lots of problems where that's exactly what you want, and this algorithm could be really useful for them. There are also a lot of problems where that's not useful at all, and you need the exact transform. In any case, calling this a "Faster-Than-Fast Fourier Transform" is just wrong. It isn't a Fourier transform. It's an approximation to the Fourier transform.
"I'm too busy to research this and form an educated opinion, but I do have time to tell everyone my uninformed opinion."
The same. The frequency-time resolution tradeoff is a fundamental property, and the short-time DFT makes that tradeoff efficiently.
He's not saying that the time-frequency resolution tradeoff is due to quantum physics effects. He's saying that the two uncertainty principles are related. They are. We're talking about pure theory here, with no engineering difficulties. And yes, the fundamental math is information theory and Nyquist (which is ALSO very similar to the fundamental math of quantum physics). The equations for the two uncertainty principles have exactly the same form.
An ideal, theoretical, continuous signal that is time-limited has limited spectral resolution. An ideal, theoretical, continuous spectrum has limited temporal resolution.
Of course it's a problem. My point was that for all practical issues, engineering difficulties are what imposes the limits before you have to worry about quantum effects.
Yes, it's a property of the DFT. Or more generally Information uncertainty is a property of all discrete systems which sample at fixed intervals, that's what nyquist is all about. If you didn't sample it, you can't know it if there's data outside of your sampled signal's bandwidth it can alias down onto your desired data and cause all kinds of problems.
The post I replied to implied there was something more going on at some fundamental physical level. At the quantum level quantum stuff is happening, sure. In quantum mechanics the uncertainty principle is expressed with a wave function which states the probability of the state of a particle. We don't talk about quantum uncertainties in digital signal processing.
I don't have the textbook you mention so you might provide a better source or link. The stuff I find by googling are not things we deal with in the digital domain. When you start including quantum wave function probabilities in your signal processing algorithms, let me know. :)
To be specific I'm talking about multi-band graphic analysers, not just overall volume. Most software analysers as far as i was aware are similar underneath to something like Specan32 or even Voxengo Span.
These implement FFT to split up the signal into different composite frequencies. The different bars represent the volume of each of the frequencies. The size of the FFT window contributes to how many 'bars' you can accurately represent.
What you say isn't actually wrong, but it's not talking about the same thing. The frequency resolution you can achieve is determined by the amount of time you observe a signal, regardless of how you sample it (the principle holds for ideal continuous signals as well) and conversely, the temporal resolution of a signal you reconstruct is limited by the highest frequency you observe. The DFT (the FFT is just a fast algorithm for the DFT and produces the same result) represents a spectrum efficiently by providing samples that match this fundamental limitation.
hehe, indeed. Cut'n'pasty code reuse no-design fail.
It was test code, written as a throw away proof of concept, on prototype hardware, run on it's own without anything else on the system, that had been grabbed, copied, reused several times and then tried to push into a the real hardware with the full system running at the same time. I did more than one double take when we found it, and again when I saw the real code.
Moral of the story: all code is production code, there is no such thing as throw-away one-off test code. Although that doesn't seem to get through to program managers who write schedules so the cycle repeats. If someone gets a thing working, someone somewhere will think "it worked in the lab, ship it!"
If you really want fast, use discreet Walsh-Hadamard xform and look-up tables.
Virtually all images of any interest (anything that's not just random noise) is sparse in some domain, and the majority are quite sparse in the frequency domain. So yes, this algorithm should help quite a bit.
The null transform beats them both. So does the plus-one transform. What's your point?
The problem is experiences differ with different components. Some microcontrollers have a concept of configurable interrupt priority, where a running ISR can be interrupted yet again by a different ISR. I got bitten by this when I switched to AVR. I had a timing loop running and assumed that it would get priority over a simple key press as one of my previous designs (Yes I'm a lazy coder, but it worked for me previously :-P). Anyway first time I hit the keypress the timing loop stopped dead, held the output, and blew the LEDs connected to them due to over current.
I made a dumb assumption without reading the 300 page datasheet. I can imagine how someone will do the same.
Turns out doing a thousand lines of heavy DSP INSIDE the interrupt handler
I'm not a computer engineer, or EE, or signals person, but even I can tell you why that would fail. Sounds like the problem is not that people program general purpose chips, but that someone hired general purpose programmers to write DSP code. DSP is a beast, it's its own subset of programming that requires knowledge of physics (waves and nyquist) that some programmers don't know. Or maybe the problem really was that your programmers don't know what a bloody interrupt is, and shouldn't even be writing embedded programs.
I'm just a software geek who, after a MIPS course, decided that doing neat artsy tricks with smaller and smaller processors was fun. The Arduino works fine for that, even doing minor audio processing. Why? Because $30 for a board and $1 for extra Atmel chips was a cheaper option than a ton of breadboards, some dedicated usb to serial programmers, and a PIC or ARM dev board. Why? Because at the time the Arduino came out, the programmer for a PIC cost $30 or more unless you already had another programmer and could build your own. There was no cheap way into the field unless you knew someone already in the field. Forget digging through a digikey catalog, no one completely new to embedded programming is going to be able to make sense out of the hundred of different JTAG programming cables, and the brand name ones are still insanely expensive compared to a $30 Arduino or close and a usb cable. Only jobs I've gotten to use these skills on are art projects, where something small needs to be hidden out of sight while still being able to control some larger object. Arduino + Java is easier for the artists to read and understand what's going on, and since the board and a wall wart can be hidden in places that a even a mini ITX motherboard couldn't, and is quieter, it makes it an easy sell. Yeah, you do crazy things that the chip wasn't designed for, so what? Sure, the Java programming language sucks, but if you need to you can get around that if you know C. And you can learn AVR C by reading the datasheets and knowing enough C++; I did anyways.
For pure hobbyists, none of this really applies, but I suspect that a good many of the people that do this stuff as a hobby are also at least tangentially involved in it in some way at their jobs, so it serves to bring up the considerations.
This is quite a key bit here. While doing EE I and most of my friends were heavily screwing around with microcontrollers. Some of them just plainly threw in the towel trying to debug code and many still don't understand the concepts of an interrupt properly.
I later tutored some embedded practical project design courses at the same uni. I quickly got a reputation for being an arse marker because I came down quite heavily on students when I would do something as simple as press a button and note that the software registered the press twice, or that the display dimmed, stuttered or got brighter, classic examples of ISRs not playing nice. The excuse I always got is that it's a minor glitch or bug.
Their smiles faded when I told them it's more a sign that they don't understand the platform they are coding on, and to solve that "minor glitch" could mean a complete re-think in the way they've structured their code.
Turns out doing a thousand lines of heavy DSP INSIDE the interrupt handler
I'm not a computer engineer, or EE, or signals person, but even I can tell you why that would fail. Sounds like the problem is not that people program general purpose chips, but that someone hired general purpose programmers to write DSP code. DSP is a beast, it's its own subset of programming that requires knowledge of physics (waves and nyquist) that some programmers don't know. Or maybe the problem really was that your programmers don't know what a bloody interrupt is, and shouldn't even be writing embedded programs.
As you say, it requires several skill sets at once. Embedded DSP requires extensive theory and mathematical knowledge so you KNOW the stuff, as well as low level hardware knowledge of the target device (either in an FPGA or DSP or GPP) so the code is efficient and fast enough to meet the needs of the platform.
There's more than a few of our signal processing gurus with PHd's that are absolutely brilliant, but have no idea about low level hardware. They can develop algorithms and model them in matlab to prove the ideas are possible. They've taught themselves C, or taken a class or two, so they can program stuff and hack it together. But when their test code tries to get used 'for real', the design problems show up.
Knowing some C does not an embedded programmer make.
I don'think Zigbee should assume the data has already been compressed, especially in sensors (like temperature and humidity) integrated entirely into the same microcontroller that controls the Zigbee process.
--
make install -not war
I concur.
You could stop using an Arduino as a golden hammer and use something designed for DSP, like a dsPIC that has hardware to do more complex math
I think we're describing the same thing. This phenomenon is just another, less familiar type of aliasing - the "spread of frequencies" you mention will give exactly the same signal in the sampling window as the pure sine wave with a frequency that's a non-integer multiple of 1/the window size, so there's no way for any algorithm to distinguish them. The only way to do that is take your Fourier transform over a larger window, at least for arbitrary input data.
Not all kinds of aliasing. The one the grandparent described would be a problem even with continuous sampling - it's caused by taking the Fourier transform over a finite length (L) window. Any frequencies which aren't integer multiples of 1/L will be aliased into ones which are.
"Processing" requires at least existence of a signal input and signal output. Those applications have only output signal.
Contrary to the popular belief, there indeed is no God.
My faith is restored. I salute you.
Yeah it seems those simple bar-displays per frequency I was calling "vu-meter" are also called "spectrum analysers", but it's exactly what you indicated on the link. Most old audio equipment does not use a FFT, but a series of filters (check http://www.electronics-lab.com/blog/?p=7057 , theirs is with nixie tubes, but the principle is the same). Modern mp3 players do not need much effort to reproduce a bar-based spectral analysis, because usually the file format is already encoded on the frequency domain.
Btw, when I think spectrum analyzers, I think of this kind of equipment: http://www.tek.com/spectrum-analyzer/rsa5000 .