% script frekmod.m
%
% Introduktion till frekvensmodulerad digital transmission

fs = 10000;
Tp = 0.25 * fs;
fprintf('Antalet bitar per sekund: %.1f\n',fs/Tp);


% string = 'Hej världen!' % Sträng som skickas
% ascii = uint8(string);
% message = de2bi(ascii,8);
% message = message(:)';
% data = message;

data = [1 0 1 1 0 0 1 0];

%% Skicka enbart bitarna och titta vad mottagren tar emot

k = -1500:1500;
sigma = 200;
frek0 = 300;
frek1 = 2*frek0;
puls0 = exp(-(k/sigma).^2) .* cos(2*pi*frek0*k/fs);
puls1 = exp(-(k/sigma).^2) .* cos(2*pi*frek1*k/fs);

pulser = {puls0, puls1};
signalx=modulateData2(data,pulser,Tp);

figure(8);plot(signalx,'LineWidth',2);

soundObject = audioplayer(signalx, fs);
play(soundObject);
recObject = audiorecorder(fs, 16, 1);
recordblocking(recObject, length(signalx) / fs + 0.5);
signaly = getaudiodata(recObject);

figure(9);plot(signaly);

%% Lägg till en startpuls

% Den är en chirp-puls en cosinussignal med en frekvens som ändras linjärt
% med tiden, multiplicerad med en gauss-envelopp

k = -700:700;
sigma2 = 200;
chirpf0 = 1200;
chirpf1 = 1500;
chirpf = (chirpf0+chirpf1)/2+k*(chirpf0-chirpf1)/(k(end)-k(1));
startpuls = exp(-(k/sigma2).^2) .* cos(2*pi*chirpf .* k / fs);

signalx = modulateData2(data, pulser, Tp, startpuls);

figure(8);plot(signalx,'LineWidth',2);

soundObject = audioplayer(signalx, fs);
play(soundObject);
recObject = audiorecorder(fs, 16, 1);
recordblocking(recObject, length(signalx) / fs + 0.5);
signaly = getaudiodata(recObject);

figure(9);plot(signaly);

%% Demodulering intro

% Vi har tre matchande filter, ett för startpulsen och ett för vardera
% "nollpulsen" respektive "ettpulsen".
% De fås genom att tidsspegla respektive puls;

h_start = fliplr(startpuls);
h_0 = fliplr(puls0);
h_1 = fliplr(puls1);

figure(18);
% Titta på utsignalerna från respektive filter
subplot(3,1,1);plot(conv(signaly,h_start));
subplot(3,1,2);plot(conv(signaly,h_0));
subplot(3,1,3);plot(conv(signaly,h_1));

%% Demodulering hela vägen

decodedMsg = demodulateSound(fs,signaly,pulser,Tp,length(data),startpuls,2*Tp);

% Räkna andel felaktigt mottagna bitar 
fprintf('felfrekvens %2.1f procent\n',100*sum(xor(data,decodedMsg))/length(data))

% rek_message = reshape(decodedMsg,length(decodedMsg)/8,8);
% re_string = char(bi2de(rek_message)')   % Mottagen sträng
