Week 1¶

Mapping data to pulses¶

>> serialized_data = reshape((dec2bin(uint8('meatball'))'),[1,56])

serialized_data =

    '11011011100101110000111101001100010110000111011001101100'
upsampled_data = upsample(str2num(serialized_data')*2-1,16);
pulse_shaping_filter = rcosdesign(0.8,4,16,'normal');
sequence_of_pulses = conv(upsampled_data,pulse_shaping_filter,'same')
figure; plot(sequence_of_pulses); hold on; stem(upsampled_data.*max(pulse_shaping_filter));

Polyphase filter bank for pulse shaping¶

Modulation¶

f0 = 12000; fs = 48000; w0 = 2*pi*f0/fs; n = 1:length(sequence_of_pulses);
modulated = sequence_of_pulses.' .* cos(w0*n);
figure; plot(sequence_of_pulses); hold on; plot(modulated);

Demodulation¶

demodulated = modulated .* cos(w0*n);
recovered_pulses = conv(demodulated,pulse_shaping_filter,'same');
figure; plot(sequence_of_pulses); hold on; plot(recovered_pulses);

Mapping pulses to data¶

>> recovered_data = downsample(recovered_pulses,16) > 0

recovered_data =

    '11011011100101110000111101001100010110000111011001101100'

Week 2¶

Costas loop for carrier recovery¶

$$ \theta[k+1] = \theta[k] - \mu \text{LPF} \left\{ r[k] \cos(\omega_0 k + \theta[k]) \right\} \times \text{LPF} \left\{ r[k] \sin(\omega_0 k + \theta[k]) \right\}$$

Week 3¶

Symbol Clock Recovery¶

Symbol Clock Recovery¶

Symbol Clock Recovery¶

Error probability¶

$$\frac A \sigma = \sqrt{\frac{A^2}{\sigma ^2}} = \sqrt{\text{SNR}}$$