logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Detekcja AM z wykorzystaniem transformaty Hilberta (Matlab)

magdalena_gda 24 Kwi 2010 14:04 2457 0
REKLAMA
  • #1 7998163
    magdalena_gda
    Poziom 2  
    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.


    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; 
    
    
  • REKLAMA
REKLAMA