PCBs with Eagle and Low-Cost Manufacturers

After the effort of producing a PCB for the UHF front-end using the toner-transfer and hobby-knife method, I decided to try out more conventional methods.

A few yeas ago I designed one PCB with Eagle, a PCB design program. Eagle has a free version for non-commercial use. The free version is limited, but still usable for  simple boards. The user interface of Eagle is a bit weird, so I pretty much forgot how to use it. But after spending some time with the on-line tutorial, I got the hang of it and started designing.

Back when I designed the first board with Eagle, I was very worried about having all the parts I wanted to use in the Eagle part libraries. I knew in theory that you can add parts to the library, but I thought that it is a complicated process that beginners should avoid.

But a couple of years ago I worked with a colleague who designed PCB for a joint project (using another program, not Eagle), and I noticed that he routinely added new parts to his library. He did not bother to search very hard for part libraries; he just added every part he needed to use to the library.

This is exactly what I did with the UHF front end unit. I added symbols and footprints for almost all the parts it it. This is not hard at all, and the footprints are all specified in the data sheets. This was the first board I designed for SMD devices, so I was conservative in how densely I placed parts, to ensure that hand  assembly would be easy (it turned out that I could make the circuit a lot smaller and still assemble it easily, but I didn’t know that when I designed it). I used mostly 0603-size passives, which I knew I could solder by hand easily. The layout ended up close to 10cm in length, and since the manufacturer I decided to use (iteadstudio.com) has a special deal on boards up to 5x10cm, I made the circuit 5cm wide and used the extra space for prototyping pads. You can see the design and the finished board below.



Iteadstudio is very inexpensive (the 5x10cm deal includes 10 copies of the board and cost me $22 for the boards and $6 for shipping), and they have a wide selection of board and copper thicknesses and finishes. I did not test the boards yet, but they seem just fine. (an update: the boards have been tested and they work just fine.)

The reason I did not test the boards yet is that shipping from iteadstudio in China was excruciatingly slow (I chose registered mail and I assume that more expensive shipping methods would have been faster). So after waiting for a while, I decided to order a small batch from a low-cost manufacturer in the US, OSH Park. They only offer two types of boards, 2-layer and 4-layer, but the boards arrived more quickly. I used US shipping, which is free in OSH Park. They charge a flat rate per square inch ($5 for 2 layers), so the extra area I added to pad the board to the iteadstudio deal size did not make sense. I removed that part of the design and also shrunk the width a bit. The boards came out very well (and arrived more quickly).

IMG_3250OSH Park isn’t expensive either. They make boards in multiples of 3, and 3 of these cost around $20. More expensive per board than at iteadstudio, but still affordable.

One nice thing about OSH Park is that the flat per-sq-inch rate also applied to small boards. I ordered 3 other designs from them, all pretty small, at a cost of $0.64 to $1.80 per board, including shipping (in the US)! This is pretty incredible.

Fabricating PCBs with the Toner-Transfer Hobby-Knife Method

SAMSUNGI needed to prototype a UHF front-end for the USRP. I did not want to use a PCB fabrication service, both because I forgot how to use Eagle and because I wanted the PCB as quickly as possible.

In the past I constructed circuits on copper-clad boards by cutting isolation channels between pads with a hobby knife. This works well for simple circuits, especially when combined with the “dead-bug” technique (as I’ve done here, for example). Dead-bug did not seem like appropriate technique for UHF, but the circuit I wanted to build was certainly very simple, so creating all the traces and pads by cutting isolation channels seemed plausible.

However, most of the components in this circuit are surface-mount components, and some are pretty small. The most challenging part was a 3mm-by-3mm SAW filter. The pads for it on the PCB need to be separated by about 0.5mm (the manufacturer recommends a separation of 0.38mm). This required precision; I needed to know exactly where to cut. In the past I cut the isolation channels free hand, but this job called for precision.

I decided to try to use the toner-transfer technique to transfer a PCB design from the computer to paper to the copper-clad board. Once the design was “printed” on the copper, I would cut out the channels with a hobby knife.

I started by drawing the design in Adobe Illustrator. I copied the footprints from the data sheets to Illustrator, then combined them into a circuit and drew the connecting traces and the ground plane. I printed out the design and checked that the components actually fit their pads. I then copied the design in illustrator and transformed the drawing until the copper was in white and the isolation channeled (“etched” areas) were in black. Finally, I created a mirrored version and printed it out. You can see all three phases in the picture above, along with the two-sided copper-clad board I used later.

Note that this printout is the reverse of what you need to etch using the toner-transfer method. When you etch (I used to do it years ago but now I don’t want to deal with the chemicals) using toner transfer you print in black the areas where the copper should remain.

SAMSUNGI printed the design on a laser printer on plain paper, even though glossy is supposed to work better. I taped the paper to the copper-clad board and ironed it for a few minutes. This leaves the paper glued to the copper (the toner is the glue), so I soaked the paper and carefully removed most of it. You can see the result on the right. I did not bother to remove all the paper, and I did not worry about partial transfers, because I was not going to etch the board, just to use the black toner as a marker for where to cut and drill. Some parts did not transfer well, mostly very thin lines. But most of it trasfterred well, including the sub-millimeter lines around the SAW filter.

SAMSUNGNow it was time to remove the copper from the isolation channels. I cut along the edges of the black lines with a hobby knife. The knife feels different when it is cutting through the soft copper than when it cuts through the fiberglass board, so you know when you cut through the copper. I worked by trying to cut V-shaped channels in the board. Initially I tried to use a ruler to get straight lines, but after a while I realized that it would be easier to cut free hand. The lines might not be perfectly straight, but not to an extent that matters. You can see the result in the picture. I think it looks pretty close to the design. Don’t be misled by the picture; the channels are really narrow, around 0.5mm at the narrowest, and the narrow traces are about 1mm or a bit less.

SAMSUNGAfter drilling holes for one through-hole component, for vias to two traces on the other side, and for some vias to connect the ground plane on both sides, the board was ready for soldering.

IMG_3113As expected, soldering the 3mm SAW filter was challenging, but it worked. The other components were easy to solder, even the 0603 capacitors and the SOT-89 amplifier. When I designed the board, I left quite a lot of space between components (around 4mm) to make soldering easy. It was easy, but I think it would have been easy even if the components were packed much tighter. A lesson for the future.

The finished board looks okay and from limited testing I’ve done so far, it works correctly. It certainly amplifies and filters.

The whole process took a few hours. It’s not a super-quick method, but not too consuming either. No chemicals and no waiting for commercially-made PCBs. I’m pretty happy with the result.






An update from August 29: After putting the unit in a metal box, I measured its performance with a network analyzer (thanks to Avigdor Drucker for helping out). It performed very well, with good gain and excellent filtering, as you can see in the screen shot below. At least at these UHF frequencies, this technique can deliver good results.

30MHz per horizontal division

DC Connectors

Anderson PowerpoleI needed a few wire-to-wire DC connectors for a project. For high-current applications, I use Anderson Powerpole connectors, shown on the right. They many useful features: they can be soldered or crimped, they are genderless (meaning that there are no male and female connectors; any two can be mated), and they can form multi-conductor connectors. They are designed to carry 15A and higher, which is good if the application requires high currents. But for low-power applications, they are too bulky and too expensive (around $1 for a two-wire pair).

The major manufacturers like Samtec and Molex make a wide variety of appropriate connectors, of course, but the selection is almost confusing.

SAMSUNGI eventually settled on RCY connectors from JST. They are small, polarized (really mandatory), and inexpensive. I ordered 50 pairs of mating pigtails on eBay for less than $10. This is around 10% of the cost of Powerpoles. They do have a gender (socket and plug), which is a little less convenient for making various adapters, but I don’t think that there is a genderless alternative.

I think I will use them as standard DC connectors in my projects (at least until I exhaust the 50 pairs I bought 🙂

JST RCY connectors


A small improvement to the DEMI LNA and a UHF J-Pole Antenna

IMG_0588I recently built two more UHF preamplifier kits made by Down East Microwave (DEMI) and a simple reference antenna to go with them.

The antenna and two preamplifiers feed a USRP radio with a WBX front end. The USRP uses a 6V power supply. This created a slight logistical problem for the preamplifiers. They contain a 78M05 linear voltage regulator that drops the input voltage down to 5V. The 78M05 requires an input voltage higher than 6V, which means that the power supply of the USRP cannot power the preamplifiers; I would need a separate power supply for them, one that provides 7V or higher.

This seemed a bit silly when so many low-dropout regulators are available. After searching a bit I found a 5V low-dropout regulator in the same package as the 78M05 that came with the kits (a TO-252 surface-mount package) and with the same pinout; a direct replacement. This regulator, TL720M05 by Texas Instruments, works down to an input voltage of 5.5V and can tolerate even higher input voltages than the 78M05. It does require a larger output capacitor of 22μF or higher; I used 47μF 10V SMD tantalum capacitors which fit on the printed circuit board without a problem. The parts were not expensive and I am happy with the improved functionality of the preamplifiers and the ability to use a single power supply for them and for the USRP.

IMG_0589Incidentally, I ordered these preamplifier kits with the optional enclosure and connectors; they fit together beautifully, as you can see below.

The antenna I built is a simple J-pole, which means it’s a dipole fed from one end by a quarter length matching stub. I computed the length of the stub and the radiating element using an on-line calculator. I left the radiating element a little long for tuning, soldered the coax to the matching stub at the point suggested by the calculator, and tested the antenna for low SWR with the FT-857D. The SWR was a little high. I tried the antenna up and down the 430MHz band trying to see in which direction to tune the antenna (hoping that tuning would require cutting the antenna rather than extending it). IMG_9795I eventually managed to tune it, but I discovered in the process that a J-pole is not an easy antenna to tune with an SWR meter alone. There are 3 tuning parameters: the length of the radiating element (which you can tune by chopping pieces off the top), the length of the matching stub (chopping pieces off its free end makes the stub shorter and the radiating element longer), and the connection point of the coax to the stub. The first two parameters should bring the antenna to resonance and the third should bring the resistive impedance to 50Ω. Eventually I got it close enough. In the picture on the right you can see the antenna with the coax connected. This short piece of coax is meant to connect the antenna to the preamplifier. Once it was tuned, I added a ferrite sleeve as a choke, put the antenna inside a PVC pipe with some foam to hold it in place (I also tested for resonance inside the PVC sleeve in case it affects the tuning a bit), and the antenna was ready. In the pictures below you can see the coax connection and the two halves of the ferrite sleeve, as well as the antenna mounted with a preamplifier on the roof.


Transmitting (and Receiving) DVB-T on 1.2 GHz

What interesting stuff can you do with a wideband software-defined transceiver? This question started bugging me when I got access at work to an N200 USRP with a WBX daughter board. The N200 is a DAC/ADC motherboard that can stream up to 50M samples per second to/from a computer using a gigabit Ethernet cable, and the WBX is an up/down converter that covers 50 to 2200 MHz. Together, they can receive and transmit signals with bandwidth of up to about 25 MHz almost anywhere in the VHF and UHF bands.

The coolest thing I could think of is to transmit digital television in a standard format that could hopefully be received by normal televisions, set-top boxes, and USB TV dongles. I almost succeeded, and this post tells the story. (For the impatient, here is the summary: I managed to transmit digital TV to a standard dongle, but in order to do this both legally and ethically, I had to hack its driver a bit; the video is jumpy, but it’s there.)

Standard and Frequency Selection

Choosing a digital video standard to transmit was easy. The on-the-air TV stations here transmit DVB-T (a widely-used standard for terrestrial digital TV), and I already had a DVB-T USB donble (which I used as an SDR receiver up to now), so the obvious choice was DVB-T.

Selecting a frequency to transmit is more of a problem, because the easy choice is not a good choice. Terrestrial digital TV is transmitted in VHF and low-UHF channels, from 50 to 862 MHz. DVB-T channels are 6, 7, or 8 MHz wide. The only amateur band within this range that is wide enough is the 430-440 MHz band, and it’s only 10MHz wide here; in other parts of the world it covers 420-450 MHz. If I transmit DVB-T within these 10 MHz, I will transmit over many other signals, including satellites, repeaters, and simplex channels, so this band is really not an option. The next band up is 1240-1300 MHz, which is both wide enough and almost completely unused here, except for some EME usage near 1296 MHz. So the choice is easy; I have to transmit at 1.2 GHz. But DVB-T receivers won’t tune that high, given that all of the channels are at 862 MHz or below, so it’s a choice with a problem.

Still, I knew that my DVB-T dongle can physically tune up to 1700 MHz (this is also true for many other dongles, and I image also for many set-top boxes and built-in tuners in TVs). So I decided to transmit at 1.2 GHz and to try to force the dongle to tune.

I thought that it would be easier to convince the dongle to receive at 1.2 GHz on Linux than on Windows. I managed to do it on Linux and it was not hard; I still don’t know if this is possible at all on Windows, and if it’s possible how difficult it is. But the main thing for now is that it’s manageable on Linux.

Preparing for DVB-T Reception on Linux

My dongle is based on the Realtek RTL2832U demodulator chip (and on the Elonics E4000 tuner chip). I wanted to use it on a computer running Ubuntu 12.04; the Linux kernel in Ubuntu 12.04 does not support this dongle. This turned out to be a blessing in disguise, however.

Hubert Lin’s blog shows how to install the driver on Ubuntu 12.04 (and using a somewhat different procedure, on 12.10). I tried to follow the instructions but the processed failed at some point. Fortunately, Chris Merrett packaged the driver in an easier to install format called DKMS, and he explained how to install it in a comment in Hubert’s blog. I followed the instructions and everything worked just fine. A DKMS driver is installed in a source-code format and this source code is compiled for every version of the kernel that you use. This turned out to be very useful. Installing the driver is very easy:

$ sudo apt-add-repository ppa:chrisfu/rt2832u-dkms
$ sudo apt-get update
$ sudo apt-get install rtl2832u-dkms

With the driver installed, I installed an Ubuntu package called dvbt-apps, which contains a necessary channel-enumeration utility, and I was ready to try receiving the local on-the-air DVB-T transmissions.

The process starts with a utility called scan. It takes a file containing tuning information for local stations and tries to tune the dongle to them. The station information includes the center frequency, the modulation format, and a bunch of parameters that specify how the transmission is encoded. A DVB-T transmission (station) can transmit multiple channels (simultaneous programs), and scan lists all the channels that it finds within the transmission. I found a file listing the parameters for the local transmissions (at 514 and 538 MHz, transmitting the same channels), ran scan, and it found about 5 TV channels and more than 10 radio stations within the transmissions. Here is the input file to scan (for Israel):

# Initial scan config for Israel
# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
T  538000000 8MHz 2/3 NONE QAM16 8k 1/32 AUTO
T  514000000 8MHz 2/3 NONE QAM16 8k 1/32 AUTO

The output looks like this (chopped here for conciseness; the first two programs are TV and the other two are radio):


Next, I ran the vlc video viewer, providing it with the file that scan produced. I was able to view TV. I also recorded the video+audio stream of one of the channels using vlc in a format called a transport stream in order to try to transmit it later.

Tuning the Dongle to 1.2 GHz

At this point I created a copy of the scan input file and changed the center frequency to a frequency in the 1.2 GHz band. Scan failed; it could not tune the dongle to this frequency. I knew that the dongle can physically tune that high so I assumed that some piece of software was aware of the allocation of DVB-T frequencies and did not allow tuning any higher. I tried various frequencies until I realized that the dongle tunes up to 862 MHz. I searched for this number in the sources of the driver and found one C file that contained the number 3 or 4 times. It was the value for a field called frequency_max in structures that describe the capabilities of the dongle for several digital TV formats, including DVB-T.

I changed the value from 862000000 to 1700000000 and tried to get the driver to re-compile. It took me a while to figure out that the correct process is to remove the driver entirely and then to rebuild and install it.

$  sudo dkms remove -m rtl2832u/3.0.1 --all
$  sudo dkms add -m rtl2832u -v 3.0.1
$  sudo dkms build -m rtl2832u -v 3.0.1
$  sudo dkms install -m rtl2832u -v 3.0.1

Now the dongle tuned to 1.2 GHz. Scan obviously did not find any transmissions there, but I was now ready to receive my transmissions.

If somebody can figure out how to get these dongles to tune to 1.2 GHz under Windows, please let me know.

Producing the DVB-T Baseband Signal

There are several software packages on the web that produce a DVB-T baseband signal from an MPEG stream. I used a package called gbDVB written by Giuseppe Baruffa. It comes in binary format only for Windows and Linux, and it can produce (and decode) DVB-T in pretty much any format and modulation. It is fast: it works faster than real time on my desktop (with an i7 processor). I used version 3.3; the latest is 3.4, but it requires a somewhat complicated registration procedure. I did register it, but on Windows, not Linux; I plan to register on Linux and upgrade.

Another option I considered is OpenDVB by Gordon Cichon, which comes in source form and is written in Matlab. It is somewhat harder to use. I plan to try it out in the future.

Before you can use either of them, you need an MPEG (video or audio) file in a format called a transport stream. I generated several of these, always using vlc, a viewer that can also write the movie to a file in various formats. To save a transport stream, I used

vlc movie --sout=file/ts:movie.ts

I called dvbtenco (part of gbDVB) with options that told it to generate a DVB-T transmission using the same format and modulation as the local broadcasts, which I knew work with my dongle.

gbdvb/dvbtenco -i movie.ts -M 16 -m 2k -d t -l movie.log -o movie

This command generates a file called movie.bin with complex baseband samples at a sampling rate of 9.142857 M samples/s. The USRP cannot transmit at that rate (it needs a rate that divides 100 M samples/s), so I used a simple gnuradio-companion program to upsample the signal to by a 70/64 to 10 M samples/s, using a rational resampler.

Putting it all Together

That was basically it. I used a USRP utility to tx_samples_from_file to transmit the 10 M samples/s baseband file at 1.2GHz (actually near 1.3) and I called scan with an input file telling it to look for a DVB-T transmission there. Scan found my USRP transmission and produced an ouput that allowed vlc to tune and display the video I transmitted!

Actually, the video was very jumpy. I think this happened because tx_samples_from_file did not manage to read the baseband file and to send it to the USRP quickly enough. I managed to improve things a bit by converting the baseband file from a floating-point representation (8 bytes per sample) to short integers (4 bytes per sample), but it was still jumpy. Maybe the disk is not fast enough. I’ll try to transmit with a 6MHz bandwidth rather than 8 and hopefully the sampling rate can be reduced, which will shrink the rate at which the samples need to be read from the file and sent to the USRP. I need to investigate.

As I wrote above, dvbtenco runs faster than real time on my desktop, so in theory, I may be able to transmit live video with this setup. But the gnuradio resampler is very slow; maybe I can optimize it and run the whole thing live. But the first step should be to transmit a video from a file without jumps.

Another thing that is still missing is an identification of the program that is being transmitted. This information needs to be multiplexed into the transport stream. I am trying to learn how to do that.

A High-End UHF Preamp for the VHF/UHF Dongle

My experience with the DVB-T dongle has been somewhat mixed. It does receive all the signals that I’m interested in, including fairly weak satellites. However, interference often blocks reception. Most of the time the signals are blocked for short amounts of time, around a second. The blocking signals are not visible on the waterfall display, which I think means that they are not close in frequency to the signal I’m receiving. This is not surprising, given that the  bandpass filtering of the dongle is not particularly good and given that the 8-bit analog-to-digital conversion has a very limited dynamic range.

The best way to resolve this is to add a preamplifier between the antenna and the dongle. Most premaplifiers have bandpass filtering at their input, and some also have filtering at their output. A preamplifier also allows you to add a sharp bandpass filter at its output without reducing signal strength or adding significant noise.

I tried my old 145MHz preamplifier and it seemed to improve things a bit, but it’s huge. I decided to build a smaller preamplifier for UHF (430-440Mhz) and to add a sharp filter at its output, most likely an interdigital filter.

There are several good preamplifier kits available for UHF. The cheapest is made by Ramsey. It’s filtering is not very good, it uses leaded components (not ideal at UHF), and the transistor has a relatively high noise figure (they advertise it at 1dB, but the data sheet of the transistor they use, 2SC2498, specifies 2.5dB). Minikits’s preamp also uses mostly leaded components, but it has a better input filter and its 1.5dB noise figure is believable. Other kits use surface-mount devices. A kit by David Bowman has a noise figure of only 0.5dB but not much filtering (only high-pass). Gyula Nagy designed a preamp with an even lower noise figure and with sharp bandpass filtering, but he only sells the 144MHz version of it (and he only sells it with an enclosure and connectors, which makes it more expensive than other preamp kits).

I eventually decided to buy a preamp kit from Down East Microwave (DEMI). It has a low noise figure (better than 0.5dB if tuned for low noise and only 0.2dB higher if tuned for maximum gain), and filtering on both the input and output. The filtering is not very sharp (the preamp is designed to be followed by a separate bandpass filter), but there is filtering. It comes in various forms, including a PCB+components kits without an enclosure and without connectors. This form is relatively inexpensive at $25 plus shipping (for comparison, built in an enclosure with connectors, the preamp costs $75). The output filter is a diplexer, which improves stability when the preamp is followed by a sharp filter (it sends out-of-band signals to a dummy load rather than to the filter, which prevents them from being returned to the amplifier and possibly causing instability).

The kit contains a PCB, instructions, and a plastic tray with the components, almost all of which are surface-mount devices. The tray has 24 compartments for components, and a legend tells you which parts are stored in each compartment. This is essential, since many of the components have no markings at all (resistors do have markings, but capacitors and inductors do not). Surface mount components come in tapes, and the tapes are actually glued to the compartments; this helps keep the components inside the compartments until you actually need them. The glue’s bonding is weak so it’s easy to separate the tapes when you need to.

Before I started building, I needed to decide on an enclosure. I initially intended to create an enclosure from blank PCB material. But when the kit arrived, I realized that the PCB would almost fit inside the enclosure of a surplus 140MHz amplifier I have. I bought a few of them a while ago just for the enclosure and connectors. On the right you can see the enclosure (opened) and the amplifier that it contained, but with the connectors already removed. The connectors were BNC at the input and SMA at the output,and there are feedthrough capacitors for power (and for a control function that is not needed with the DEMI premap).

The DEMI preamp board was narrower than the 140MHz amplifier but about 2mm longer, so it did not fit in the enclosure. Fortunately, the 2mm at the edges did not contain any signals, just a bit of the ground plane and the input/output connections. I filed away about 1mm from each side until the board fit inside the enclosure. The input/output connections on the board are plated-through holes, so I had to remove some of the plating on the ground-plane side, so avoid shorting these connections to the enclosure. Finally, I drilled mounting holes using the original 140MHz amplifier as a template; they went just through the ground planes, not through signals on the PCB.  You can see the result below.

At this point, I was ready to solder the components. I knew I had to be very careful and not let any parts get lost or separated from its label for too long. I was as careful as I could, but I still managed to lose a 1μF tantalum capacitor. It’s actually one of the larger components, but it somehow jumped on my shirt and disappeared forever. I did search for it all over the place, but it was somehow gone. I didn’t have a replacement. It should have been on the output of a 78M05 regulator, so I checked the data sheet of the regulator and didn’t find any constraints on the capacitors that can be used, so I just replaced it with a 10μF 10v capacitor that was small enough to fit on the PCB. Afterwards I was even more careful afterwards (and didn’t lose any more components).

When I was done with the soldering, I screwed the amplifier into the enclosure, soldered the connectors, and started testing according to the instructions. You perform the initial tests with 50Ω dummy loads on the input and output. This went fine and the amplifier consumed an amount of current that the instruction says is reasonable and does not indicate oscillations, around 85mA. I then tuned it roughly with a receiver. At that point it was supposed to work with or without an antenna and load, but it did not work without an output connection (current consumption dropped to zero). I could not figure out why.

I decided to tune it more carefully at a lab. I did that at the Herzliya Science Center, with a calibrated signal generator and a spectrum analyzer. I was able to tune the amplifier, but it still behaved erratically. After a lot of troubleshooting I realized that I forgot to tighten the screws that hold the PCB to the enclosure. This pressure contact was also the ground return path for the power supply, so as long as the connection was loose, the power supply connections were unreliable. After I tightened the screws and re-tuned the amplifier for maximum gain, it started performing reliably. You can see it in the enclosure on the right.

Testing with the dongle show marked improvement in signal quality and a reduction in interference. I was able to receive all the satellites I tried, including some fairly weak ones like CO-55 and CO-57. I would like to test the dongle+preamp receiver in a full-duplex satellite contact, but I didn’t get around to this.

A High-Performance Sound-Card AX.25 Modem

My APRS RF-to-internet gateway (iGate) had been running  a sound-card modem called soundmodem by Thomas Sailer. The software modem caused various problems and I have not found a suitable replacement. Eventually, I decided to try to implement my own sound-card-based software modem. The results have been very good, in spite of the fact that I do not have much background in digital signal processing.

I’ve been using the modem for many months now in my iGate. The modem is run is a component of javAPRSsrvr, not as a separate program. It’s working reliable non-stop.

An article that I wrote for QEX explains how the modem works and how I designed and optimized it. It is also available on my university web site.