Próbuję w Matlabie zasymulować demodulator amplitudy oparty na transformacie Hilberta.W skrócie metodę można opisać jako sqrt (HT(n)^2+s(n)^2), gdzie HT jest transformatą Hilberta, a s(n) sygnałem odebranym. Trzeba wziąć pod uwagę opóźnienie wprowadzane przez HT. W przypadku filtru przyczynowego o długości N=2M+1 próbek opóźnienie wynosi M próbek. N-ta próbka na wyjściu transformaty Hilberta odpowiada M+1 próbce wejściowej.
Jeżeli podaję sygnał odebrany na transformator Hilberta, to dopiero M+1 próbka wejściowa ma swój odpowiednik na wyjściu transformaty Hilberta. Chciałabym, żeby każda z próbek sygnału zmodulowanego miała swój odpowiednik, dlatego też przed splotem sygnału zmodulowanego z odpowiedzią impulsową poszerzyłam sygnał zmodulowany o M zer na początku i na końcu. Nie przyniosło to oczekiwanego rezultatu, bo z tego co widzę, to na początku i na końcu mojego sygnału zdemodulowanego występują błędy. Dopiero po odcięciu po M próbek na początku i końcu sygnału zdemodulowanego uzyskuje sygnał modulujący (pomniejszony o M próbek na początku i końcu).
Co zrobić, aby prawidłowo zdemodulować cały sygnał odebrany, nie tracąc żadnej z próbek ?
Poniżej zamieszczam kod programu w Matlabie.
Jeżeli podaję sygnał odebrany na transformator Hilberta, to dopiero M+1 próbka wejściowa ma swój odpowiednik na wyjściu transformaty Hilberta. Chciałabym, żeby każda z próbek sygnału zmodulowanego miała swój odpowiednik, dlatego też przed splotem sygnału zmodulowanego z odpowiedzią impulsową poszerzyłam sygnał zmodulowany o M zer na początku i na końcu. Nie przyniosło to oczekiwanego rezultatu, bo z tego co widzę, to na początku i na końcu mojego sygnału zdemodulowanego występują błędy. Dopiero po odcięciu po M próbek na początku i końcu sygnału zdemodulowanego uzyskuje sygnał modulujący (pomniejszony o M próbek na początku i końcu).
Co zrobić, aby prawidłowo zdemodulować cały sygnał odebrany, nie tracąc żadnej z próbek ?
Poniżej zamieszczam kod programu w Matlabie.
clear all;
close all
% MODULACJA AMPLITUDY
% Parametry fali nośnej
Ac=2; % Amplituda [V]
fc=20*10^3 % Częstotliwość sygnału nośnego
fic=0; % Faza [deg]
%Parametry sygnału modulującego
fm=0.6*10^3 % Częstotliwość sygnału modulującego [Hz]
fim=0; % Faza sygnału modulującego [deg]
m=0.5 ; % Głębokość modulacji
to=30*10^-3; % Czas obserwacji [s]
Fs=44*10^3; % Częstotliwość próbkowania [Hz]%
fic=fic*pi/180; % Faza fali nośnej [rad]
fim=fim*pi/180; % Faza sygnału modulujacego[rad]
Nx=to*Fs; % Numer ostatniej próbki
n=0:Nx;
modulujacy=sin(2*pi*fm/Fs*n+fim);
%sygnał zmodulowany
zmodulowany=Ac*(1+m*modulujacy).*sin(2*pi*fc/Fs*n+fic);
% DEMODULACJA AMPLITUDY
% generacja współczynników transformatora Hilberta
% z nałożonym oknem Blackamana
M=100; % polowa dlugosci filtru
N=2*M+1;
n=1:M;
h=(2/pi)*sin(pi*n/2).^2./n; %połowa odpowiedzi impulsowej
h=[-h(M:-1:1) 0 h(1:M)]; % cała odpowiedź impulsowa filtru
%okno
w=blackman(N);
w=w';
hw=h.*w;
figure(1)
stem(hw);title('Odpowiedz impulsowa transformatora Hilberta');xlabel('Numer probki');
% poszerzenie sygnału zmodulowanego o M próbek zerowych na koncu i
% początku, żeby po transformacie Hilberta (po obcięciu N-1 próbek stanu
% przejsciowego na poczatku i koncu) pierwsza próbka sygnału na wyjsciu HT
% odpowiadala pierwszej probce sygnalu "zmodulowany"
zmodulowany_poszerzony=([zeros(1,M) zmodulowany zeros(1,M)]);
%splot sygnału zmodulowany_poszerzony z odp. imp HT
hilb=conv(hw,zmodulowany_poszerzony); %
hilb=hilb(N:length(hilb)-(N-1)); % odciecie N-1 probek stanu przejsciowego z obu stron
% sqrt ( HT^2+zmodulowany^2)
for i=1:length(hilb);
zdemodulowany(i)=(((sqrt((zmodulowany(i)).^2+(hilb(i)).^2))-Ac)/(m*Ac));
end
figure(2);
subplot(3,1,1);
plot(zdemodulowany);title('Sygnal zdemodulowany (niebieski)');hold on; plot(modulujacy,'r'); hold off;
subplot(3,1,3);
plot(zdemodulowany(M+1:length(zdemodulowany)-M));title('Sygnal zdemodulowany po ucieciu po M probek z obu stron');hold on; plot(modulujacy(M+1:length(modulujacy)-M),'r'); hold off;