%transformacja Hilberta - modulacja amplitudy
clear all; close all;

Nh = 15;	%polowa dlugolci odpowiedzi impulsowej filtru Hilb.
n=-Nh:-1;   h = [(1-(-1).^n)./(pi*n), 0];
n = 1:Nh;   h = [h, (1-(-1).^n)./(pi*n)];

%figure;  stem(h); grid on; title('odpowiedz impulsowa filtru Hilberta');

w = hanning(2*Nh+1)';   
w = hamming(2*Nh+1)';   
w = blackman(2*Nh+1)'; 
h = w.*h;

W = linspace(0, pi, 1000);
H=freqz(h,1,W,2*pi*1);
figure; 
plot(W/2/pi,abs(H), 'LineWidth', 2); grid
ylabel('wzmocnienie [dB]'); xlabel('omega/2pi'); title('fragment ch-ki amplitudowej'); 
axis([0, 0.5, 0, 1.1]);

%generuj sygnal
N = 8*2*Nh;
n = 0:N-1;
a = 1+cos(2*pi*0.005*n);
%a = 1;
%a = n;
figure; 
plot(a, 'LineWidth', 2); grid, title('sygnal modulujacy');

x = a.*sin(2*pi*0.12*n);
figure; 
plot(n, x, 'b', n, a, 'r', 'LineWidth', 2); grid; title('sygnal zmodulowany amplitudowo'); 


N = length(x);
xi = filter(h, 1, x);
xr = [zeros(1, Nh), x(1:N-Nh)];			%oponienie kompensujace nieprzyczynowosc filtru Hilberta
xa = xr + j*xi; %sygnal analityczny

xa = xa(2*Nh:N);		%pomin czes poczatkowa sygnalu wynikajaca z 'najezdzania' filtru

figure; 
n = 1:length(xa);
plot(n, real(xa), 'r', n, imag(xa), 'g', 'LineWidth', 2); grid; title('czesc rzeczywista i urojona syg. analit.');
axis('tight');

% figure; 
% plot(xa, 'LineWidth', 2); grid; title('Lissajous - elipsa'); 
% axis('tight');

a_hat = sqrt(real(xa).^2 + imag(xa).^2);
figure; 
plot(a_hat, 'LineWidth', 2); grid; title('syg. po demodulacji');
axis('tight');

e = a_hat - a(Nh:N-Nh);
figure;
plot(e); grid; title('blad demodulacji'); title(['rms:' num2str(sqrt(mean(e.^2)))])
