Forum Replies Created
- AuthorPosts
kaiserParticipantJust for reference it worked flawlessly when we used the I/Q recorder utility.
kaiserParticipantThanks. Super helpful as always Andrew.
kaiserParticipantThanks. We’ll investigate the network and SSD performance a bit. I don’t remember seeing an issue shown on the display, and we were looking for one.
The SM200C and VSG are on different computers, and the recordings are 20 seconds long. We are using the Streaming mode on the VSG60, and we aren’t doing much else with the computer, and that’s also why we tried bumping it down to 20Ms/s and 5MS/s playbacks, and we kept seeing the data error bursts (but on a correspondingly longer timeframe before the bit errors; so like at the same point in the file, which is why we’re goin to investigate the recording a bit more).
We were setting the SM200C into zero span mode, and then using the I/Q recorder thing on the bottom since that also produces an xml file with the recording details. Do the error labels show there? We can also try from the I/Q recorder dialog thing and see if its different; we just don’t get the XML file with the details. Is that by design?
kaiserParticipantThanks Justin. Great and prompt answers, like always.
That latency looks like it’ll probably be in the noise to me, so we’ll go ahead and plan on trying out the C model.
kaiserParticipantThanks Justin, I appreciate the info. Glad to hear that it shouldn’t generally be an issue (we usually have a bit of extra processing oomph, and we’ll just make sure we’re good moving forward too).
Can you share typical expected latencies (and what the difference is from the B to C)? I’m very latency sensitive, so am wanting to test some new stuff on the C and see if I can tighten some loops if it’s usually a bit better.
kaiserParticipant- This reply was modified 3 years, 2 months ago by
kaiser.
Thanks Justin. I had tried all of those things before posting with no joy. I tried the 12.0 version, the .28 and the .26 version of their drivers, uninstalling, re-installing, etc with no success. Using the CDM uninstaller and more.
It’s a RS-422 chip for the VN-310, and I wonder if there’s something special there or not.
I *swear* that I had all 3 working together about 4-5 weeks ago, and I’m not sure what broke it — a Windows update, or something else, or if I just fooling myself about all 3 working at once. We don’t even need to pull up Spike, just plugging a single SM200B into power, is an immediate stoppage on the VN-310….like right as Windows enumerates the drivers, it goes bye-bye. I’ll be watching data stream in the terminal, and then it will stop and just send NULL and BREAK repeatedly. Unplug the SM200B and instantaneously data starts flowing again.
We bought some converters so that we can try and shove it in a resident serial port on the computer and see if it works that way.
For my own reference/googling/spec sheet hunting, what does the SM200B use for it’s USB chip — is there some serial<->USB conversion or something else going on on the front end?
Thanks!
kaiserParticipantThanks Andrew. I had thought we might have to do a handoff, and that’s like plan D. I’m still working through A-C, and seeing if there are any sub-plans to implement.
The times you gave for reconfiguration and super helpful and will help me put together some trade-space regarding how agile (I’ll toss in some margin) we’d be able to do different schemes.
kaiserParticipant- This reply was modified 3 years, 7 months ago by
kaiser.
Looping pins 3 and 11 together did bump the output signal to 3.3V.
It was crazy — I have a system that’s supposed to trigger at 1.4V, and I could see the ~1.6V SH level going into it, and it just wasn’t triggering. If I slowed it down, it would sometimes trigger. Very odd. I hooked up a function generator and exactly matched the SH output signal, and it triggered perfectly!
So, something about the pull down and series resistor or amount of current available to source coupled with my digital IO card was causing more voltage loss inside the card. The bump to 3.3V in solved it all.
kaiserParticipantThanks Justin, we’ve had this going and working for a while. We’ve been playing with sensitivity some, and we’re only triggered our device by the 15mV 🙂
If I wanted to up the drive voltage out, do I supply a new Vdd in? Is there some circuitry already setting that somewhere? It would seem so since there’s obviously some drive voltage out already 🙂
kaiserParticipantThanks Justin. That was my worry 🙂
It makes things quite a bit more complicated code-wise on my end, but I think still manageable…It would be nice if I could queue and get everything ready, then trigger both to start the queued sweeps electrically, rather than via software. I could stop every now and then for a re-alignment after drift due to them just going full bore.
My bandwidth I’m monitoring is ~200MHz, so unfortunately streaming options are out for me…
kaiserParticipantUpon further investigation, you can change the sm_api.cs to just be like:
[DllImport("sm_api", CallingConvention = CallingConvention.Cdecl)] public static extern SmStatus smGetDeviceList(int[] serials, ref int deviceCount); [DllImport("sm_api", CallingConvention = CallingConvention.Cdecl)]
Then if you’re on Linux, it looks for sm_api.so, libsm_api.so and on windows it looks for sm_api.dll
Nice little benefit for interoperability. If you need to specify x64, x64 and other arch’s, you’ll probably need to SetDllDirectory or LoadLibrary with a dynamically added name, or a custom build step to rename the proper dll and put it with the assembly. DllImport only can do so much matching.
kaiserParticipantSo, have you tried a free-field measurement yet (aka not in the chamber)?
Antenna test is intricate. It’s hard to truly say what is or is not the problem here because there can be dozens of things that cause something like this, or it could really just be that.
Just looking at it, given the frequencies you’re talking about, if an engineer came to me asking about this and what to do next. I’d suggest a free-field measurement. In general, my comments would be that you’re testing at a low frequency (250MHz) has a ~4′ wavelength. In order for the fields to enter into the antenna, you’re going to want other things (walls, absorber, etc) at least that far away from it unless you’ve specifically verified the test setup, that you have absorber behind the antenna to prevent reflections, but far enough away to not artificially couple and affect the antenna. There are a lot of things much closer than that at the frequencies your talking about. Also, the chamber could also end up acting more like a resonant cavity than a chamber depending upon size and exact geometry. Again, maybe not a problem, but could be. Also, have you ran S11 on the antennas post install? Are they being detuned, or a reflection coefficient issue created during install? And so on.
The bottom line is that from the pictures, given the issue that you’re seeing, you could spend days/weeks/months tinkering with the test setup and never hit a definitive conclusion on the issue, as there are potentially many, and they could interact in complex ways. So, I’d tell my engineer to check S11 an as-installed items, and check it in various chamber configurations. S11 open-air vs chamber should be the same; if substantially different, something is up.
Then separate out the test chamber from the measurement, and then add pieces back in. Go find some open space somewhere, and just run a real quick simple test. Collect that data, and then start introducing your test setup piece by piece, verifying that you’re good every step as you do so. You’ve already half did that with the test from a certified house, but it’s just hard to truly say you’re replicating or there’s an antenna problem, etc when all we really have with these exact items is a somewhat problematic test chamber setup.
kaiserParticipant[StructLayout(LayoutKind.Sequential)]
public struct SmGPIOStep
{public double freq;
public Byte mask; // gpio bitspublic SmGPIOStep(double f, Byte m)
{
this.freq = f;
this.mask = m;
}
}[DllImport(“sm_api.dll”, CallingConvention = CallingConvention.Cdecl)]
public static extern SmStatus smSetGPIOSweep(int device,[In, Out]SmGPIOStep[] steps, int stepCount);I just downloaded the latest API, and was running it against some of my code. I had to edit the sm_api.cs again to add this in, so that I could set up GPIO Sweeps from C#. It seems to work great again. This is the 3rd project where I’ve had to make this edit, as suggested here. Is there any reason why this bugfix hasn’t been included in the sm_api.cs file yet?
kaiserParticipant- This reply was modified 4 years, 5 months ago by
kaiser.
kaiser April 26, 2019 at 8:50 pm in reply to: BB60C, EMC measurements:How to lower the noise floor of my setup ?
Yea, I understand where you’re at regarding the noise floor. The thing is that you’re just continually bouncing waves in the chamber, which will build up (you’re in a microwave oven) and increase the noise floor.
Think of the difference in background noise in a small library or church that’s all tile, granite and glass. You can hear everyone doing everything, and there’s a small “din” as all the sound bounces around with nowhere to go. You’re noise floor is higher. Take that same building with the same people, hang some tapestries, put that carpet down and it will be tens of dB quieter and without that “din”. You don’t need to upgrade the whole chamber, but some basic foam like I said can help a lot.
For the LNA, you don’t need anything fancy. I don’t know your frequency range and necessary specs, but we typically would use something like this, maybe even two of them depending upon line loss and the gain budget:
Put it as close to the receiving antenna as you can (right on the connector if possible), so it drives the signal down the cable and into the BB60. This should increase your SNR.
If you’re already near max input power level, the LNA could cause some issues there. You may want to toss a filter in in front of the LNA to knock down whatever else is causing the issue. But some red warning light in my head is going off because what’s being described isn’t totally matching with what I’ve seen in the field. The BB60C should have more than enough dynamic range for nearly any test. If you’re driving it near IF overload, but you’re still having sensitivity problems as evidenced by the attenuator test, then it feels like something else is going on. Have you checked for other interfering signals, zooming way out on the Spec An? Maybe your chamber isn’t as tight as you thought, or there’s some injection leakage. Is your test equipment *outside* the chamber, and just the antennas inside? Is the chamber appropriately sized for your lower frequencies (too small and it will act more like a waveguide)? Or maybe the chamber is just bouncing the signals around too much and you’re getting to much of that echo bouncing around nailing you. Have you tried it outside the chamber with the power tuned down some?
A box of anechoic foam (4 pieces) isn’t too expensive, and clever placing of it can help a lot. We don’t always use a chamber (in fact we often don’t), like I said slap a couple of pieces on plywood and make something that looks like an open box laid sideways that the antenna fits in and you’ll knock out the vast majority of interference. Add in a height differential or a piece of foam at the halfway point on the ground, and you’re pretty good to go.
So, try the LNA, that will definitely give you more sensitivity for better measurements. But my guess is that there is another gremlin or two out there that you’ll need to slay to get good results. It probably will be something you would never have thought of. Keep at it, RF test is hard!
edit: You also could always have a bad device; but that’s one of the gremlins to slay that I was talking about. Get some of the other stuff figured out, and see where it leads you.
Bypassing open air and just connecting Tx (or an appropriate surrogate) to Rx with an appropriately large attenuator (start with lots for safety, then dial it back) should give you the best signal characteristics and can help determine if you have a bad device or not. Could also be a bad Tx that’s putting out broadband noise also… Then you can also add in components walking the chain to see where things change. And antenna / atmosphere is a component in your link budget, so eventually you add that back in also 🙂
kaiserParticipant- This reply was modified 4 years, 5 months ago by
kaiser.
Thanks Andrew. I’ll play with it once we order the SM200’s since it’s not currently a pressing issue for us. Just exploring potential risks.
Our processing is also in other threads, and we’re seeing pretty low utilization compared to what we expected so we might be ok. I can write a simple program to check that it’s working or not, but it’s always useful to make sure that you’ve set the right permissions on the actual final executable process 🙂
I updated our current script to use #1 above, set the process to -10 nice and was able to execute it without having to sudo. htop showed it at -10 nice level, and it did seem to get first priority over CPU resources. Used -20 (realtime, aka all the CPU) and it did consume all of the CPU. So it should be easy to test once I get to that point.
But reading more about it, niceness probably isn’t going to work.
The easiest way would be to allow your application to run as root by editing the sudoers file to allow it without password. But then you’re giving all root capabilities to the .exe, which if altered could result in complete pwnage of the system.
Next easiest woul be to allow access to a command, like set_rlimit
or chrt or setcap() via the sudoers file. That should be simple and safe, but I’m not in a place to test it right now. Linux just has so many darn ways to skin a cat, it can be hard to figure out which one is the best.
kaiserParticipantkaiser April 25, 2019 at 12:16 pm in reply to: BB60C, EMC measurements:How to lower the noise floor of my setup ?
My guess would be a sensitivity drop. The noise figure of the BB60C is pretty high, and unless you have a LNA before it, you can lose a good amount of SNR that way.
We had a user using the BB60C for test, and saw the 20dB issue. Since they weren’t setting the noise figure of the test using an LNA, the noise floor of the BB60C was determining sensitivity, and it was fairly bad. Then when they changed the Ref level setting, which controls the attenuator, they kicked in 20dB of attenuation up front, it naturally increased the noise floor by 20dB, and they came to me with this exact problem that you’re posing here.
We tossed in a cheapo LNA in front before the BB60C, and it all worked out nominally regardless of BB60C setup.
A good check for monitoring ANY signal is to take your end measurement device, and kick in 10dB or more of attenuation. With spectrum analyzers you can do that by either manually setting the attenuation, or adjust the ref level to make it change the attenuator. Other devices, you put a 10dB pad in front. If the SNR measured changes at all, then you have a bad setup and need to stick more amplification in somewhere to compensate for test losses.
edit: btw, it’s not an anechoic chamber without foam. It’s a faraday cage. It’s the anechoic foam that makes it an anechoic chamber. An anechoic chamber without absorber on the walls (aka a Faraday cage) is typically worse than just doing it in the open unless you’re time-gating to ensure you’re not getting any reflections. I don’t doubt that small changes in the geometry of anything in the chamber can result in 20dB swings due to standing wave interference patterns. You’re building a mode stirring chamber without stirring the modes or the fancy math to back out performance parameters. I understand that you’re trying to shield yourself from external interfering signals, but you need some absorber in there otherwise you’re just in a big echo chamber.
You’re in essentially the worst environment for testing anything that’s not a pulsed, low duty cycle waveform. Get some absorber, mount it to some plywood and build a half-box around your antenna. It’s cheap, easy, and will dramatically improve test repeatability.
kaiserParticipant- This reply was modified 4 years, 5 months ago by
kaiser.
Thanks Andrew. I’m running through what you mentioned in the Appendix of the latest API and it’s all making sense.
However, my customer’s policy is that we can’t run processes on our delivered hardware as root. Too much of a security concern there; they want scoped permissions. So I gotta get a way around that (or just use Windows, which is fine, they just prefer Linux). I can see a couple of potential ways to script this without having to run as root. Can you let me know what you think and/or test a couple of these options?
1. Add the nice command to thesudoers file with NOPASSWD. I’ve already done this for system shutdown / restart so that my application (user) can run the command to shutdown the system while not being root. Would adding the “nice” command to not require a password, and then running my application with something like a nice level of -20 (normally requires root, max priority level) result in effectively the same performance as running while root?
2. Adjust the limits.conf file and allow the user to launch applications with a higher than typical priority. Would be very similar to #1 I think, but would I think allow the pthread to get it directly without having to alter how you run the program.
3. Launch a setcap() with root during startup to allow the process itself to run at higher priority (might run into issues where just the main process / thread has high priority, but spawned processes or threads don’t? Haven’t ever used this capability so I’m not sure of any pitfalls).
Thoughts?
kaiserParticipant- This reply was modified 4 years, 5 months ago by
kaiser.
Great Andrew, thanks for the useful and prompt response, like always 🙂
My mechanical guy is wondering if you have a model? If not he can model one up in SolidWorks.
kaiserParticipantThat would be a pretty neat feature. If added, I’d like to also be able to show the same frequency if the scan rate is faster than the update rate. Like if you’re getting 5 sweeps per Spike update, being able to display all five stacked like this would be nice for picking up some detailed waveform characteristics and timing without having to write custom software.
But that likely make implementing this feature harder 🙂
kaiserParticipant- This reply was modified 4 years, 6 months ago by
kaiser.
To pick up this thread some Andrew, I’m currently running into something that may or may not be an issue.
For example, if I set GPIOs like this:
int gpiosteps = 2;
SmGPIOStep Steps[gpiosteps];Steps[0].freq = 2.40e9;
Steps[0].mask = 0x00;
Steps[1].freq = 2.47e9;
Steps[1].mask = 0x0F;and look at it on the O-Scope, I get the exact same pulse as if I set something like this:
int gpiosteps = 2;
SmGPIOStep Steps[gpiosteps];Steps[0].freq = 2.40e9;
Steps[0].mask = 0x00;
Steps[1].freq = 2.49e9;
Steps[1].mask = 0x0F;With the frequency of the second step 20MHz further down the line.
So, my concern is when the GPIO goes low, what frequency is it actually going low at? Is it 2.4GHz, or that plus/minus 40MHz? 60MHz? 160MHz?
Like I said, I’m triggering external test equipment, and in this example Step2, when the GPIO goes high, it causes an interrupt in our microcontroller that goes and sets up the next piece of equipment. We’ve gotten the timing such that that setup is done and complete before the GPIO waveform goes low, but not by much.
But we know that it going low isn’t happening *exactly* at 2.4GHz, and so we might be making our timing…or we might not.
So, I understand that figuring out where those GPIO transitions ARE happening is tough; but I really do need to know. I can do complex things, or if it’s just a one-off where you can just tell me where it’s happening based upon my sweep parameters, that’d be great. If I need to write 500 lines of code to figure it out, great also. If I request certain frequencies, and the SM200A comes back to me with what it’s actually going to do, that would work also. But I do need to know…
This is literally our last hurdle to fielding this capability, and I’d really like to get it figured out, shipped and move onto our next fun project 🙂
Thanks!
- This reply was modified 3 years, 2 months ago by
- AuthorPosts