Archive for category HAM Radio
I recently got a pair of the Nuand BladeRF SDR transceivers, and I’ve got about a days worth of experience with them. Of course, first thing’s first, I had to print the BladeRF Coaster by Piranha32. This is especially so because there are a few large tantalum-looking capacitors on the bottom. Before I had this printed, I used some small machine screws with bolts and made a quick set of standoffs. The package came with a nice blue USB3 cable and a pair of SMA jumpers; I assume these would go to their transverter, which I don’t have, but they’re nice to have anyway. There aren’t any instructions in the box, but for a product like this the assumption is that the user knows what they’re getting and how to use it. This is a reasonable assumption, and I had no problem finding all the relevant documentation.
I’m an ardent mac user, and this sometimes poses a problem while using specialized hardware and applications. It wasn’t until the last few months that the recent versions of GNURadio worked through MacPorts. Luckily it does now, as does all the BladeRF software. Going from nothing to a working software environment took minutes. One thing that you have to make sure and do it download the most recent FPGA code, as you’ll have to re-load it every time you boot the BladeRF.
All software defined radios have an Achilles’ heel. If the DC offset of the I and Q baseband signals isn’t minimized a constant “tone” at zero Hz will be up-converted to whatever frequency the final spectrum is. Also, if the relative magnitude and phase of I and Q aren’t matched (and precisely 90 degrees) there will be a image of the desired signal mirrored across the up-converter frequency. The BladeRF wiki has a short article that shows how to measure the correction factors to use to minimize these effects. This article documents my attempt of deriving the correction factors for one of the two boards.
To start, I tuned the board to 450MHz. Then, I decided that a 100KHz sine would be appropriate as a baseband tone. What happens is that, in software, the 100KHz tone is generated, then it is up-converted to 450.1MHz. The spectrum below is the result of that test without any corrections applied. The spur resulting from the DC error is about 25dB down from the desired carrier, and the image is closer to 35dB down. It’s not really that great.
Playing around with the values according to the instructions, I was able to improve these results quite a bit. The DC error is now 58dB down from the carrier (ignore the marker table) and the image is almost 63dB down. This is pretty respectable. Now, there is another troubling question. What’s up with the spikes in the phase noise?
I asked on the #bladerf room on freenode, and they agree that it’s not normal. The spikes are exactly 7.8 KHz apart, so I would start looking for things that happen at that frequency. I wish I had measured how distant the largest one was from the carrier and zero. That could have been good to know.
Oh, wait, I did :). The main tone is 63KHz away from the main carrier and 37KHz away from zero. There was some speculation that it could be artifacts from the quantization of the software-generated sine wave or that the tuning algorithm could be at fault. For fun, I ran the same test without generating any sine wave at all, so all you’re seeing is a large zero tone from a constant DC offset. I do think that the quantization explanation makes sense because that would manifest as phase noise, and the spikes are centered about the modulated tone, rather than the zero-spur.
The same artifacts should still appear there if there was any kind of a problem with the power supplies of the board, for example. It seems very clean, and I’m happy with the phase noise performance of the board. You’re probably seeing the phase noise of the rigol in this plot rather than the BladeRF.
In all, so far, I’m very happy this these. I’m very excited about their potential.
I originally starting working on this device about the same time as the Sky65116 power amplifier. The idea was that I should put a PA on the transmitter, and a low-noise amplifier (LNA) on the receiver. In this post, I’ll discuss the why and how of LNAs, as well as the construction and evaluation of the Sky65047 400MHz to 3GHz LNA board shown below. I’ve had these boards sitting on the bench for quite some time, and I finally got all the random-value passives that I needed gathered and the equipment necessary to measure it.
Low noise amplifier — why?
The goal of any receiver is to increase the strength of a desired signal from the antenna to a useful level. Often, the point is driving a speaker. Any receiver is simply an amplifier if we ignore selectivity, and some receivers do this to an extent.
I’ll discuss AM radio as an example because there’s a more direct connection between the input radio power level and the audio power level. Let’s assume that the station we’re listening to is producing -70dBm of power at your antenna. It’s irrelevant for the discussion, but for the purposes of illustration, and assuming a 50 Ohm antenna system, that means that the peak-peak voltage is less than 200 uV, or .0002 volts! Then, let’s assume that we want 1 watt out of a speaker, or 30dBm, meaning that the receiver needs 100 dB of total system gain.
While I’m sure there are amplifiers that are capable of this much gain, it’s unlikely that it’s going to be appropriate for this application. It is much more common to have a chain of amplification. Even though I said I was ignoring selectivity, we still want to amplify only the desired signal. It is the goal of our amplification chain, therefore, to preferentially amplify the signal and not the noise. The ability to do this is quantified as the Noise Figure or Noise Factor (NF; these are equivalent, but noise figure is in dB) of a device.
The total noise figure of a receiver is dominated by the first amplifier in the chain. This is the reason that we develop specialized now-noise amplifiers. If you spend the time, energy and money on a LNA it will pay off by lowering the noise figure of the entire receiver. On the other hand, if you take a crappy amp and put it in front of a good receiver, you’re likely to reduce its performance. This is formalized by Friis’ equation:
The F terms are the noise figure of the subscripted amplifier stage, and the G term is the gain of the stage. You can see the the noise figure of any given stage is divided by the product of the gain of every prior stage. Therefore, a good LNA has low noise, and high gain. A simpler way to express this relationship, especially if you’re considering adding an LNA to an existing receiver is this other version:
With this version, if you have the LNA specification for the receiver you’re working with, you can see if your proposed addition is worthwhile. I had hoped to talk about specific numbers and bring up the MRF49XA receiver that I wrote about here and here, and a few of my commercial ham transceivers, but they only seem to specify sensitivity. I’ve seen someone off-handedly convert sensitivity to noise figure, but I can’t find the equation anywhere. If anyone knows how to do this, let me know. The point remains that you should never put an amplifier in front of a receiver unless its noise figure is better than the receiver. You should be able to measure the success of your experiment by comparing the SNR before and after the addition. If it deteriorates, then the additional amplifier is increasing the noise more than the signal of interest.
Low noise amplifier — how?
I’m not going to explain how to make a low noise amplifier, at least not at any substantial level, because I don’t know. I’m not actually an electrical engineer, and I’m certainly not designing silicon. If I want an LNA, I’m going to digi-key like every other mortal. However, I will discuss how I selected this chip, designed the PCB and evaluated its performance.
I begin any project like this in basically the same way: I go to Digi-key and start parametrically searching. In this case I’m looking for a 400MHz amplifier, so I selected all the devices that were in stock, in small quantities, that cover the frequency I want. That left me with on 13 pages of results! Ok, next, I decide that I’m only interested in amplifiers with a noise figure less than 1dB. Good, now we’re down to 15 results. I can actually think about these choices now. If I’m being honest, I sort by price next. If I wanted to do the best job, I’d sort by gain. Sorting by gain, the top two choices are $12 and $20 each, with gain values of 24 and 22 dB respectively. In contrast, the one I picked is $0.56 and 15.7 dB of gain. I like my way better. 🙂 I should say that if you need the best LNA, it don’t matter how much it costs, and in this case, you’re probably not shopping at digi-key.
Of course, before I hit “buy,” I read the data sheet. First and foremost, I’m looking for a relatively simply evaluation circuit. I’m the RF engineering equivalent of a script kiddie, and I’m not ashamed to admit it. It’s a bonus if they provide matching circuits or component values for my frequency. Luckily, the Sky65047 has both. There is some weirdness, however, with the 450MHz version in the data sheet and application note.
There is a gotcha lurking in that data sheet, though. The specifications presented on digi-key aren’t for 400 MHz. The NF at that frequency is 1.2; a bit worse than I had hoped, but the gain increases to 20 dB. Normally, the fact that this is a DFN (Dual, Flat No-Lead) package with very fine-pitch leads would mean that I would just skip over it. I’ve developed the skills to work with these packages lately, and I’ve had good results, so it wasn’t a deal breaker. A side-benefit is that it goes up to 3 GHz. I’ve been thinking about building a HRPT (High-resoultion picture taking, for weather satellites) receiver, which is right-around 1700MHz. There is a matching circuit for both 450MHz and 1700MHz in an app note, so I went for it.
The next step in the process was designing a PCB. The topology used for each of the evaluation circuits is slightly different, so I tried my best to design a board that would work with all of them. I think I mostly succeeded, at least for 400 and 1700 MHz.
There are only a few point I’d like to make about the PCB. First, the most important thing about RF design is the minimization of parasitics. It’s not shown in the above image, but I like to keep the solder mask off of the RF portion of the board. It might be a bit ridiculous in this application, but the idea is that it would change the permitivity, and therefore, the calculations for the characteristic impedance. It’s ridiculous in this case because those traces are way too short to be striplines, and with traces this short, the impedance doesn’t really matter. Also, notice that I have the ground vias practically on top of the SMD pads. These are to minimize the length and inductance of current return path. There are no breaks in the ground plane under the RF section of the circuit; the only trace on the bottom layer only crosses a DC trace, and is very short. Finally: tons of vias!
Construction and evaluation
It seems with RF projects that you get the great pleasure of ordering a stupid number of weird-ass values of capacitors and inductors. It took quite a while to collect all the pieces that I needed, I only did so about a week ago. I was impatient and started soldering some parts onto the boards months ago, and forgot what I was doing in the mean time. This becomes obvious later.
Something strange is happening in this example circuit. The input matching network is completely non-sensical. First of all, L1 is specified to have 4.3pF. Nope. Second, C3 is shown as an inductor and has 30nH. Hmmm, also no. I emailed Skyworks to ask for clarification, and they never got back to me. I had to just guess for what these are really supposed to be. I started by assuming that L1 is actually an inductor of 4.3nH (pH inductors can’t really be bought), and that C3 is a capacitor of 30nF. Below is the same board as in the image is from the head of the post, built with the assumptions I just mentioned. Play spot the changes! 🙂
Now that we have a circuit, it’s time to determine whether it’s performing to expectation. Because the noise figure is this amplifiers reason for being, lets first discuss the concepts of measuring it. There are three primary methods used to perform this measurement, which are summarized nicely by this Maxim application note:
- Noise figure analyzer such as the Agilent N8973A. The good news is that this method is the simplest and best for measuring very low noise figures; the bad news is that it’s almost $40,000.
- The gain method: This method is the easiest to perform with more commonly available equipment. The downside is that it’s very difficult to measure small noise figures. This will be discussed in great detail later.
- The Y-Factor method: Requires an excess noise ratio (ENR) source in conjunction with a spectrum analyzer. This is much more affordable than a noise figure analyzer, but these still go for around $1000 on ebay. There are some ~$300 ones, but they are of unknown quality.
You should know that I’m an insufferable cheapskate, so the noise figure analyzer and Y-factor method are non-starters. Because we’re stuck with the gain method, but what kind of conclusions can we draw given the equipment on hand?
The definition of noise factor is the ratio of total output noise power divided by the output noise that is contributed by the input assuming a perfect noise-free amplifier. We can measure the total output noise power within limits, and we can make assumptions about the input noise because we control it.
We can use a 50 Ohm terminator at room temperature for our noise source. The noise power can be derived from theory and should be equal to -174dBm. A perfect amplifier would amplify this noise without adding any of its own, and the noise power would increase linearly with gain. This means that to get noise figure (NF) all we have to do is a little accounting: NF = P + 174 – G, where P is the output noise power, and G is the gain; all of these quantities are in dBm.
The gain method equation can also tell us what the minimum gain and noise figure we can measure on a spectrum analyzer when it is limited by its noise floor. Working the problem backward, let’s say that my analyzer has a displayed average noise level (DANL) of -154 dBm at 434 MHz with 10 Hz RBW and 3 Hz VBW. At that power level, the noise figure calculation would be NF = -154 + 174 – G = 20 – G. This means that a perfect amplifier (NF = 0) with 20dB of gain wouldn’t change the apparent noise level of the analyzer at all. It also means that we aren’t capable of measuring the noise figure of any amplifier where G + NF < 20. Unfortunately, that also means that I should only see 1.2dB of difference in noise for this amplifier. This is reasonably close to what I observed. In the above image, the pink trace is with the amplifier connected and the yellow trace is with the spectrum analyzer input terminated. There’s technically a little more than the 1.2 dB of additional noise, but you can see that the variation in the noise floor is more than that, so there’s basically zero confidence in the measurement. At least I know that it isn’t a complete disaster, because that would show up. Also, note that, for now, I’m making assumptions about the gain using the data sheet values.
Remember that the noise figure calculations depend on knowing the gain value for the amplifier. I had used the data-sheet values of 20dB in the above example. When it came to actually measuring the gain, things got weird. There is where my subtle lies come apart. When I recorded this video I had forgotten about the assumptions I made in the construction section. Remember that I said this project sat on the shelf for a while? While writing up this post I rediscovered those problems. Now things make are starting to make a lot more sense. My conclusions in the video aren’t really accurate. I was right in that there was a matching problem in the circuit. I was able to later discover that the “ruler effect” only affected in the input section.
Not content to assume that this is the best possible performance; I also tried replacing “L1” with a capacitor. I figured that it might be a capacitor because 4.3 pH isn’t really an inductor value, you can’t even buy them that small at digi-key. I had a 4.7 pF cap handy, so I tried it to see what happens. Gain improved again from around 17 to almost 20 dB, and the shape of the trace in low frequencies improved.
Unfortunately, the current draw never really changed from the ~7.5mA that I was seeing in the video. I figured that it would be prudent to re-measure the noise figure with the now higher gain.
Now, the results from the gain method are clearer, though still not that meaningful. At this point, it’s just shy of 5dB difference. The math would indicate that the NF is around 4.59 dB, but confidence in this number is still very low. If it were true, it isn’t even close to data sheet performance.
Input return loss
The last quantity I’d like to measure is input return loss. This is, quite simply, the amount of signal applied to the input that is absorbed by the amplifier. As this number gets larger, it means that less signal is reflected back toward the source, and that’s a good thing.
A common way to perform this measurement is through a directional coupler (DC). I’ll discuss this more in a later post, but briefly, a DC has three or four ports. A three-port DC has an input, coupled, and output port, a four-port DC has coupled ports for forward and reverse coupled ports. A perfect DC places some of the power from the input and none of the power from the output onto the forward coupled port. If you hook it up to the spectrum analyzer “backward,” you can sample the energy reflected by the device under test (DUT).
I apologize for the crudity of the above diagram, but I just wanted to show how you’d hook-up a directional coupler to measure input return loss (or reflections). I’m not so familiar with the schematic diagram for a directional coupler, but I assume that the arrows indicate the direction of coupling between the ports. This is a four-port DC, so it’s a little different than what I have. In the above example the tracking generator of the spectrum analyzer is represented by the AC power source. The majority of the forward power through the coupler is passed directly through to the DUT, and a small fraction is absorbed by the 50 Ohm load. The power reflected by the DUT is mostly returned to the tracking generator, but a fraction of it is sent to the spectrum analyzer input. Ideally, none of the forward power ends up on the return coupled port. This measure is called either isolation or directivity.
In the above plot, the magenta line is the returned power when the DUT is an open connection, and represents the maximum returned power (100 percent reflection or 0 dB input return loss). The yellow line is the return loss from a 50 ohm terminator, and shows the directivity of my DC. This is what a perfect termination would look like. The teal trace is the reflected power from the LNA. You would subtract the teal trace from the magenta to find the input return loss.
In our case, the best performance is at 382 MHz, with 16 dBm and worst (in this plot) is at 334 MHz with about 10 dB input return loss. This is near enough to the data sheet specifications (14 dB) for my needs.
So, I’m really shocked that this ended up being so freaking long. I feel like I had a lot of ground to cover, and to do it any justice I had to take my time. If you’re still reading at this point, I’m humbled. I sincerely hope it was worth it. If you have any questions, please don’t hesitate to comment. I try really hard to contribute meaningfully through the comments.
It has been a while since I played with the Sky65116 amplifier boards that I built and wrote about. Since getting my own spectrum analyzer, I’m now able to make much better absolute measurements. The DSA-815-TG analyzer is specified as having 1dB of uncertainly across the span, and the SA that I have at work is essentially uncalibrated.
Not only do I now know that the absolute power out of the video transmitter at the fundamental frequency is about 5.5dBm, I can also see the first and second harmonics. I don’t know why I didn’t see them with the other analyzer, but they are disturbingly large. I believe the FCC requirement is that these harmonics should be more than 40dB below the fundamental. By this criterion, the transmitter should not even be sold in the US.
The SKY65116 amplifier has close to 36dB of gain, and a 1dB compression point of 32.5dB. The 1dB compression point is specified as the output power level at which the gain is reduced by 1dB. The easiest way to show this is with the graph from the Sky65116 data sheet, shown below. You can see that as the output power begins to approach 32dB gain drops quickly. The goal is to not force the amplifier to operate in this region. If you do, you’re likely introduce harmonic distortion and other nasty nonlinear effects (i.e. intermodulation products).
So, knowing that the output is +5.5dBm, and we want about +30dBm out of an amplifier with a gain of 36dB, we need to introduce 11.5dB of attenuation (30dBm – 36dB – 5.5dBm = -11.5dB) between the transmitter and the amplifier, at a minimum. It’s easy to make 14dB attenuators with standard value resistors (4×150 ohm and 1×120). I’ve been playing around with QUCS a lot lately, so I’ve provided a model for the attenuator. It’s just about the most boring S-parameter model you’ll ever see… Perfectly flat response at -14dB, but that’s what we’re after.
A while back, I had a bunch of these simple 5-pole filter PCBs made up. I just left them blank until I needed them, and I made two of them into 14dB attenuators using the circuit above. I had two extra poles, so I filled one with a 0 ohm resistor and the other with a 1uF DC-blocking capacitor. The capacitor reduces the low frequency performance, but only less than about 1.5MHz. It’s worthy the trade-off in my mind.
I went ahead and covered one of the attenuators with copper sheet just to make it more of a completed package. I’m sure I’ll need to use it many times in the future. I left the other open so I could unsolder it and make it something else if needed. An interesting thing happened when I installed the cover. The small ripple in the attenuation (around 500 MHz, see below) occurred only after I installed the cover. I assume this is due to parasitic capacitance between the components and the copper covering. It’s still only about 1dB of ripple, so I’m satisfied with it.
Anyway, back to the amplifier. I’ve now got about -8.5dBm going into the amp ( +5.5dBm – 14dB), so with its 36dB of gain, I should expect to see +27.5dBm out of the amp. That’s getting very close to the maximum input power on my SA (+30dBm). It’s always better to be safe with these things, so I used the other 14dB attenuator between the amp and the SA. Now, I should expect to see +13.5dBm on the input. I maxed-out the input attenuation on the analyzer (another 30dB) and gave it a shot. Note that the internal attenuation is calibrated out of what’s shown on the display, and I told the SA about the other 14dB of attenuation, so the power values shown on the display are referencing the amplifier’s output.
In the above image, you can see that we’re getting 27.5dBm out of the amplifier! I love it when a plan comes together! This is the value I calculated, right on the nose. I promise that I didn’t work the math backward! 🙂 Again, it’s so painfully obvious that the transmitter is AM, rather than the VSB signal that it should be.
Now, just for fun, let’s dive back into the video signal coming out of the transmitter. In the image above, I’ve put some markers on the various carriers present in the signal. The luma carrier is in the center at 433.85MHz, which is where we expect it to be. Marker 2 is at 437.45MHz, which is 3.6 (let’s call it 3.57) MHz away, matching exactly where the chroma carrier is supposed to be. There’s no audio carrier, which isn’t a surprise because there’s no audio, though I wouldn’t be surprised to see the carrier. Marker 3 is 19 MHz away; I have no idea what this is or why it’s there. It’s not supposed to be. Same with marker 4. Oh, well… that’s what you get with a shitty transmitter.
Now, what about those pesky harmonics? The Sky65116 is a 390-500 MHz amplifier, so my hope is that the reduced gain by the first harmonic will attenuate the harmonics enough to bring them into compliance. The graph above is the gain v. frequency graph from the data sheet. It’s neither encouraging nor discouraging. It’s difficult to infer what’s going to happen at 800 MHz when the graph stops at 500 MHz. In the image below, it appears that I lucked out. The first harmonic is 42dB down from the fundamental. If I were selling a product, there’s no way I would send this out for compliance testing. It would just be too risky, I’m not that confident in my measurements. By my math, it would cost less than $2 in parts (single unit quantities) to make a decent low pass filter. That’s the right thing to do. When I modeled it (in QUCS, again), I calculated that the harmonics would be within compliance even without the rolloff of the amplifier. With the rolloff, the harmonics would be well below the noise floor.
I’ve had a ton of fun redoing this experiment with my new spectrum analyzer. I’m going to write lots more about the analyzer in the future, and I’m really looking forward to it. Coming soon is an exploration of the skyworks low noise amplifiers. Between these two products, I expect to have a solid video link over 1000 feet or so.
Relating to the rtl-sdr work that has been done, the E4000 tuner was the standard barer for a long time. However, Elonics has discontinued this part, and it’s becoming difficult to find. The popularity, and scarcity, of this part has encouraged sellers to offer products claiming to be built with the E4000 and are not. Luckily, someone discovered the code for using the R820t tuner in the Linux V4Lin drivers. They ported this code into the rtl-sdr source maintained by osmocom.
I just finished porting their code into Cocoa Radio. Now, it’s possible to use my software with both the E4000 and the R820t. On startup, Cocoa Radio will automatically detect which tuner you’re using and perform the appropriate actions.
It did take a little while to finish this work, and there are several more tuners out there. If you are desperate for support of a specific tuner, you can donate a device for the cause and I’ll try to support it. By the way, Softshell uses the same code for tuning as Cocoa Radio, if you recompile softshell, it should include this new code.
Well, I’m back from vacation and I want to tell everyone about a new version of Cocoa Radio (my application for demodulating radio signals using the rtlsdr dongles on mac os x, written in Objective C). This version seems to be running really well. I’ve set the sample rate to 1024000 samples per second for the moment (though this value can be changed in the code), and at this rate everything seems really stable. Please give it a try and create issues at the github issues page if you find any problems. I should say that I’m a little tired of working on it, so unless there are major issues I’ll be working on other projects for a while. I encourage others to take a look at the code if they’re interested in SDR. It’s not as scary as it looks!
Also, the sliders are a little buggy (especially the bandwidth ones). Move the a little bit once the app starts up and they’ll work correctly.
Finally, I don’t have any support for AM (amplitude modulation) yet. It’s an easy modulation type, and I may add it soon.