101 lines
2 KiB
Matlab
101 lines
2 KiB
Matlab
## Copyright (C) 2016 Valentin Gehrke
|
|
##
|
|
## This program is free software; you can redistribute it and/or modify it
|
|
## under the terms of the GNU General Public License as published by
|
|
## the Free Software Foundation; either version 3 of the License, or
|
|
## (at your option) any later version.
|
|
##
|
|
## This program is distributed in the hope that it will be useful,
|
|
## but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
## GNU General Public License for more details.
|
|
##
|
|
## You should have received a copy of the GNU General Public License
|
|
## along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
## -*- texinfo -*-
|
|
## @deftypefn {Function File} {@var{retval} =} phasenmodulation (@var{input1}, @var{input2})
|
|
##
|
|
## @seealso{}
|
|
## @end deftypefn
|
|
|
|
## Author: Valentin Gehrke <s7745593@e03101>
|
|
## Created: 2016-07-28
|
|
|
|
datalen = 10;
|
|
|
|
d = rand(1,datalen) > 0.5;
|
|
|
|
#d = [ 1 0 1 0 1 1 1 0 1 0 0 0 1 0 0 1 0 1 0 1 1 0 1 1 0 0 0 1];
|
|
n = 0:datalen-1;
|
|
phases = [ -pi/2 pi/2 ];
|
|
Tb = 0.5;
|
|
fc = 5;
|
|
fa = 200;
|
|
|
|
subplot(6,1,1)
|
|
stem(n,d)
|
|
|
|
|
|
t = 0:(1/fa):(size(d,2)*Tb - 1/fa);
|
|
phi = phases( d( floor(t/Tb) + 1) + 1);
|
|
|
|
subplot(6,1,2)
|
|
plot(t,phi)
|
|
|
|
s = cos(2*pi*fc*t + phi);
|
|
|
|
[bs,as] = butter(5,2*1.5*fc/fa);
|
|
|
|
slow = filter(bs,as,s);
|
|
|
|
subplot(6,1,3);
|
|
vgl = cos(2*pi*fc*t);
|
|
plot(t,slow,t,vgl);
|
|
|
|
noise = 0.5 * randn(size(slow));
|
|
|
|
sn = slow + noise;
|
|
|
|
subplot(6,1,4);
|
|
plot(t,sn);
|
|
|
|
sr = sn .* cos(2*pi*fc*t);
|
|
si = sn .* sin(2*pi*fc*t);
|
|
|
|
[b,a] = butter(5,2*fc/fa);
|
|
|
|
srlow = filter(b,a,sr);
|
|
silow = filter(b,a,si);
|
|
|
|
|
|
cmplxs = srlow + j*silow;
|
|
|
|
phase = angle(cmplxs);
|
|
|
|
|
|
m = zeros(size(phase));
|
|
|
|
for i = 1:size(t,2)
|
|
[tmp, idx] = min(abs(phase(i) - phases));
|
|
m(i) = idx-1;
|
|
endfor
|
|
|
|
subplot(6,1,5);
|
|
plot(t,phase,t,phases(m+1));
|
|
|
|
ds = zeros(1,datalen);
|
|
for i = 1:datalen;
|
|
ts = (i-1) * Tb;
|
|
te = i * Tb;
|
|
q = t > ts & t < te;
|
|
ds(i) = mean(m(q)) > 0.5;
|
|
endfor
|
|
|
|
subplot(6,1,6)
|
|
err = (ds != d);
|
|
cla
|
|
stem(n(~err),ds(~err))
|
|
hold on;
|
|
stem(n(err),ds(err),'rx')
|
|
hold off;
|