Skip to main content
Topic: Decorrelation: real-time ICA on an FPGA (Read 3274 times) previous topic - next topic

Decorrelation: real-time ICA on an FPGA

Hi guys

I'm working with Brain Computer Interfaces and there is one thing that I really wish I had:
real time Independent Component Analysis  (rt-ICA) implemented in my measurement hardware.

ICA (and it's little sister, principal component analysis, PCA) is a method of decorrelating data received over a number of channels. If you record several signals that are spatially mixed over a number of channels equal or greater then the number of signals, ICA can separate these signals into components, each of those containing (at least in the best-case scenario) a clean signal, minimally correlating with the other components. Now, while my field isn't of that much interest to most of you, there are other, more accessible applications:

Imagine you record audio in a room. You have, say 3 people talking obsessively in parallel, several sources of noise, and more then 3 microphones recording to one audio track each. You save all audio tracks, and then you do an ICA, regarding each audio track as a channel. The ICA will give you as many components as you have audio tracks. The first three components will contain the audio of three speakers, loud, clear and mostly free of noise and interference from the other speakers. The other components will contain the noise, you can disregard them. (Although, one man's noise is the other man's signal, I know...) It's like magic! I have used it successfully to separate the voice of lecturers from noisy vents and background talking, using only stereo recordings of my Smartpen.

The disadvantage is that it takes quite some processing time...
However, I've looked it up and it seems as if real time versions of this have been implemented on FPGAs since 2003 (!!). Just google 'ICA FPGA' and you will find tons of examples.

Anyone else interested in such awesomeness? Ideas about feasibility of a little shield capable of blind source separation from several channels?

Best
Milarepa

Re: Decorrelation: real-time ICA on an FPGA

Reply #1
Sounds interesting. If it doesn't need a lot of analog front end (can work from pre-digitized signal) that would make it a lot easier.

Have you heard of open cores? They have a library of open source FPGA cores. I did a quick search, but I didn't find anything like this:

http://opencores.org/
Got a question? Please ask in the forum for the fastest answers.

Re: Decorrelation: real-time ICA on an FPGA

Reply #2
Right? :-D
Analog frontend: exactly, my idea was to send ADC values digitally. This way, the whole thing could be even more modular. Also, I have a nice frontend already, so why mess with the running system...

ICA is a concept that might really be useful to the open source community. It's been around for quite a long time and it's really versatile, because you can decorrelate basically all signals that have some common sources, if you have enough channels.
We use it a lot for machine learning purposes, since the outcomes are co much better if you have clean signals. But the problem is of course, it defeats the purpose if it's not in real time...

Re: Decorrelation: real-time ICA on an FPGA

Reply #3
After a little googlin' I found some sources that are not behind paywalls:

http://www.design-reuse.com/articles/18 ... rithm.html
Abstract: "We propose IP core of on-line ICA algorithm. The on-line ICA algorithm can decompose input signals into statistically independent components. We demonstrate that we can recover original chaotic signals from linearly mixed chaotic signals without any information of mixing. We implement the ICA and chaos generator modules to Xilinx Virtex-II FPGA on the HERON ready-to-go systems..."
- They provide some math, but no sourcecode or cores.

http://ethesis.nitrkl.ac.in/1380/1/MY_F ... S.BVSR.pdf (PDF warning!)
Abstract: "...In this thesis Independent Component Analysis (ICA) based methods are used for
blind detection in MIMO systems. ICA relies on higher order statistics (HOS) to recover the
transmitted streams from the received mixture. Blind separation of the mixture is achieved
based on the assumption of mutual statistical independence of the source streams. The use of
HOS makes ICA methods less sensitive to Gaussian noise. ICA increase the spectral


efficiency compared to conventional systems, without any training/pilot data required...."
- A whole thesis. Quite extensive. Covers also a lot of groundwork, if you want to delve a bit deeper into ICA.

http://www.iiis.org/CDs2010/CD2010IMC/C ... A154PI.pdf (PDF warning)
Abstract:In this work we proposed the design, simulation and synthesis of a hardware that performs the
Independent Component Analysis (ICA) in a recon gurable hardware platform, more speci cally a FPGA. The
simulation of the hardware was done by models implemented in Simulink environment and the synthesis was
possible through the Altera system-level design software DSP Builder, that contains speci c FPGA blocks that
can be synthesized in hardware. In order to validate the hardware, manually generated data and real electroen-cephalogram signals were used in the experiments
- Well this article is quite interesting for me because it covers EEG signals.

BTW: This entry is already quite high in the google search ranking... should be somewhere on the second page.

downloads.hindawi.com/journals/asp/2005/173453.pdf (PDF warning)

 

Re: Decorrelation: real-time ICA on an FPGA

Reply #4
So far I've not been very successful in this endeavor. FPGA tutorials have gotten me to a blinking light, but nowhere further.
However, I've got some more applications, for which it can be used: Audio Signal, yes, audio signals!

http://cnl.salk.edu/~tewon/Blind/blind_audio.html
With real time ICA you would be able to recognize the voices of two simultaneously talking speakers and even separate them from background noise.
You feed it several (basically the more the better, but stereo works just fine) channels of audio, you get back separate audio channels, each containing one speaker, or one instrument or whatever you record.

I'd really like to get started with this, if you have any tips on where to put out a bounty on this matter or find people who would in principle want to collaborate on a 'module' using FPGA ICA, please feel free to reply or pm!