-
Notifications
You must be signed in to change notification settings - Fork 0
/
FM_mod.m
60 lines (50 loc) · 1.29 KB
/
FM_mod.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
clear all
close all
clc
MI=[0.1272 4.5396 0.0507]*1e4; %Pll constants
nL=0.1; %noise level
bitRate=16; %Hz
sc=10; %scale factor for the integration process
f0=2000; %central frequency
ppc=128; %points per cicle
Nbits=100; %Number of random bits
msg_original=randi([0 1],1,Nbits); %message to be trasmited
Fs=f0*ppc; %sample frequency
T_bit=1/bitRate; %bit period
t_end=length(msg_original)*T_bit; %end time
N=round(t_end*Fs); %number of samples
t=linspace(0,t_end,N); %time vector
msg=repelem(msg_original,10); %That's for the ~linear~ ZOH interpolation
interp_msg=interp1(linspace(0,t_end,length(msg)),msg,t); %interpolation of message with time
theta_m=sc*cumsum(interp_msg)/Fs; %message integral
theta_m=theta_m+2*randn(1,length(theta_m));%phase noise
s=sin(f0*2*pi*t+theta_m)+randn(1,N)*nL; %signal transmited
figure
plot(interp_msg)
title('mensagem interpolada')
figure
plot(theta_m)
title('theta_m')
figure
plot(s)
title('sinal')
%% Demodulação
[A,w,fi,y,e] = EPLL(s,MI,1/Fs,f0);
figure
subplot(2,1,1)
plot(t,e)
title('erro')
subplot(2,1,2)
plot(t,w)
title('frequência')
figure
w2=filter(ones(1,10)/10,1,w);
msg_dem=w2-f0*2*pi;
plot(t,msg_dem)
axis([0 t(end) -sc 2*sc])
title('Msg')
figure
periodogram(s)
msg_dem=decan(msg_dem>5,16000);
plot(msg_dem)
ber= 1-sum(msg_dem==msg_original)/length(msg_dem)