Sunday, March 10, 2013

Signal aliasing explored with MATLAB



A false or assumed identity.
So as part of an assignment in a course I'm doing,the task was to explore aliasing.

Just to recap,
"Aliasing is when a signal is not sampled correctly(undersampled with respect to its Nyquist Rate),and this causes the original signal to appear like a lower frequency signal."
What this means is,the frequencies in the signal happen to assume the false identity of lower frequency signals,usually due to very low sampling rates.
This is what most textbooks will tell you.But I never quite felt 'okay' with this definition,till I did this MATLAB exercise.

It might appear trivial,but it has really helped me.Let me walk you through it.

So,to keep things simple,lets consider a 1800Hz tone,which we will sample at 44.1kHz(CD Audio) initially.

And to get a real idea of things,lets use wavplay command to listen to this tone.Nice and shrill.

In terms of the Frequency Spectrum,what we have is this.
Frequency Spectrum for an 1800Hz tone sampled at 44.1kHz

Now the ideal sampling rate according to Harry,is twice the maximum frequency at which the signal has non-zero energy.So that would be 3.6kHz in our case.Which means,anything below this,and we will start seeing the effects of aliasing,and as we go higher away from this(6kHz,8kHz and so on) this effect will die out.

Lets sample at 3kHz,which is a mild case of undersampling.Set Fs=3000.Now when you listen to it,you can observe that the sound is 'duller',or its lowered in frequency,even though the Tone generating function hasnt changed.(ToneFreq still 1800).What happened then? Aliasing. Lets look at the frequency Spectrum now,and this is what you will see:
Frequency Spectrum for an 1800Hz tone 'mildly' under-sampled at 3kHz
 The two peaks are clearly not at 1800,but infact at 3000-1800=1200Hz.So the actual 1800 tone,assumes a false identity of a 1200Hz tone.
The picture in time domain is like this:
1800Hz tone suffering from Aliasing due to mild under-sampling.
The blue line represents the original 1800Hz tone,and the red plot represents the signal when its under-sampled.Clearly,the frequency has got messed up.Sorry,aliased.

This effect is further prominent at even lower sampling frequencies.Lets take 1.5kHz as our sampling frequency,just to make Harry cringe. :P Now we'd see the 1800Hz tone appear like a 1800-1500=300Hz tone.And thats exactly what our plots reflect:
Frequency Spectrum for an 1800Hz tone badly under-sampled at 1.5kHz
The two peaks are at 300Hz.And heres the time domain representation,which makes it clear that the signal is now as good as a 300Hz tone,rather than the 1800Hz one we started with,all due to the effect of sampling rate variation,or in one word - 'Aliasing'.

1800Hz tone suffering from Aliasing due to aggressive under-sampling.

Pretty cool,eh?  Hope this helped you understand aliasing as much as it helped me. :)

I'm not explicitly uploading the MATLAB code,but drop a line in the comments if youre interested.

I was inspired by this other really cool article from the Mathworks blog -

Wednesday, March 6, 2013

PSoC3/5 Hardware options

After a great semester,I'm back to the blog,with lots to post.

What is the PSoC 3?
I'll keep the answer tweet-length,
Cypress Semi-Ultra low power-Single cycle 67Mhz 8051-Programmable Digital blocks-Extremely powerful analog signal processing-max 62 GPIOs (TQFP).

Its available in QFN,SSOP and TQFP packages.See more about PSoC3 parts here.

It has 2 cousins(at the time of writing this article,PSoC4 hasnt come out.),PSoC1,with an M8C core and the PSoC5,which is an ARM Cortex M0 based device.

To get started with PSoC,you need PSoC Creator 2.2 (latest when this was written).Its a ~500MB download,which you can get from Cypress Semiconductors website ->

That download has the IDE,as well as the programming software and drivers,all in one easy to install package.

Sorry,the software isnt for OSX or Linux,only Windows XP onwards.

You have quite a few options here.I'll cover the company kits first.See all the company's offered boards here
PSoC3 Starter Kit - CY8CKIT - 003 for $49.
It has the most powerful PSoC3 chip,the CY8C3866AXI-040,an Accelerometer, a Thermistor, Proximity Sensing, a CapSense® touch-sensing interface, a 12-pin wireless module header, and even 28 general purpose I/O pins (GPIOs).

I'd not advise you to go for this one,since its not very user friendly and in my opinion,not that suited for getting started with PSoC3.Just my opinion.

The kit you should go for,is this one right here - PSoC3 DVK or the CY8CKIT - 030.It will cost you $99,but its the best kit the company sells,in my opinion.This board has everything you'd want on your PSoC3 board,and very user-friendly and high performance.

I have been using it for almost 2 years now,and I dont have a single complaint.Everything is just perfect.Kudos to the team at Cypress Semiconductors behind this one.Highly recommended.

Theres another 'mega-kit' of sorts called the CY8CKIT-001,which can support PSoC1,3 and 5.But its only for people who need tons of GPIOs,and can pay a steep USD 250.I have used it,but dont recommend it for people starting with PSoC.The best one is still the 030.


Now if youre not the off-the-shelf types,and want to make your own hardware,then here are your options:

The QuickPSoC3: This is a board I made,which I could customize and etch using toner transfer,to get a working PSoC3 board in under an hour,on the cheap.

Its open source hardware(CC-BY-SA3.0),so feel free to download and modify the files to suit your needs.
Read more about it and Download CAD files here.

The EzPSoC3 : I made this board an year ago,fed up with pricey company kits and archaic lab rules at my university.Its a sweet minimalist PSoC3 board,with USB support and more.Its open source,and licensed CC-BY-SA3.0
I am not selling this as a kit/barePCB as of now.You could download the CAD files(Eagle 6), and forward them to your fav PCB house for a low cost and easy to use PSoC3 board :)
Download CAD files here.

The EzPSoC3(zeta's mod) has a few variants too,one made by zeta over at the Cypress Developer forums,and its CAD files made in EAGLE are linked here.

Theres the freeSoC,another open source (PSoC5 though) board thats backed by a very successful kickstarter campaign.Check it out here.

    and it has a mini version too :)


     Great work Jon Moeller!

Theres one called Loki,a very feature rich arduinoesque PSoC3-5(the QFN package is pin compatible) board in development by nickjohnson.You could read and follow his development over at the DangerousPrototypes thread hes updating.

Theres also a few by (makers of the famous Papilio FPGA platform and the Open bench logic sniffer ) Heres a pic of their smaller board,nicknamed Dragonfly,coming soon!

There are a few PSoC3 board designs by japanese hobbyists and vendors too.You could check those out here  -
aasoukai128's board ,
ITCorp24's PSoC boards (not opensource.)

There are quite a few other boards in the wild,I'll add more as I spot em.