This is a masterstroke of engineering efficiency that elegantly strips away data bloat to make remote operation truly viable. It proves that real technical brilliance isn't about having more bandwidth, but about needing less.
Deep Dive
Prerequisite Knowledge
- No data available.
Where to go next
- No data available.
Deep Dive
Thetis - TCI Compressed StreamsAdded:
Okay, just a quick video on something that I've been working on recently. It started life about 3 months or so ago um when I started building a uh analyzer manager class in Thetus which never got used for anything um cuz I always had this planned.
>> [sighs] >> And it relates to remote operation with TCI.
So, this is a total T- This is a TCI client.
Totally separate to Thetus. There's no audio coming out of Thetus. There's no CM as or there's no vac.
And we are looking at the IQ there.
I've got the audio turned off right now.
So, we're looking at the IQ stream coming out through the TCI server and we're looking at silly megabits, 25 megabits. So, not ideal for remote operation at all.
And in fact, if we change the uh sample rate the hardware sample rate, you'll see that it drops down. If we increase to 384, then it climbs up there.
And if the TCI protocol from Expert Electronics allowed you to go above that, then it would be even higher and I might add that support in at some point, but at the moment IQ's limited to 384.
So, as you can see, that's crazy high megabit, something that we probably don't want uh when we're operating portable or remote.
So, I added a new stream type into the Thetus TCI server called display.
There's the IQ stream. We're going to switch to display. And what that does, it creates an analyzer a WDSP analyzer separate to the one used for RX1 and 2.
And it creates an analyzer with these uh settings uh 512 pixels at the moment, 30 FPS.
FFT size, window and detector, averaging, and all that type of stuff.
So, we'll switch that on and watch this megabit drop.
We'll turn up the pixels to 1024.
So, we are now getting WDS key analyzer version of that IQ at the center frequency that we're looking at.
And there it is.
Um and the way that it works is that it quantizes the DBM values that the analyzer gives, which are floating point numbers, into bytes. So, for every pixel position here, 1024, for every frame that's sent down, there'll be 1024 bytes, which define how the spectrum should be in this uh area. Anything with a byte value of zero is below one -135. Anything with a byte value of 255 is above -30.
And then it will scale in between.
Um what that means is if you had if you wrote a client or whatever then you wanted to drag this up and down, then you would use a TCI command to set these positions and then the frames uh would come down accordingly.
And you know, we can test that here by changing it to 140 or 100 and 10 like so.
Uh I got it so that I can just change this and it just changes numbers on the scale on the left, but as soon as I press enter, it sends the message up to uh TCI server to uh refactor the range.
So, that's that.
But, there's a whole load of options because quarter of a megabit is still not great.
So, there's this option called Delta.
And what that does for each frame it will only send the difference between the previous frame within certain boundaries. So, if I turn Delta on now, we're now down to 150 odd kilobits a second.
And it essentially looks at the byte data for the previous frame and the frame it's about to send, works out the difference, and if the difference can be um reduced in uh uh bit depth. So, if the difference was, say, five, then we could uh co- store that in three bits essentially.
So, if the the worst difference between consecutive frame and the frame being sent was only five, then we could compress the whole death thing down into three a stream of three bits to store all the differences.
And that's how it works. When it gets over a certain threshold related to bit depth and everything, then it will uh stop doing that.
The downside of it is that it's across the whole display, and what that might mean is you've got a peak up here, which is a big difference all of a sudden, and therefore it can't compress any of this, whereas some of this is not changing. So, there's another option here called um block Delta. So, what this does, it cuts it up into 64 64 pixel blocks.
And as you can see, if we switch that off, we're up to 140 odd. If we switch that on, we're down to now 100 and something kilobit.
And it does exactly the same process, but it carves it up, and it might not This might compress really well, but where the signal's jumping around, this won't, so that whole lot might be sent across.
Whereas these bits might be deltas, this might be a full frame information for this segment. And that's that's how that works. Adaptive blocks And as you see, block delta is 64 pixel chunks. Adaptive blocks tells TCI server to um start off at 60 16 32 64 and whatever, and then pick the result that gave the smallest uh uh compression or the best compression. So, if we turn adaptive blocks on, you see we drop down to 90 odd there.
So, the it is improving slightly uh with adaptive blocks on. And of course, we're all about saving bandwidth, so we turn that on.
Um the other thing which affects all this is the speed at which it's updating from frame per frame. So, if we're at 30 FPS, obviously, if you increase that to 60, then the difference between each frame would essentially be half, so it might compress better.
But a way that we can easily show that is just by turning off.
So, at the moment, it's averaging across 120 milliseconds. If we say no, then you can see that it can't compress as well.
Cuz the differences are greater. And if we turn adaptive block off, it'd go even higher. Turn block delta off.
So, yeah, it's uh there's a lot of factors that affect it.
Uh this key frame system uh because we're sending deltas, differences, if there's some packet loss or whatever, then the the difference would essentially get worse and worse, and your spectrum would would get out of whack.
So, every you can set this to zero to turn it off, or you can type in any frame rate in there. And as we're at 30, that would be every 4 seconds it would send an uncompressed frame.
And then the last option here, we'll look at this accuracy one in a moment.
This last option is the quantizing uh range. So, at the moment it's 200 It's a byte, so it's 255.
If we change the quantizing range down to 7 bits, moment is 8 bits.
7 bits would be 0 to 127.
So, not really noticing a whole load of difference from 8 to 7 because we've got quite a shallow viewport there. If this was like the size of the screen vertical, then you would notice it probably.
But on a mobile device or something where your real estate's very narrow or not very tall, then you uh can gain a lot from uh switching this down. So, we're at eight there, uh peaking over 100.
7's down to 70, peaking over 80.
And 6 down to 60-odd.
This accuracy option uh defines if we're going to send data or consider it changed if it's uh zero, one, or two value difference to the previous frame.
So, zero will always send it will only send it if it's now one uh value difference, and two value difference. But because we got a load of noise here that is always one or two difference, then it's going to send it most of the time. It will save a little bit, but uh quite hard to visualize right now, but if we reduce the number of bits, then you'll start to see it uh happen.
We'll go right down to six bits, and you can see now that there's not a lot happening other than when there's a pulse on the band.
Um obviously, if I was You can see these signals moving around uh normally. If I was to drag this around, you'd you'd see them as well.
Um but our data rate is now down to sort of in the 20s.
So, on a mobile device over 4G, you just want a view of uh 4 or 5G, you just want a view of what's going on, then you can set this up so that it uses very, very minimal uh data.
And of course, if you were to put this uh back up, you would start using a bit more.
And a bit more.
Uh like so, and then we could uh turn the adaptive uh stuff off.
And we could turn the block del uh delta off.
And then that, and then we're back up to uh full uh rate, so yeah, center frequency is obviously linked.
Um and you know, you can change the uh FFT uh size, as you'd expect, and the windowing, and all that, you can do all that through there.
Um so that's that. So, let's have a quick look at audio.
Um hopefully, there's some signals around other than this static crash stuff.
So, what I'm going to do I'll switch the display right there.
I'll switch the display off for the moment, so we just get to see audio. So, setting a frame per second of zeros told TCI server to shut down essentially.
And if we turn on PCM You can hear it coming through. So, that's PCM, right? So, that's what it always is. PCM is the standard audio stream from TCI server.
And that's what it uses to communicate with WDSP and all that type of thing.
So, that's standard PCM.
Coming down by TCI server. If you were to select one channel, you can see that it halves the data rate.
Two channel, it's back up there again.
But what I've added is an Opus encoder in Thetus, so it's built in. So, this is a new audio stream type.
So, if we pick Opus we've now got the same audio coming in.
If I was to crank this up So, that that you were hearing there was coming in through the Opus decoder.
The Opus decode encoder, sorry. At the moment, the encoder is set to voice mode.
And it's told that the signal that it should be getting is voice.
Narrowband is only considering up to is only encoding up to about 4.4 kilohertz with that.
And it's using a fairly low bit rate of 16,000.
Um it's variable bit rate, so that means if the data if the audio all of a sudden had to be encoded with way more bit rate like the encoder could, but you can turn this on and it will constrain it, so you won't get uh crazy spikes or anything happening. And that's the best mode if you want to use it on a mobile uh data stream like 4G, 5G, whatever.
Complexity is the work that the server is doing, TSI server, the encoder.
Uh 10 is better than zero.
And there's some forward error correction stuff that it can add in as well. And this is all done through the Opus encoder.
And then uh a setting that you can use if you don't use variable bit rate to uh drop frames that are silent.
And you can actually put percentage in here of how much you expect how much packet loss you expect.
Um and it can add all that into the data stream to try and recover lost or broken up audio.
Uh so if we were to let's uh fiddle around and uh have a listen and we'll switch back and forth between PCM and Opus on the fly and we can see uh how different it sounds.
>> I had 5955 uh and okay uh when you listen wasn't sleeping with 59 uh 5859 and then I dashed downstairs to get me old porridge.
And shot myself home because um I've got to immediately I finished the uh net today, I've got to be up and out and have my uh job.
>> So you can see that for sort of bog standard radio, um that's fine. If we look at a If I open up the receiver width here, all right, and I switch into PCM mode, you can see that the noise is right across there, 0 to 10 kHz. But if I was to switch into Opus mode, it's down there, and that's all related to this narrow band bandwidth option.
So, the encoder is only encoding up to 4.4 K there.
Um I think that's like 6.0d.
Then this is like 8.0d.
And super wideband is um 12. But because we're on such low bit rate, if we were now to switch back and forth, I'll turn it up a bit.
The noise might actually sound different because we're encoding 10 K's worth of audio into a very low bit rate, even though it is on variable bit rate, although it's constrained.
There's definitely a difference in there with the uh with the electrical type buzzing sort of noise in there.
But what I'm going to try and do now, I'll increase the bit rate up uh to see uh if we can uh ascertain if there's any different between the two. So, I'll go right up to 48 K.
We're in Opus, but it's silent, so it's not doing a lot. If I was to give it some audio now, you'll notice that the bandwidth increases, so the audio in at the moment is 40 kilobits a second.
>> So, yeah, it's quite interesting playing with all this stuff. And if you want it full accurate render of it, you can put it into audio and full music, and you can give it uh that bit rate will probably be all right. Let's try that.
So, yeah, there's loads of settings that you can change to change your your quality of your audio and consequently the uh the bandwidth that's uh consumed.
Um and of course um if we were to turn the display on, and we go somewhere um and hit transmit here, if we're in PCM mode, two channel, then that's 3 megabit if we were to PTT, then it's uh 3 megabit outbound as well.
MW0LGE I'm at zero drive power, but just in case.
Um but if we switch to Opus, so we can even do that on the fly, uh like I was doing with receive, we switched to Opus. You'll see that, uh, these audio rates will completely change.
And when I stop talking, you can see this outbound one, um, may drop off quite a lot.
So, yeah, it's interesting, uh, stuff.
>> [sighs] >> Say we are Mike Whiskey Zero Lima Golf Echo.
Uh, so there we are. And of course, monitor works through it as well, through, uh, Opus stream.
There's not a lot of latency. In fact, this determines latency really other than what's happening in Thetus.
Uh, this is sort of this is the encoder frame size.
Um, so, the bigger the number, technically, the more latency you have, but it's so minimal that it's, uh, I haven't really noticed it. Obviously, you could probably time in it. It's probably in the range of 20 to 30 milliseconds, whatever.
But what it does mean that there's less header.
So, as you can see, let's turn the display off again.
Uh, whoops.
FPS is zero.
Um, there's less header. So, if you have it, uh, really sort of responsive, you can see there's way more header used. If you drop it right down, then we're you know, we're down there.
And if we, uh, turn this back on, and turn the display on, I can show you a quicker response.
>> Okay, confirmed negative.
So, yeah, if you're trying to if you're trying to minimize bandwidth uh with the audio, then you can increase the frame size and of course change the sample rate and all this sort of stuff and uh you can uh achieve quite decent quality audio uh with very uh minimal um uh bandwidth used. So, for instance, uh I'll just set this up as a remote example.
And we've got full spectrum here, full audio.
I'll switch two channel off.
Uh incidentally, if you've got two channel turned on, then bit rate needs to be high enough to be able to encode the two channels, otherwise it will down convert to one even though two is selected.
Um and I'll just turn the audio up a bit.
>> [clears throat] >> Or at least where the sea salt is. To say sea salt museum.
Um I don't think I've ever been to that the sea salt factory.
I I believe it's on the Menai Straits.
Um on the sort of uh west side of the straits.
Um Anyway, I'll have to tell it and perhaps go across there.
I'm not sure whether it's close to the sea zoo.
Um I'm not So, here we are. Anyway, here's a quick overview of what I've been working on for the past couple of weeks.
Um with this new stream information, I am contemplating putting codec two into it.
Um at some point.
But uh there's a lot of things I I need to do yet. So, yeah, that's just a quick uh a quick overview video. No rest for the wicked. I was saying I was going to take a break extended period from Thetis.
But it has sucked me back in again.
All right, take it easy, all. Cheers.
Related Videos
Agentforce NOW AMA: Build with React and Salesforce Multi-Framework
SalesforceDevs
490 viewsβ’2026-05-28
How agent o11y differs from traditional o11y β Phil Hetzel, Braintrust
aiDotEngineer
450 viewsβ’2026-05-28
Re: π£οΈπthepropheduπ2026 GST 103 CLASS (E-EXAM REVISION)
theprophedu
636 viewsβ’2026-06-04
WEB TECHNOLOGIES UNIT-2 | Degree 4th sem BCOM Computers web technologies unit-2 full explanationπ―β
LearnwithSahera
1K viewsβ’2026-05-29
More tests are always better? How to use AI to identify tests that bring little value
Alliance4Qualification
335 viewsβ’2026-05-29
Search Algorithms Explained in 60 Seconds! π€π¨
samarthtuliofficial
218 viewsβ’2026-06-01
People of Game of Thrones using JavaScript DOM
AltCampus
296 viewsβ’2026-05-30
Instagram accounts got PWNed
EricParker
13K viewsβ’2026-06-03











