In Spring 2006, I joined an existing effort within our research group to construct a Labview-based (physical-layer) ADSL2 simulator. I implemented frame synchronization, constellation mapping/slicing, and the control logic to drive the simulator. I also gained insight into the other components and developed a strong interest in ADSL transceivers.
I quickly realized that the LabVIEW graphical programming language was somewhat unwieldly for stateful control-intensitive programming [much in the same way it is easier to implement such in software rather than hardware description languages]. But a more serial problem was that the VI scheduling overhead was causing performance issues in our design. A standard ADSL modem processes in excess of 4000 DMT frames/second, each with 256 subcarriers. I found performance could be imporved by using native VIs do operations in a vectorized manner. For example, instead of using an explicit 'for loop' to sum elements in an array, the summation VI did the same thing much faster. Some parts of the modem, such as constellation slicing could not be directly vectorized. Instead, I reimplemented these portions in C/C++ and invoked DLL functions from LabVIEW.
Here is a screenshot of the intiial simulator in LabVIEW:
The simulator is available at http://www.ece.utexas.edu/~bevans/projects/adsl/ under the Software link.
Once we began the path of writing portions of the modem in C++, we ended starting over and wrote the entire modem in C++. We kept LabVIEW, but only used it for control/visualization. We also switched to an embedded PC running an RTOS for the modem physical layer. This resulted in over 10X performance increase and allowed the modem to execute in real-time.
Now with an modem software that executes in real-time, all one needs is some hardware to complete a real modem. National Instruments had previously donated some expensive hardware originally intended for wireless research. It turns out it was no longer being used. It had an upconverter/downconverter that were not needed, but did also contain high-performance ADC and DACs that were compatible with LabVIEW.
After getting a few hundred dollars for HW purchases, we purchased DSL line-driver evaluation boards (to couple a local transmitter and receiver to a single communication channel). Now we needed some analog for anti-aliasing. Wishing to avoid custom analog circuit design & soldering (ourselves), we elected to purchase commercial passive analog filters.
Thus, we now had all the pieces needed to make a modem. We had: