 Dzień dobry, mój rozmowy jest o transmisji GSM BIRST w radiu i najpierw, kto jestem, to jest w tym samym punktu, jak w Houses Computer Congress Ja jestem autorą części APROP, lat temu byłem autorą, a potem zmieniłem to w GRGSM i zbudowałem coś w tym samym. Jestem też autorą multi-RTL, software tool na synchronizowane rtl-sdr, devices in time domain. Jestem profesjonalnie pracujący w Warsom University na radar signal processing. Chciałbym tutaj też zbudować OSMOKOM Contributor. Jestem jeszcze nie tam, jestem w procesie transferowania GRGSM projektu do OSMOKOM Umbrella, ale chciałbym też zrobić coś, co jest bardziej interesujące do resta OSMOKOMu. Może w przyszłym razie. Co to jest dla tej GSM BIRST transmisji? Moja motywacja była, poddawając transmisji do GRGSM, żebyśmy mogli to marzyć razem z OSMOKOM BIRST i zrobić GRGSM BIRST transmisji dla OSMOKOM BIRST, więc to może działać nie tylko na motoru, ale też na sdr, i może być też w porządku, żeby pracować jako BTS transferowany, ale nie zrobiłem tego jeszcze, a jest w osmokom osmotyry, więc nie ma na to dużo motywacji. Może być używane na testowaniu do reakcji GRGSM, która jest już w tamtej. Przestawiamy to, żeby poszukiwanie BIRST transmisji zostało w porządku. Wskazywanie transmisji mamy BIRST z GSM BIRST, a to, co jest interesujące w nich, jest spokojna sprawa. Aby odpływać, chcieliśmy odpływać gmsk modulatora RF sygnału, który jest synchronizowany z reakcją sygnału. Mamy, że pracuje gdzieś tamtej reakcji i obserwuje podróż i może informować o tradycyjnym postaci, o stworzeniu tradycyjnej stworzenia, o stworzeniu tradycyjnej stworzenia, o stworzeniu tradycyjnej stworzenia, a o stworzeniu tradycyjnej stworzenia 3 razy, nie później, bo jest w stronie tradycyjnej. Aby odpływać gmsk modulatora z reakcją sygnału, to nie jest w jakiś sposób odpływać gmsk modulatora. Aby odpływać gmsk modulatora nie mieliśmy ambicji, żeby wytrzymać frekwencję, chcieliśmy tylko pracować na jednej frekwencji. To jest sygnał, który chcieliśmy, a może według tej 8-psk modulatora w środku. To jest ten angielski sygnał. A potem, dlaczego używać radio? Bo wiele ludzi może chyba myśleć, że to jest bardzo niebezpieczne do tego, a chcę, może opłynąć ich o niebezpieczeństwie, które może nie znać. Dlaczego niebezpieczeństwo? Bo to jest modularne, więc jeśli muszę wytrzymać filtr, można używać ruchu, który został wytrzymowany przez ktoś inny, nie muszę się reakcjąć. Jeśli chcę zrobić filtrę, filtrę, filtrę, to jest wiele w tamtej. Jeśli ktoś nie chce znać, co jest w środku, w środku ruchu, nie musi znać, co jest na ruchu, co jest na ruchu, co jest w ruchu, ale w środku ruchu jest niebezpieczeństwo, nie musi zrobić coś, co nie chce. Arhiteksualne wytrzymały software, w ten sposób może być całkowicie spokojna, bo mamy bloky, które zbierają się. To jest advantage, że to może imporować jakieś limitacje, ale chyba nie tak wiele osób, może nawet być nie możliwe, bez rozgrania. Na przykład chciałbym zapytać na konfiguracjach Gnuradio bez zatrzymać ich, ale może muszę zapytać. Więc kiedy ludzie myślą o Gnuradio, myślą o samochodzie samochodów samochodów bloków, procesujące ich i wytrzymające ich. I basicny obiekt, który jest procesowany jest tylko samochodem i nie ma sensu do tego zwiększenia pomiędzy nich. Na przykład, do roboty Gnuradio bloków jest zapytać na samochodów i zapytać procesującą funkcję, na przykład zapytać z dwóch sygnałów i zapytać do obu. I Gnuradio ACHARS będzie skończony na dwóch sygnałów. Numerów samochodów jest samochodem. Ale ten sposób procesowania sygnałów ma jakieś limitacje. Na przykład pakiet to chyba nie jest możliwe w ten sposób. Nie ma sygnałów z obu bloków do obu obu nie ma wytrzymań nie ma wytrzymań nie ma wytrzymań mechanizmu nie ma wytrzymań w wytrzymań wytrzymań wytrzymań Gnuradio i jakieś mechanizmy były dodane na przykład wytrzymań i na przykład wytrzymań jest metadata do wytrzymań samochodów wytrzymań i to przejechać przez mnóstwo bloków i może być używane z informacji od obu bloków do obu bloków wytrzymań na przykład wytrzymań wytrzymań samochodów i też może być używane do wytrzymań wytrzymań wytrzymań na przykład wytrzymań frekwencji wytrzymań samochodów i tak dalej więc to jest jak mamy na przykład mamy samochodów bloków wytrzymań samochodów wytrzymań samochodów wytrzymań samochodów wytrzymań samochodów wytrzymań samochodów i wytrzymań samochodów może też widzieć wytrzymań wytrzymań na przykład możemy wyobrazić, że jest atak na lękę więc możemy wytrzymać jest wytrzymań można wytrzymać 1 blokę w ten sposób ale jeśli chcesz wytrzymać więcej z nich to musisz zawsze z problemami że te lękki mogą być tylko początek tylko i można wybrać kombinacje można obrót więc jeśli musisz wytrzymać w ten sposób 1 blokę to nie jest problem ale jeśli musisz wytrzymać w ten sposób każdego bloka procesuje te lękki to jest bardzo niebezpieczne więc co było wytrzymać było targów i targów są wytrzymań i te targów są wytrzymań od każdego bloka i ta bloka jest wytrzymań od każdego bloka i nie są spacerami wytrzymań więc jeśli wytrzymałeś tę rurę to nie może się stać w radiu i co jest wytrzymań w radiu jest, że jeden blok jest wytrzymań więc przyzwyczajna jest że te mechaniczki używają przerwania przerwania przez radiu więc nie musisz wytrzymać o memorie i jest to dość efekcyjne nie musisz sprawdzić mnóstwo w sklepach bloków są po prostu proste ale też te wyraźnie jest limitowane z maximem spacerów i te przerwania mogą być w ten sposób ale musisz pamiętać że samochód z tego do tego jest na przykład CRC czy coś takiego nie jest to zakończone i jest to w zasadzie przerwania przerwania które pracują bardzo dobrze w radiu żeby zmienić obok coś innego tak, jesteśmy wytrzymańcy tak jedna z wymiarów jest jeśli przeszedzamy przez ten blok tak tak, musisz wytrzymać co oznacza, że wytrzymajesz twój stream i jeśli blok jest niebezpieczny to nie możesz wytrzymać tak, tak tak więc jest inny mechanizm który jest dobrze utrzymany i jest nazywany message passing i jest mechanizm do wytrzymańcy maszyn między blokami i są w pmt formatu jest polimorfik typu też stream tags w tym formatu i jest bardzo spleczny ale też ma przynajmniej dla mnie dość niebezpieczny jak i z LISP na przykład nie ma wytrzymańca ma wytrzymańce to jest wytrzymańce ale możesz wytrzymać i jest wytrzymańce każdego bloku ma wytrzymańce wytrzymańce nie ma nie ma limitu tak i może być używane dla wielu rzeczy, tak jak wytrzymańce parametracji z wytrzymańce bloków wytrzymańce paketów i nawet wytrzymańce wytrzymańce wytrzymańskich bloków i jest nazywane PDU czy KONS HEDER który jest dykcjonarią wytrzymańce HEDER w wytrzymańskich formach jak Integer 64 i to jest kontent i to jest binauralny blok tak, więc a, i jedna z ciekawych rzeczy jest, że z pasażu pasażu możesz łatwiej wytrzymańce bloków które nie są możliwe dla pewnych razy wytrzymańce więc tutaj jest przykład bloków, które używam w GRGSM dla akcji frekwencji GSM bloków procesów frekwencji akcji frekwencji od nich a potem GSM klock offset control blok based on this clock frequency offset and updates this block GSM input adapters it has inside frequency shifting block and sample rate changing block that both of them are controlled by stream tax inside these messages are then converted to stream tax and the stream tax control control the the other blocks ok, so the message passing has some interesting advantages like it's very flexible you can send any data you like with PMTs it's well suited for package representation and you can easily distinguish different parts of packets with this but it has also advantages it's asynchronous so if you have two parallel branches in the radio that that has messages in it and you connect them together in some block you have completely non deterministic order of this of these packets in this in this block and there is also no back pressure of one block on another and what I mean here is that one block is receiving messages but he's got too much of them and he would like to say to another, hey I've got enough stop sending to me and there is no such mechanism so for example message source can produce any number of messages and don't care if someone is able to receive them on time and there is no pre-allocated space in memory memory as far as I know is allocated each time you create a PMT so it might be some limit for in the fast path if you try to use it for example to send 100 mega samples inside of messages it might be somewhat limiting if you, I don't have ambition to describe everything here I just wanted to say that maybe if you think that radio sucks maybe you should rethink it maybe it's not that bad so, but if you want to know more go and see a talk by Tom around the stream tags PDUs and message passing aaa aaa how to transmit burst with ignoradio so this is aaa this is the the whole secret it's you get you have in ignoradio a block representing usrp transceive chain and you can send a tagged stream to it this block itself is not a tagged stream but it understands tagged streams when you when you feel packet it's TSB tag name you should put packet length tag name in there and from this moment it will start understand tag streams and in tag stream you can attach link of each burst transmit time so usrp know exactly where it should send something and what what does it on its side is uhd timed commands mechanisms that is implemented in usrp send in the driver so here i got demo i got in here again i got signal source regular one taken from ignoradio i got burst tagger block i written it just adds periodically tags to the stream so you can mark where where burst are starting and when they should be transmitted you can you can define how long should be burst and how long should be idle duration between them idle duration and i am already running it so here is what i am sending to uhd block to usrp and here you can see txtime tags values and burst land and on the receive side what i would like to get is is burst that have equal land with idle parts but here you can see that is not the case somehow and i can fix it i will connect attenuator to the transmit port let's see what happen this is strange thing i still don't know why it is but i know where it happens and i can fix it connecting for example 1db attenuator so it's not such a problem for me i don't have much motivation to look for the source of it and it happens only when you are trying to transmit something and you are trying to transmit burst and receive continuously at the same time i don't know why it's only feature of b200 devices and as i said it can be work it around with attenuator i if you connect some antenna that doesn't have any connection between active pin and the ground of the port you will see also this i don't want to transmit junk in here but you would see it as well here we are just observing cross talk between the transmit and receive port and then is everything fine now let's check i'm now adding some zeros at the end of of the burst with use of burst shape burst shape block it adds 10 10 zeros at the end let's see this so this is what we would like to transmit this is the burst at the end it has zeros that i added in there the padding this is what we receive so this is the back of previous burst and probably it's effect of group delay that is not taken care of so you should do it manually yourself and how to take care of it you can just add enough zeros for example in this case it's 20 and you won't see it anymore let's try it much better but you have some delay and yeah stop this it appears for every usrp that i have seen maybe for X 300 devices i haven't seen the this this tile of burst at the beginning but there is still missing part of burst so you should add zeros anyway so now use how to use radio to build tsm transmitter so we have interface it receives burst from somewhere and it sends downstream burst with frame numbers and time slot numbers then there is important block very important block that converts frame numbers and time slot numbers to transmit time tags after that we have modulator that does gmsk modulation and it takes at the input pdu messages with burst and and at the header of this pdu message it has for example transmit transmit time tags this is the most important and at the end you have azure hardware and at the moment it's only usrp that supports stream tags so i could put usrp in here so modulator i wanted to use only radio blocks for implementing it just to check if i can do it there are also some adaptation blocks in here put on this picture so first you have block that changes messages to tag stream then there are blocks that are doing differential encoding and i found out that differential encoding in the gsm means it's differential decoder as the radio means it and its output has to be then changed to bipolar representation and then i have to adapt output of that block to the input of gmsk modulator block that does the gmsk modulation with over something of 4 so as sylwain said when changing the rate i have to correct the packet length value and there is a block that does it but it can probably do it dynamically and at the end i have burst shaper block that takes care about this thing that i have shown it adds zero at the back of burst it also does power ramping maybe not very good at the moment but it can be updated and do it according to the spec so then we have this frame number to txtime conversion and i have to think about it for a bit so let's start from something general and how to convert one time in general to another one let's do it on an example for example we have some number of samples and we want to convert it to time and this time can be time since turning on usrp so we have known nx and unknown tx and we can put it on a plane and draw a line this is how one converts to another the conversion ratio is ts it's it's period of sampling and how to convert the value so let's start from capturing some reference point and it's number of samples nref and precise time attached for this sample and it's tref and then we can do some simple math to find tx so ts is tangent the angle in here we can write formula for it and then derive tx from this ok but converting of frame numbers to time there is problem that it's number modulo hyperframe so this is the number in here and it's frame numbers are repeating every about 3.5 hour so it's not that you can ignore it it can happen and computing unambiguous difference between two frame numbers is therefore quite hard if the distance is higher than hyperframe divided by two so what would it be great to have is something like this the straight line so we can capture the reference point and compute the time but this is what we have really and there is ambiguity in here so how to resolve it we can for example track time and it doesn't have to be very very precise we can use for example PC clock for it because it won't sleep that much maybe hyperframe over to it's over one hour so it would take some time to have such such error of time between USRP and PC and we can use this this time hint should be estimate for example of our TX value that we want to find out and it's therefore quite close to the point that we are searching for so this is what we have we can move the reference point close to the close to the point that we are looking for and compute using similar formula as previously I added here h h which is length of hyperframe over over to just to support the situation that we have time hint that is in future in comparison with the point that we are looking for and we can easily add here support for time slot numbers so the naming convention is the same as previously in here TSX it's time slot numbered that we want to convert TSRF reference time slot number the next talk will be quite short so you don't have to worry about this schedule but I'm close to the end where to get the reference point from it's taken from receive site of usrp together with erics time tax that are sent by usrp whenever some change of time happen and receive chain of georgsm tracks sample numbers and erics time tax it converts them can add time to frame number and send the pair downstream and this pair is basically our reference point that is used for conversion and this is how it works and here I have another demo let's start network in the box i connect cable ok and I will start the demo so it receives the signal you can see some messages decoded on the output and what I do in here is that this part is receiver then I do trigger generation generation of access whenever frequency correction burst is received and there is another branch for reference frame and numbers and time and here there is transmit chain adaptation block in this case are outside of modulator and let's see what happens Piotr, I'm sorry for interruption I think it should be noted that we don't actually transmit anything we use cables yeah, there are cables so nothing to worry about yeah, so what happens yeah we get so many random access messages burst that enough channels to allocate traffic channels in this case this was the first test and this is what happened I didn't intend to do it but it was imminent anyway and yeah this is how it worked and yeah this is the end of my of this talk thank you questions anyone so have you tried hopping since yesterday yeah I tried but I will do updates on this in the next talk because it's so short that it would conclude it now and does it only work with the usrp or something like Blader F or LimeSDR no, because there is no support for stream tags for them at this moment in the radio so I I'm thinking about adding it to GR Osmo SDR or maybe someone else we want to do it alright, thank you I think the root problem is that it's not supported by Osmo SDR Osmocom source and sync for SDR we are not portable between software defined radios I mean the root problem why we don't support LimeSDR for now is that we statically use UHD source and UHD sync because they do support Erics and TX time tags but generic Osmocom source and sync blocks don't support this Does it work using SOP UHD then? We didn't try but The interface it's not exposed on the radio side Nobody did it yet but it can be done Why did you choose the radio over Osmo T-Rex? Because Osmo T-Rex already has support Yeah, but there was one requirement that I missed to transmit only when I have to because mobile station most of the time doesn't transmit and it's not supported at the moment I think in Osmo T-Rex this was advantage and another thing is that I already know exactly how GRGSM works and Osmo T-Rex was a bit harder but probably not that hard not to do that I mean it's pretty simple and works well it has all Osmo T-Rex is written to be a clock master you do have to make some changes for it to synchronize to an external base station and track so it's not just sending the burst on the data interface and hoping it's gonna work Yeah, but you remember that Of course, I remember A lot of this good part of this work has already been done No, no, I mean Honestly, I would have written it with Osmo T-Rex It's just much more and it has much more I don't know, honestly Much less dependencies than Yeah, much less dependency, sure I mean, honestly I was kind of impressed to see it work That's gonna be you ask me a long way also to support that kind of use case of burst transmission Yeah I mean, you know bulgining radio these days is not that hard, right? It's not like a few years ago I mean, you can even run it on windows these days Yeah For me a model It's possible To compile it on windows I did it It was painful Experience, but yeah