<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://wirelessafrica.meraka.org.za/wiki/index.php?title=Special:NewPages&amp;feed=atom</id>
	<title>WirelessAfrica - New pages [en]</title>
	<link rel="self" type="application/atom+xml" href="http://wirelessafrica.meraka.org.za/wiki/index.php?title=Special:NewPages&amp;feed=atom"/>
	<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/Special:NewPages"/>
	<updated>2026-06-09T04:35:07Z</updated>
	<subtitle>From WirelessAfrica</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/Gnu_Radio</id>
		<title>Gnu Radio</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/Gnu_Radio"/>
		<updated>2010-04-20T04:20:23Z</updated>

		<summary type="html">&lt;p&gt;Kingdavid: /* Installing Gnuradio */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
To trial a white spaces network in a rural area and learn what is possible&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* David Johnson&lt;br /&gt;
* Veljko Pejovic&lt;br /&gt;
* Elizabeth Belding&lt;br /&gt;
&lt;br /&gt;
==Idea description==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Main challenges==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Milestones==&lt;br /&gt;
&lt;br /&gt;
==Primary obstacles==&lt;br /&gt;
&lt;br /&gt;
==Evaluation==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Technical notes==&lt;br /&gt;
&lt;br /&gt;
===Installing Gnuradio===&lt;br /&gt;
* The main installation page (http://gnuradio.org/redmine/wiki/gnuradio/)&lt;br /&gt;
* Building from source (http://gnuradio.org/redmine/wiki/gnuradio/BuildGuide)&lt;br /&gt;
* Ubuntu specific installation instructions (http://gnuradio.org/redmine/wiki/gnuradio/UbuntuInstall)&lt;br /&gt;
&lt;br /&gt;
My notes for customization:&lt;br /&gt;
 ./configure --prefix=/home/djohnson/gnuradio&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 make install&lt;br /&gt;
This will install all the libraries and programs in /home/djohnson/gnuradio&lt;br /&gt;
&lt;br /&gt;
Add gnuradio python libraries to PYTHONPATH ... add to your ~/.bashrc or /etc/bash.basrc file&lt;br /&gt;
 export PYTHONPATH = /home/djohnson/gnuradio/lib/python2.6/site-packages&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;/div&gt;</summary>
		<author><name>Kingdavid</name></author>
	</entry>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/Macha_Monitoring</id>
		<title>Macha Monitoring</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/Macha_Monitoring"/>
		<updated>2010-02-13T00:31:22Z</updated>

		<summary type="html">&lt;p&gt;Kingdavid: /* This to be put in a new section - academic writing guide */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Purpose ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Rural wireless networks in developing regions often depend on slow satellite links for their Internet access. This paper will try to quanitify the traffic patterns and usage of a slow satellite internet link in a rural wireless network and compare this to recent studies of Internet uisage patterns in the developed world to understand key challenges. This will be used as a starting point for further work to try and optimize Internet usage over slow satellite links in developing regions.&lt;br /&gt;
&lt;br /&gt;
== Team Members ==&lt;br /&gt;
&lt;br /&gt;
* David Johnson&lt;br /&gt;
* Elizabeth Belding&lt;br /&gt;
* Kevin Almeroth&lt;br /&gt;
* Gertjan van Stam&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Idea description==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Main challenges==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Milestones==&lt;br /&gt;
&lt;br /&gt;
==Changes made on machines in Macha to enable monitoring==&lt;br /&gt;
&lt;br /&gt;
==Tools installed on my machine for analysis==&lt;br /&gt;
&lt;br /&gt;
===Python tools fro analysing tcpdump files or live interface===&lt;br /&gt;
* pypcap&lt;br /&gt;
 sudo apt-get install python-pypcap&lt;br /&gt;
 dpkg --listfiles python-pypcap ... to see files that it installes&lt;br /&gt;
 svn checkout http://dpkt.googlecode.com/svn/trunk/ dpkt-read-only&lt;br /&gt;
 cd dpkt-read-only&lt;br /&gt;
 sudo make install&lt;br /&gt;
 cd /usr/share/doc/python-pypcap/examples&lt;br /&gt;
 python test.py&lt;br /&gt;
&lt;br /&gt;
* Examples using pypcap&lt;br /&gt;
* Pyscan logger (http://code.activestate.com/recipes/576690/)&lt;br /&gt;
* Packet monitoring with dpkt (http://code.activestate.com/recipes/576678/)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Primary obstacles==&lt;br /&gt;
&lt;br /&gt;
==Evaluation==&lt;br /&gt;
&lt;br /&gt;
=== Metrics that will be measured === &lt;br /&gt;
&lt;br /&gt;
* Percentage of local traffic&lt;br /&gt;
* Caching efficiency (ratio of incoming traffic to external destination to outgoing traffic to external destination)&lt;br /&gt;
* DNS hit rate&lt;br /&gt;
* DNS delays (can be quite significant) , % of DNS hit on local DNS&lt;br /&gt;
* Up/Down Traffic usage over a 2 week loggin interval&lt;br /&gt;
* Flow analysis&lt;br /&gt;
 - TCP connection durations&lt;br /&gt;
 - Number of simultaneous flows in the network over time&lt;br /&gt;
 - Plot of bandwidth used per IP source address in the network - check if there are clear dominant users&lt;br /&gt;
 - # Retransmissions&lt;br /&gt;
 - TCP round trip times for ACKS&lt;br /&gt;
* Breakdown of application classes using port numbers&lt;br /&gt;
 - Peer-to-peer traffic&lt;br /&gt;
 - Web&lt;br /&gt;
 - video streaming ... protocols like RTSP have there own port - also IP based for flash sites like youtube&lt;br /&gt;
 - VoIP ... prototocols like SIP and some known Skype ports - Skype is a challenge if using port 80&lt;br /&gt;
 - Instant messaging ... could catch things like IRC but maybe IP addresses based again&lt;br /&gt;
 - tunneling&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
=== Monitoring tools ===&lt;br /&gt;
* tshark&lt;br /&gt;
&lt;br /&gt;
=== Scraping tcpdump files ===&lt;br /&gt;
* List of useful tools (http://www.comlab.uni-rostock.de/research/tools.html)&lt;br /&gt;
* TCPdump tips - filters can also be used with pcapy (http://www.cs.ucr.edu/~marios/ethereal-tcpdump.pdf)&lt;br /&gt;
* Crawdad has tools but mostly looks like wifi specific (http://crawdad.cs.dartmouth.edu/tools.php)&lt;br /&gt;
* ipsumdump&lt;br /&gt;
* tcpflow&lt;br /&gt;
* tcpdstat -d &amp;lt;tracefile&amp;gt;&lt;br /&gt;
 To analyse packet size distribution:L tcpdstat -w out.log  &amp;lt;tracefile&amp;gt;&lt;br /&gt;
* Port number assignments (http://www.iana.org/assignments/port-numbers)&lt;br /&gt;
* To analyse flow rates trpr (http://pf.itd.nrl.navy.mil/protools/trpr.html)&lt;br /&gt;
* Coralreef port analysis (http://learn.caida.org/cds/traffic0202/CoralReef/index.html)&lt;br /&gt;
* CAida list of tools (http://www.caida.org/tools/)&lt;br /&gt;
&lt;br /&gt;
=== Understanding port numbers and other networky stuff ===&lt;br /&gt;
* Database of known official and unofficial port numbers being used (http://ports.tantalo.net/?q=gnutella)&lt;br /&gt;
* TTLs set by various operating systems (http://members.cox.net/~ndav1/self_published/TTL_values.html)&lt;br /&gt;
* Meaning of http codes (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)&lt;br /&gt;
* Mime type descriptions (http://www.feedforall.com/mime-types.htm)&lt;br /&gt;
* Why youtube can&amp;#039;t be cached (http://tumbleweed.org.za/2009/02/18/fun-squid-and-cdns)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== DNS analysis ===&lt;br /&gt;
* Macha uses dnsmasq (uses a default of only 150 names in the cache)&lt;br /&gt;
 dnsmasq -c --cache-size=&amp;lt;cachesize&amp;gt; &lt;br /&gt;
 - if cachesize=0 it disables it&lt;br /&gt;
&lt;br /&gt;
=== Checking reboot commands issued ===&lt;br /&gt;
* Check with&lt;br /&gt;
 last reboot&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Squid proxy analysis ===&lt;br /&gt;
* Description of meaning of all log files (http://www.tenon.com/support/webten/papers/squidlog.shtml)&lt;br /&gt;
* Hit rate for proxy server (http://www.squid-cache.org/Scripts/)&lt;br /&gt;
* Squid analysis (http://squid-graph.securlogic.com/)&lt;br /&gt;
* Meaning inside squid log files (http://www.linofee.org/~jel/proxy/Squid/accesslog.shtml)&lt;br /&gt;
&lt;br /&gt;
=== This to be put in a new section - academic writing guide ===&lt;br /&gt;
* Writing style guide (http://elearning.homestead.com/ACADEMIC_WRITING_GUIDE.htm)&lt;br /&gt;
* When to italicise (http://www.ehow.com/how_2049063_italicize-properly.html)&lt;/div&gt;</summary>
		<author><name>Kingdavid</name></author>
	</entry>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/Solution_for_tutorial_2_-_receiver</id>
		<title>Solution for tutorial 2 - receiver</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/Solution_for_tutorial_2_-_receiver"/>
		<updated>2010-01-12T21:03:45Z</updated>

		<summary type="html">&lt;p&gt;Kingdavid: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; define ($DEV ath0)&lt;br /&gt;
 &lt;br /&gt;
 FromDevice($DEV)&lt;br /&gt;
  -&amp;gt;c :: Classifier(12/0800)&lt;br /&gt;
  // Strip off all the ethernet, IP and UDP headers&lt;br /&gt;
  -&amp;gt;Strip(42)&lt;br /&gt;
  -&amp;gt;Print(CONTENTS ASCII)&lt;br /&gt;
  -&amp;gt;Discard&lt;/div&gt;</summary>
		<author><name>Kingdavid</name></author>
	</entry>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/Solution_for_tutorial_2_-_sender</id>
		<title>Solution for tutorial 2 - sender</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/Solution_for_tutorial_2_-_sender"/>
		<updated>2010-01-12T21:02:45Z</updated>

		<summary type="html">&lt;p&gt;Kingdavid: New page:  Change the $SRC and $DST to suite the IP addresses of your nodes   define($DEV ath0, $SRC 172.30.1.74, $DST 172.30.1.75)    InfiniteSource(&amp;quot;Goodbye World&amp;quot;, 1 )   -&amp;gt;UDPIPEncap($SRC, 4001, ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; Change the $SRC and $DST to suite the IP addresses of your nodes&lt;br /&gt;
&lt;br /&gt;
 define($DEV ath0, $SRC 172.30.1.74, $DST 172.30.1.75)&lt;br /&gt;
 &lt;br /&gt;
 InfiniteSource(&amp;quot;Goodbye World&amp;quot;, 1 )&lt;br /&gt;
  -&amp;gt;UDPIPEncap($SRC, 4001, $DST, 4002)&lt;br /&gt;
  -&amp;gt;IPPrint(&amp;quot;my packet&amp;quot;)&lt;br /&gt;
  -&amp;gt;arpq :: ARPQuerier($DEV)&lt;br /&gt;
  -&amp;gt;q :: Queue&lt;br /&gt;
  -&amp;gt;ToDevice($DEV)&lt;br /&gt;
 &lt;br /&gt;
 FromDevice($DEV)&lt;br /&gt;
  -&amp;gt; c :: Classifier(12/0806 20/0002)&lt;br /&gt;
  -&amp;gt; [1] arpq&lt;br /&gt;
 &lt;br /&gt;
 arpq[1] -&amp;gt; q&lt;/div&gt;</summary>
		<author><name>Kingdavid</name></author>
	</entry>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/Solution_for_Original_Tutorial_1</id>
		<title>Solution for Original Tutorial 1</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/Solution_for_Original_Tutorial_1"/>
		<updated>2010-01-12T21:01:40Z</updated>

		<summary type="html">&lt;p&gt;Kingdavid: New page:  define($DEV ath0)    FromDevice($DEV)   -&amp;gt; c :: Classifier(12/0800, 12/0806 20/0002)   -&amp;gt; CheckIPHeader(14)   -&amp;gt; IPMirror   -&amp;gt; StripToNetworkHeader   -&amp;gt; GetIPAddress(16) // Paint the dest...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; define($DEV ath0)&lt;br /&gt;
 &lt;br /&gt;
 FromDevice($DEV)&lt;br /&gt;
  -&amp;gt; c :: Classifier(12/0800, 12/0806 20/0002)&lt;br /&gt;
  -&amp;gt; CheckIPHeader(14)&lt;br /&gt;
  -&amp;gt; IPMirror&lt;br /&gt;
  -&amp;gt; StripToNetworkHeader&lt;br /&gt;
  -&amp;gt; GetIPAddress(16) // Paint the destination IP address&lt;br /&gt;
  -&amp;gt; arpq :: ARPQuerier($DEV)&lt;br /&gt;
  -&amp;gt; IPPrint&lt;br /&gt;
  -&amp;gt; q :: Queue&lt;br /&gt;
  -&amp;gt; ToDevice($DEV)&lt;br /&gt;
 &lt;br /&gt;
 arpq[1] -&amp;gt; q;&lt;br /&gt;
 c[1] -&amp;gt; [1] arpq;&lt;/div&gt;</summary>
		<author><name>Kingdavid</name></author>
	</entry>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/VO_Requirements_%26_Functionality_Questions</id>
		<title>VO Requirements &amp; Functionality Questions</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/VO_Requirements_%26_Functionality_Questions"/>
		<updated>2009-10-15T07:13:59Z</updated>

		<summary type="html">&lt;p&gt;Kroux: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Understanding the bigger picture ==&lt;br /&gt;
&lt;br /&gt;
The development on this project is done in phases. New functionalities/features are added with each phase until we reach our target system. All development work of every phase should be aligned with our end system in mind. In order for developers to make the right design choices that will not limit future functionality, they need to have a clear end target that they are working towards.&lt;br /&gt;
&lt;br /&gt;
This page is here to help the developers to get a better understanding of the bigger picture and to make sure the target we design for is clearly defined and does not move around. &lt;br /&gt;
&lt;br /&gt;
Please add any project related questions/thoughts on this page so that we can sort them and see what information is still missing.&lt;br /&gt;
&lt;br /&gt;
=== VO (village operator) in action ===&lt;br /&gt;
&lt;br /&gt;
Lets assume the the new VO has all the kit installed. The gateway (WISP) box is connected to the Internet and he is now ready to commission his new business. His first customers are three schools, the local Municipality and two owners of a local Spaza shop who wants a network connection at the shop and at both their homes. The two shop owners are very excited and they want to put a web server at their shop and they are thinking about opening a little Internet cafe very soon.&lt;br /&gt;
&lt;br /&gt;
=== Definitions ===&lt;br /&gt;
* User - An accounting entity with a user name and password. Typically represents an individual or an organisation.&lt;br /&gt;
* Edge device - A device that is part of the local wireless network (e.g. talk mesh protocol) and allows other devices to connect through the wireless network. HPNs and &amp;#039;Basic Nodes&amp;#039; are edge devices.&lt;br /&gt;
* HPN - High Performance Node&lt;br /&gt;
* BN - Basic Node&lt;br /&gt;
&lt;br /&gt;
=== Random questions / thoughts ===&lt;br /&gt;
&lt;br /&gt;
* What Internet contract packages are available from the VO - prepaid, contract, local, gov sites only ???&lt;br /&gt;
* Is data traffic contained on the local wireless network free / flat fee / pay per usage&lt;br /&gt;
* must a user do some login before he can use the local network&lt;br /&gt;
* must the network be able to log all user traffic between local users&lt;br /&gt;
* can a user use the local network without buying prepaid/account from the VO&lt;br /&gt;
* How must a prepaid package be activated / deactivated&lt;br /&gt;
* Are there any bandwidth limits tied to a Internet package&lt;br /&gt;
* Are there any data caps associated with the different package&lt;br /&gt;
* Must a prepaid user login before he can use the Internet&lt;br /&gt;
* Must a prepaid user login before he can send data on the local network (no Internet)&lt;br /&gt;
* How about a gaming server on the local network, does it need to login some where&lt;br /&gt;
* Can more than one user share the same prepaid account, and at the same time&lt;br /&gt;
* If a school uses prepaid, do they share the same account, or each user in school&lt;br /&gt;
* How will someone running an Internet cafe resell his prepaid bandwidth&lt;br /&gt;
* Is a prepaid account tied to certain time duration&lt;br /&gt;
* How does a person get onto the network?&lt;br /&gt;
* If login is necessary, how do peripherals like printers and ATAs authenticate?&lt;br /&gt;
* What devices should be &amp;#039;approved&amp;#039; for use on the network&lt;br /&gt;
&lt;br /&gt;
=== The VO ===&lt;br /&gt;
A VO is a person or an entity whose primary objective is running (at a profit) a wireless network. To this end, the following describes the needs or requirements of the VO to meet his objective.&lt;br /&gt;
&lt;br /&gt;
The VO needs:&lt;br /&gt;
&lt;br /&gt;
1. A healthy and working network&lt;br /&gt;
&lt;br /&gt;
2. Diagnostic tools for the network&lt;br /&gt;
&lt;br /&gt;
3. To manage users or subscribers to the network&lt;br /&gt;
&lt;br /&gt;
4. Service management of the network&lt;br /&gt;
&lt;br /&gt;
5. A view of the usage of the network&lt;br /&gt;
&lt;br /&gt;
6. To manage (activate/deactivate) edge devices on the network&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. A healthy and working network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Each network element MUST handle all routing and communications other network elements. &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; Each network element MUST require of the VO as minimum as possible configuration without compromising its usability or effectiveness.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Diagnostic tools for the network&lt;br /&gt;
&lt;br /&gt;
At a minimum, the VO is provided with a web based diagnostic tools. &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; The diagnostic tools are enough for the VO to establish any problem that may be there. &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; The diagnostic tools can interface with other systems, e.g SMS, email.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. To manage users or subscribers to the network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; VO will be able create and modify user accounts&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; VO provides a number of service options for different users&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; VO can monitor usage of the internet connection&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; VO can monitor usage of the local network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; VO can block access to the network for certain users&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Service management of the network &lt;br /&gt;
&lt;br /&gt;
-&amp;gt; The VO is able to prioritise certain services within the network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; The VO is able to block or enable certain services&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. A view of the usage of the network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; The VO is able to see the usage of the whole network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; The VO is able to see the usage of each network element&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. To manage (activate/deactivate) edge devices in the network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; VO can allow (new) edge devices to join the network&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; VO can block edge devices from accessing the local network&lt;/div&gt;</summary>
		<author><name>Ajay</name></author>
	</entry>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/Music_Coach</id>
		<title>Music Coach</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/Music_Coach"/>
		<updated>2009-10-14T08:59:18Z</updated>

		<summary type="html">&lt;p&gt;Kingdavid: /* Academic references */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Requirements ==&lt;br /&gt;
&lt;br /&gt;
Submit (via email) a tentative project proposal, including: team member names, brief description of project (a paragraph or so), the main technical challenges, milestones/tasks to accomplish this, the primary obstacles/concerns, how you propose to evaluate the outcome.&lt;br /&gt;
&lt;br /&gt;
== Team Memebers ==&lt;br /&gt;
* David Johnson&lt;br /&gt;
* Dianna Han&lt;br /&gt;
&lt;br /&gt;
==Idea description==&lt;br /&gt;
&lt;br /&gt;
Use the Nokia N900 as a music coach which can check if you are playing a note at the correct pitch, check if a note is played at the correct time and optionally may allow you to display sheet music from midi files as well as control the pace of performance with movements of the body. It will act both as a real time feedback mechanism alerting you of pitch and rhythm inaccuracies as you play the notes and give you an overall evaluation at the end of your performance. The pitch evaluation is especially useful for instruments which don&amp;#039;t have discrete notes such as a cello, violin, trombone or even human voice whereas the rhythm evaluation is suitable for all instruments. Other additional features such as an instrument tuner and a metronome could be added with trivial software modification. It should also be possible to evaluate only pitch with no pre-loaded music score by checking how close a note is to its nearest discrete note. This would assume an advanced student that is playing notes with less than a quarter tone of inaccuracy or else it would rounding to a note which is different to the original intended note. &lt;br /&gt;
&lt;br /&gt;
Different feedback mechanisms will be explored. Visual feedback could use a compass like display where North and South represent a pitch that is above or below the correct note and the length of the arrow represents the fractional difference between the notes. East and West represents whether you played the note too early or too late and the length of a second arrow also represents the fractional difference. Audio feedback could also be explored by playing the correct note on the speaker in the case of a pre-loaded score and using beats in the note which get closer together the further the note is away from the correct note. This would be ideal as a training module for someone learning scales on a cello, for example.&lt;br /&gt;
&lt;br /&gt;
One problem with a pre-loaded score is making allowances for musical expressiveness. This comes in the form of slowing down and speeding up your performance in sections of the music as well as adding vibrato to a note in the case of stringed instruments and the human voice. A vibrato note is an oscillation which falls slightly below and slightly above a note. The accelerometer could be used to sense rhythm by monitoring swaying movements on the body, if the phone was strapped onto a person. For example if the phone was strapped to the head, faster rocking movements in the head would speed up the performance and slower rocking movements would slow the performance down. Allowing for vibrato can be done by calculating the average pitch of the performed note over a specific time window.&lt;br /&gt;
&lt;br /&gt;
==Main challenges==&lt;br /&gt;
# Real-time processing of the audio input to recognise the frequency of a note.&lt;br /&gt;
# Different instruments have a range of timbre with transient harmonics which can dominate the fundamental frequency momentarily - the challenge will be to decide on an optimal time window to use for the pitch recognition. This challenge may simply limit the scope of instruments to ones which have a dominant fundamental from the attack to the decay of the note.&lt;br /&gt;
# Real-time feedback display. You want the performer to get feedback as quickly as possible for it to be useful but if this is too soon - it may be inaccurate, whereas if its too late it will be more accurate but less useful.&lt;br /&gt;
# If time permits, inferring rhythm from a trace of accelerometer inputs should not require the user to make movements of the body that would be unnatural. A gentle rocking of the head should be all that&amp;#039;s required to alter the pace at which the pre-loaded music progresses.&lt;br /&gt;
&lt;br /&gt;
==Milestones==&lt;br /&gt;
&lt;br /&gt;
# Test some FFT code on a PC which can take as input - sample rate, number of bins and display the frequency of a single note on the screen&lt;br /&gt;
# Run some experiments which compare time from note attack to display vs note accuracy.&lt;br /&gt;
# Make use of some existing software which can read in a midi file and display the notes and reformat this for a Nokia N900 screen size.&lt;br /&gt;
# Experiment with comparing a midi file to a live performance in terms of pitch accuracy - find optimal time windows for calculating average pitch of performed note. &lt;br /&gt;
# Evaluate the accuracy of the attack and release times of the live performance with the start and stop times of the notes in the midi file. Make use of a metronome on the phone for the user to synchronise their performance.&lt;br /&gt;
# Write a graphical interface on the Maemo simulator which creates feedback on the pitch and timing accuracy of the performance using a compass like display - (other more creative graphical displays may be developed). Also display momentary Pitch and timing accuracy as well as cumulative accuracy as a percentage. &lt;br /&gt;
# If both the compass display and the midi file are to be displayed, then a blend of these two could be explored&lt;br /&gt;
# Test the FFT code for pitch recognition on the N900&lt;br /&gt;
# Test the midi file input on the N900&lt;br /&gt;
# Test the graphical feedback display on the N900&lt;br /&gt;
# Time permitting add the option to change the speed of the performance using the accelerometer&lt;br /&gt;
&lt;br /&gt;
==Primary obstacles==&lt;br /&gt;
* Processing capability to carry out a real-time FFT. If the on-board CPU is not sufficient we might need to use the DSP which adds an extra level of complexity to the problem&lt;br /&gt;
* Allowing for a certain level of musical expressiveness in a performance and not seeing this as pitch or rhythm inaccuracy. &lt;br /&gt;
* Inferring rhythm for small subtle movements of the phone when attached to the body depends on accuracy of accelerometer.&lt;br /&gt;
&lt;br /&gt;
==Evaluation==&lt;br /&gt;
* The real-time pitch recognition software on the N900 can be compared against some more accurate non-real time pitch recognition on a standard PC.&lt;br /&gt;
* Musician&amp;#039;s feedback on whether the device was useful in improving accuracy of performance.&lt;br /&gt;
&lt;br /&gt;
==Using pulseaudio==&lt;br /&gt;
* possible command&lt;br /&gt;
 pacat --record | sox -t raw -r 44100 -s -L -b 16 -c 2 - &amp;quot;output.wav&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Code that can be used==&lt;br /&gt;
* A metronome with visual and audio feedback will be very useful for a player to know the pace that the application is expecting you to play the music - some code segments of the [http://www.antcom.de/gtick/ GTick] open source software can be used for this.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Gtick.jpg]]&lt;br /&gt;
&lt;br /&gt;
* To display notes on the screen a very well written qt application called [http://www.musescore.org/ Musescore] could provide some useful code segments&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Musescore.jpg]]&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
=== Pitch recognition ===&lt;br /&gt;
&lt;br /&gt;
* http://www.nicholson.com/rhn/dsp.html&lt;br /&gt;
* http://www.hotpaw.com/intuna/singintuna.readme.html&lt;br /&gt;
* http://cs.ucsb.edu/~davidj/Files/thesis1995.pdf&lt;br /&gt;
&lt;br /&gt;
=== FFT ===&lt;br /&gt;
* FFT on a symbian phone (http://wiki.forum.nokia.com/index.php/FFT_algorithm)&lt;br /&gt;
* Most stable FFT system - fftw (http://www.fftw.org/)&lt;br /&gt;
&lt;br /&gt;
=== Multimedia system Maemo 5 ===&lt;br /&gt;
* Maemo 5 multimedia domain (http://wiki.maemo.org/Documentation/Maemo_5_Developer_Guide/Architecture/Multimedia_Domain#Audio_Subsystem)&lt;br /&gt;
* Maemo 5 uses pulseaudio (http://www.pulseaudio.org)&lt;br /&gt;
* Examples of using pulseaudio - parec (http://grangerx.wordpress.coExamplem/2009/08/03/fedora-11-recording-audio-from-pulseaudio-using-parec-and-sox/)&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
* Using accelerometer trace to detect shaking (http://msdn.microsoft.com/en-us/magazine/ee413721.aspx)&lt;br /&gt;
* Smart phones as instruments (http://www.cnn.com/2009/TECH/10/15/iphone.music.zoozbeat/index.html)&lt;br /&gt;
* Zoozbeat (http://www.youtube.com/watch?v=YEsC-lklOA4)&lt;br /&gt;
&lt;br /&gt;
=== MIDI importing ===&lt;br /&gt;
* C++ MIDI Library (http://www.jdkoftinoff.com/main/Free_Projects/C++_MIDI_Library/)&lt;br /&gt;
* The Computer Music Project Software (http://www.cs.cmu.edu/~music/music.software.html)&lt;br /&gt;
* Very Simple MIDI parsing code (http://cap-lore.com/EnglishSuites/code/code.html)&lt;br /&gt;
&lt;br /&gt;
=== MIDI file format explanation ===&lt;br /&gt;
* David&amp;#039;s MIDI Spec (http://www.srm.com/qtma/davidsmidispec.html)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Notation software ===&lt;br /&gt;
* GUIDOLib qt music notation library (http://guidolib.sourceforge.net/)&lt;br /&gt;
&lt;br /&gt;
=== Companies that have done music reconigtion ===&lt;br /&gt;
* WIDI 1998-2009 Recognition System (79$ stadard, $159 professional) (http://www.widisoft.com/english/mp3-midi-products.html)&lt;br /&gt;
* Shazam iphone song reconigtion (http://www.shazam.com/music/web/pages/getshazam.html)&lt;br /&gt;
&lt;br /&gt;
=== Academic references ===&lt;br /&gt;
* Google scholar results for &amp;quot;transcription of musical sound&amp;quot; (http://scholar.google.com/scholar?hl=en&amp;amp;q=transcription+of+musical+sound&amp;amp;btnG=Search&amp;amp;as_sdt=2000&amp;amp;as_ylo=&amp;amp;as_vis=0)&lt;br /&gt;
* Bibliography on automatic music transcription (http://www.recognisoft.com/cgi-bin/main.cgi?id=62&amp;amp;lan=en&amp;amp;n=&amp;amp;p=&amp;amp;d=&amp;amp;o=&amp;amp;r=y&amp;amp;s=)&lt;br /&gt;
&lt;br /&gt;
===Instrument Ranges ===&lt;br /&gt;
* Of all orchestral instruments (http://www.orchestralibrary.com/reftables/rang.html)&lt;/div&gt;</summary>
		<author><name>Kingdavid</name></author>
	</entry>
	<entry>
		<id>http://wirelessafrica.meraka.org.za/wiki/index.php/WISP_in_a_Box_Development</id>
		<title>WISP in a Box Development</title>
		<link rel="alternate" type="text/html" href="http://wirelessafrica.meraka.org.za/wiki/index.php/WISP_in_a_Box_Development"/>
		<updated>2009-08-04T11:43:04Z</updated>

		<summary type="html">&lt;p&gt;Ajay: /* Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=&amp;quot;right&amp;quot;&lt;br /&gt;
| style=&amp;quot;height:100%;width:20em;border:1px solid #D9D9D9;background-color:#F2F2F2;&amp;quot; valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
*[[WISP_in_a_Box_Development|&amp;#039;&amp;#039;&amp;#039;WISP in a Box Development Home&amp;#039;&amp;#039;&amp;#039;]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developer Guide ==&lt;br /&gt;
&lt;br /&gt;
WISP in a Box development is organized as an Open-Source or [http://en.wikipedia.org/wiki/Free_software Libré] software project. &lt;br /&gt;
&lt;br /&gt;
In order to understand what this means and be able to work together in this way we need to agree on the definitions of the following five words:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Upstream&amp;#039;&amp;#039;&amp;#039; - We use the term &amp;#039;&amp;#039;Upstream&amp;#039;&amp;#039; to refer to projects which our project makes use of.  For example [http://net-snmp.sourceforge.net/ net-snmp] and [http://code.google.com/p/afrimesh afrimesh] are both &amp;#039;&amp;#039;upstream&amp;#039;&amp;#039; projects of the WispBox.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Downstream&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;Downstream&amp;#039;&amp;#039; are projects who use our code. For example, if someone were to create a linux distribution which focused on adding VOIP services to a WISP and which used [http://code.google.com/p/wispinabox WispBox] as a dependency then that project would be considered to be &amp;#039;&amp;#039;downstream&amp;#039;&amp;#039; from our project.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Users&amp;#039;&amp;#039;&amp;#039; - We live and breathe for these special individuals as, without them, none of us would have paying jobs. Their contributions to the project usually take the form of running the software, reporting bugs on the mailing list and requesting features.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Contributors&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;Contributors&amp;#039;&amp;#039; are usually also users but they have both the ability and desire to contribute code patches, documentation and their expertise to project development discussions. Often, future developers on a project are drawn from the pool of contributors. Contributors are a necessary condition to the long-term sustainability of any Libré project. For this reason all new developers are first required to spend some time as a contributor to the project before they are &amp;quot;handed the keys to the house&amp;quot; and gain full access to the project infrastructure.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Developers&amp;#039;&amp;#039;&amp;#039; - &amp;#039;&amp;#039;Developers&amp;#039;&amp;#039; perform the bulk of the development work and have full access to the project source repositories, servers and other infrastructure.&lt;br /&gt;
&lt;br /&gt;
[[Image:libre_software_cycle.png|left|frame|The Libré Software Development Cycle]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Upstream Projects ===&lt;br /&gt;
&lt;br /&gt;
WISP in a Box has many upstream dependencies. The following list are the ones you will see referred to most commonly:&lt;br /&gt;
&lt;br /&gt;
* [http://code.google.com/p/afrimesh &amp;#039;&amp;#039;&amp;#039;Afrimesh&amp;#039;&amp;#039;&amp;#039;] - the WispBox component integration toolkit and the core management dashboard.&lt;br /&gt;
* [http://uck.sourceforge.net/ &amp;#039;&amp;#039;&amp;#039;Ubuntu Customization Kit&amp;#039;&amp;#039;&amp;#039;] - A set of scripts used by our build system to generate the WispBox livecd images.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Checklist ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Task !! Description &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| Development Workstation || &lt;br /&gt;
* x86&lt;br /&gt;
* FreeBSD or Ubuntu&lt;br /&gt;
* 1x Edimax 7711UM USB WiFi network card&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| WISP Server ||&lt;br /&gt;
* AMD ION&lt;br /&gt;
* 1GB RAM&lt;br /&gt;
* 80GB Hard Drive&lt;br /&gt;
* D-Link USB Ethernet&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| Development Mesh Node ||&lt;br /&gt;
* D-Link DIR-300&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| Deployment Mesh Node ||&lt;br /&gt;
* HPN&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| Subscribe to mailing lists || TODO&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| Join IRC || Install an IRC client and configure it for irc.freenode.net, #afrimesh  (ask George if you need help)&lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| Configure WispBox Development Environment ||&lt;br /&gt;
Read: http://code.google.com/p/wispinabox/wiki/DevelopmentEnvironment &lt;br /&gt;
|- valign=&amp;quot;top&amp;quot; &lt;br /&gt;
| Configure Afrimesh Development Environment ||&lt;br /&gt;
Read: http://code.google.com/p/afrimesh/wiki/DevelopmentEnvironment&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
=== Core Project Infrastructure ===&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Resource !! URL !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Mailing List - User Support || TO COME ||  Users, Contributors and Developers should subscribe to and follow this list.&lt;br /&gt;
|-&lt;br /&gt;
| Mailing List - Development || TO COME || Contributors and Developers should subscribe to and follow this list.&lt;br /&gt;
|-&lt;br /&gt;
| Issue tracker || http://code.google.com/p/wispinabox/issues/list || Bug reports and feature requests submitted to the Issue tracker are more likely to receive attention!&lt;br /&gt;
|-&lt;br /&gt;
| IRC || http://webchat.freenode.net/?channels=afrimesh || For IRC client configuration, use: irc.freenode.net, #afrimesh&lt;br /&gt;
|-&lt;br /&gt;
| Wiki - Main || http://wirelessafrica.meraka.org.za/wiki/index.php?title=WISP_in_a_Box_Development || &lt;br /&gt;
|-&lt;br /&gt;
| Wiki - WispBox || http://code.google.com/p/wispinabox/w || Content hosted here still needs to be migrated to the main wiki&lt;br /&gt;
|-&lt;br /&gt;
| Wiki - Afrimesh || http://code.google.com/p/afrimesh/w || Afrimesh services multiple projects and as such maintains a separate wiki&lt;br /&gt;
|-&lt;br /&gt;
| Version Control - WispBox || http://code.google.com/p/wispinabox/source/checkout || &lt;br /&gt;
|-&lt;br /&gt;
| Version Control - Afrimesh  || http://code.google.com/p/afrimesh/source/checkout || &lt;br /&gt;
|-&lt;br /&gt;
| Package Repository || https://launchpad.net/~wispinabox || &lt;br /&gt;
|-&lt;br /&gt;
| Build Server || TO COME ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Resources ===&lt;br /&gt;
&lt;br /&gt;
* [[Media:Community_barriers_to_entry_checklist.pdf|&amp;#039;&amp;#039;&amp;#039;Community Building : Barriers to Entry&amp;#039;&amp;#039;&amp;#039;]] - Neary Consulting [http://www.neary-consulting.com]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Development ==&lt;br /&gt;
&lt;br /&gt;
=== [[VO Requirements &amp;amp; Functionality Questions]] ===&lt;/div&gt;</summary>
		<author><name>Antoine</name></author>
	</entry>
</feed>