MATLAB is commonly used to design filters and determine frequency responses of systems, but it is also very useful as a simulation tool.

Use the following MATLAB code skeleton to simulate the QPSK
transmitter from Digital
Transmitter: Introduction to Quadrature Phase-Shift
Keying and fill in the incomplete portions. Note that
the code is not complete and will not execute properly as
written. How does the spectrum of the transmitted signal
change with
`plot(rI,rQ)`

?

```
1 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2 % MATLAB Code Skeleton for QPSK Digital Transmitter
3
4 % Generate random bits
5 bits_per_symbol=2;
6 num_symbols=128;
7 numbits=bits_per_symbol*num_symbols;
8 bits=rand(1,numbits)>0.5;
9
10 Tsymb = 16; % symbol length
11 omega = pi/2; % carrier frequency
12
13 %%%%%%%%%%%%%%%%%%%%%%%%
14 % Transmitter section
15 % initialize transmit sequence
16 t = zeros(1,num_symbols*Tsymb);
17 i = 1; % initialize bit index
18 n = 1; % initialize time index
19
20 while (n <= num_symbols*Tsymb)
21 if ( bits(i:i+1) == [ 0 0])
22 Igain = 1/sqrt(2);
23 Qgain = 1/sqrt(2);
24 % ------>Insert code here<-------
25
26 end;
27 i = i+2; % next 2 bits
28
29 % Generate symbol to be transmitted
30 t(n:n+Tsymb-1) = %------>Insert code here<-------
31
32 n = n+Tsymb; % next symbol
33 end;
34
35 % Show the transmitted signal and its spectrum
36 % ------>Insert code here<-------
37
38 % Show the transmitted signal constellation
39 rI = t.*cos(omega*[1:num_symbols*Tsymb]);
40 rQ = t.*sin(omega*[1:num_symbols*Tsymb]);
41
42 % Filter out the double-frequency term
43 low_pass=fir1(512,0.5);
44 rI=conv(rI,low_pass);
45 rQ=conv(rQ,low_pass);
46 figure;
47 plot(rI,rQ);
```