 Welcome to this lecture on digital communication using GNU radio. My name is Kumar Appaya and I belong to the department of electrical engineering IIT Bombay. This is the course summary and the last lecture for this course. Let us just quickly look at what we have seen in this lecture. So one picture which is useful for us to consider is what we have seen. We have seen how you can convert bits to waveforms. Of course, we have seen how you can convert real signals to bits. We have then seen how you can convert bits to waveforms. In this context, we have seen modulation and waveform design under bandwidth and power constraints because practical channels have limited amount of frequency range which we can use. They also have power constraints and you have to honor these in order for you to be able to communicate successfully across these. Next thing we have seen is channel noise and other practical issues. So for example, we have seen how you can model channels, wired channels, wireless channels and how you can actually handle system level aspects as well. For example, in practical systems there are frequency offsets that is the carrier that is used at the transmitter and the carrier that is used at the receiver have different frequencies and these kinds of issues and phase offsets, all these issues also manifest as errors if you do not handle them. So how you can handle these and address these issues is something that we have seen. We have seen waveform corrections and waveform to bits. In the context of waveform correction, what we are saying is that we can either perform equalization or we can just directly try to detect the bits in terms of maximum likelihood sequence estimation, optimal sequence detection and so on. And the key thing that we have seen is how we can essentially handle the fact that there is a channel which causes some deformation. Can we address the deformation either corrected or just account for the deformation and yet get back our bits reliably? Then finally, once we get the bits, how would you make sure that the bits are correct? So we made sure that we added redundancy, enough redundancy so that even though the channel is there, even after you have corrected it using equalization and all those effects, you still have some further problems to deal with. And in that context, we added redundancy in terms of error control codes and we managed to even correct some errors. And of course, because we always, the last thing we saw was we always wanted to make sure that our representation of these signals was using a finite number of bits, we also saw how you can quantize effectively in the context of quantization. Now, question is where we can go from here. The key aspect that you must remember is that most topics in this course are related to the physical layer of digital communication. In fact, at the beginning, we saw that there are multiple layers in this communication architecture. There's network layer, application layer, all those kinds of layers are there. There's lots of these intermediate aspects that we could not cover in this course. So there are many approaches which you can take in terms of taking further courses or learning on your own. Let me just give you some suggestions on what you can look at in the coming days. One is you can go advanced GNU radio topic, going to advanced GNU radio topics. One very, very interesting aspect is that GNU radio allows you to interface with hardware. In particular, there are radio over USB and other radio hardware which you can interface with using Ethernet or USB and many such approaches. You can build high-performance C++ blocks in GNU radio. We built Python blocks in GNU radio, which are very good at performance for simple tasks. But if you wish to perform some really complex mathematical operation where your waveform detection has some processing that really needs to be done fast, it is very, very instructive for you to learn how to build high-performance C++ blocks in GNU radio. And this comes in handy for quick prototyping. And you can also take it to a practical system from there. One other aspect is hierarchical blocks for modularity in GNU radio. Now for simplicity, what we did is when we built our GNU radio flow graphs, we built all aspects on the same flow graph. Sometimes you saw that we had to make it really, really large. And there were some repeated aspects which I had to build twice. For example, in the context of, say, modulation and error control coding, I had to put some blocks multiple times because there was an uncoded and coded I wanted to compare and I drew them twice. Hierarchical blocks is an interesting concept in GNU radio where common aspects can be put into another block. It's like this, you have a bigger block within which you can put smaller blocks and this block can be repeated multiple times. It keeps your flow graph clean and any changes in one particular aspect of one block propagates to all. So it allows very modular design and hierarchical blocks is something you must learn if you want to use GNU radio for more advanced kind of experiments. It's very, very useful in making your flow graphs clean and easy to debug. And finally, interfacing with SDR, software defined radio hardware for rapid prototyping. Suppose that you want to build a wireless transmitter and receiver. It turns out that you can directly use GNU radio to talk over USB or Ethernet to a wireless transmitter and another computer have a wireless receiver talk directly to GNU radio. So you can do all your prototyping of design of waveform, design of transmission, changing the power, all those. And then tuning the receiver, tuning the frequency, error correction, phase locking, all those things on GNU radio. This is very, very valuable because with nearly zero effort, you are able to bring in a waveform viewer and oscilloscope. You can then check the constellation and debug very easily. All on the computer, this makes the design aspect really, really easy and fun even with hardware. Once you come up with a prototype on GNU radio, going to a more efficient solution is very easy because GNU radio dumps the code which you can directly take and adapt as well. In fact, almost all the GNU radio blocks which you have built in this course, you will see that there's an attached Python file also. The Python file has the recipe which you can directly build into your communication system when you build the practical compact solution. So in that sense, explore GNU radio, explore its power. We have hardly scratched the surface. There is a lot more that you can learn by going in deep. Some other topics in terms of coursework which will enrich your knowledge are, I suggest you look at information theory and coding theory, wherein a deeper look at the limits of communication and how you can achieve them is covered. You can look at communication networks and related courses where they go one level above the physical layer and see how packets can be transmitted reliably. There are several networking aspects such as TCP, UDP and how you can build the recipes of networking that go on to build your LANs and internet and all those kinds of things are there. They also cover a lot of aspects related to queuing and quality of service, things which determine how networks are designed once you have your physical layer set. Estimation and detection theory goes further into topics related to signal detection and signal estimation. One brief aspect that we covered was we said that when you want to perform equalization, you need to know the filter or the channel that is present. One aspect that we did not go through in this course is how do you actually get those channel coefficients and how do you learn them optimally? So that is covered in estimation theory in addition to many other topics. Detection theory, we briefly discussed how you can infer what bit is sent based on the decision region. But suppose you want to infer groups of bits, groups of symbols under various kinds of noise or various scenarios, detection theory essentially covers that aspect and it's a very important ingredient for building more intricate receivers. So estimation and detection are some things that you can definitely look at. Wireless and optical communication are some examples of further courses that you can take which directly build on top of this. In fact, we saw briefly about wireless communication. In optical communication also, the channel is very, very different but the concept that you are looking at is to transmit bits effectively and the modulation, demodulation aspects which are connected to optical channels is something that is very interesting and very relevant also today when you need really high data rates. Finally, other building blocks of these physical layers which we did not cover are radios, antennas and the circuits for communication. So radios, of course, when you deal with any kind of modulation to carrier frequency, you need to look at how you can build radios that also are able to sustain the high power requirements needed, antennas for directivity and making sure that your signal goes in the right direction or omnidirectional and communication circuits for data conversion, for data conversion for also transmission across transmission lines within the circuit and several other aspects which when you go to really high frequencies in communication, the circuit start becoming important and that is covered in this course. So I hope that you had a good learning experience in this course and I hope that you continue your learning with these ideas. I wish you all the best. Thank you.