首页 > > 详细

讲解ECSE 444、辅导FastICA、讲解CS/python, C/C++编程设计 辅导R语言编程|辅导Web开发

Project: Blind source separation using ICA
ECSE 444 - Microprocessors
Fall 2018
Introduction
For the final project, you will use all the material you have learned over the course of the labs to
build an audio application that employs Blind Source Separation(BSS) using the Fast Independent
Components Analysis(FastICA) algorithm. There is an initial deliverable due the week of November
19th in order to ensure you are making sufficient progress to succeed in the project. The project can
be broken down into the following steps:
1. Generation, mixing and storing of sine wave signals
2. FastICA implementation and testing via separating the mixed sine waves.
Item (1) will be initially demonstrated and documented in the first deliverable; item (2) along with
the entire project will be demonstrated and documented in the final deliverable. Guidelines for the
reports will be released separately.
Schedule
Note: the schedule is subject to refinement. Demos are expected to be scheduled at the end of their
respective weeks.
1. Mon Nov 12: First deliverable demo week
2. Mon Nov 19: First deliverable report due
3. Mon Nov 26: Final deliverable demo week
4. Tue Dec 4: Final deliverable report due
Grading
16% First demo
24% First report
24% Final demo
36% Final report
1ECSE 444 Project
Sine wave generation
You can generate samples of a sine signal via the formula:
s(t) = sin 
2πf t
Ts

Here, f is the frequency of the signal and Ts is the sampling frequency, which should be set to 16000
samples/second. Therefore, if you want to generate samples worth 2 seconds of a sine wave, you
must generate 32000 samples of s(t), with t ∈ [0, 31999]. You should use the CMSIS-DSP library
functions to generate the samples.
To verify that the sine wave is correctly generated, set the frequency to 440 Hz and write the samples
to the DAC to hear the sound on the headphones, and compare the sound with the sound of a
440 Hz sine wave via this link. To write samples to the DAC, use timer interrupts with the timeout
period equal to the sampling frequency. Note that you will have to scale the signal to have a suitable
amplitude for the DAC resolution (8 or 12 bits), and also provide a DC offset to the signal (since the
lowest value you can write to the DAC is 0, whereas a sine wave has negative samples). You may
also verify your sine wave is correctly generated by probing the DAC output with the oscilloscope and
measuring the frequency, or by printing out the samples and plotting them in MATLAB.
Once you have verified that your sine wave generation is correct, you must think about how to
store the wave. We only have 1 MB of flash memory and 128 kB of SRAM in the MCU, while 1 second
of sine wave data requires 64 kB of memory (assuming it is stored as 32 bit floats or integers).
To store your generated data, you must make use of the 8 MB Quad-SPI external flash memory on
the board. This document will provide you with all the necessary information you need to successfully
use the QSPI flash memory.
Finally, create 32000 samples each of two sine waves s1(t) and s2(t), each sampled at a rate of
Ts = 16000 samples/second, and with a frequency of f1 and f2 respectively (A pleasant example for
frequency values could be C4and G4 from the table here). Next, create a 2x2 mixing matrix
A =

a11 a12
a21 a22
,
in which you may choose the mixing coefficients aij that are used to mix the signals s1(t) and s2(t).
Finally, produce the signals x1(t) and x2(t), obtained via the matrix multiplication:

x1(t)
x2(t)

=

a11 a12
a21 a22 s1(t)
s2(t)

.
If you play s1(t) and s2(t) separately on the left and right headphone, you will notice a clear sine
wave tone, while when playing x1(t) and x2(t) you will notice that each of them contains two notes
that are a linear combination of the original sines. The signals x1(t) and x2(t) will be unmixed to
via FastICA in the next section to recover the original signals s1(t) and s2(t).
Fast Independent components analysis
ICA is arguably the most popular algorithm used for blind source separation. The algorithm basically
takes as input the mixed observations x1(t) and x2(t), and works to estimate the mixing matrix
A (from the previous section) via recursive gradient ascent. This link describes the algorithm and
provides examples of an implementation, and should be sufficient to succeed in this task.
Note: This algorithm can make heavy use of many of the CMSIS-DSP library functions
Version #2 2 Release Date: 14 Nov 2018ECSE 444 Project
Specifications and tasks to present
The implementation details are left open to you in order to provide you with a vast array of design
choices. Over the course of the project, you will face several hardware and software limitations,
due to which you may have to turn to strategies such as DMA, interrupts, CMSIS-DSP, OS threads
and synchronization, etc. You must also design the user-interface of your application for playback,
recording, and separation. The UI can be implemented via USART, or even the push-button and
simple printf’s.
The high level deliverables are highlighted below:
Initial deliverable
You must correctly demonstrate that your application is able to:
Generate sine waves of a desired frequency (via playback on DAC).
Play and store mixed sine waves.
You should be able to explain and account for all design choices that you have made.
Final project
You must correctly demonstrate that your application is able to perform FastICA BSS on the mixed
sine waves generated in the first deliverable, and should be able to explain and account for all design
choices that you have made. Note that you will need to provide some justification as to how you
have determined that the original source signals have been successfully recovered (eg. Compare
original and estimated mixing matrices, measure frequency of unmixed signals via FFT, etc.)


联系我们
  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp
热点标签

联系我们 - QQ: 99515681 微信:codinghelp
程序辅导网!