Sterowanie dynamiką sygnału

Autorzy: Roman Rumian, Wojciech Półchłopek

Pliki: rozdzial_10.zip

Przykład 10.1

Przykład (plik przyklad_10_1.m) implementacji systemu AGC opartego na metodzie pomiaru poziomu sygnału za pomocą wartości szczytowej.
% Przykład 10.1:
% m-plik: przyklad_10_1.m
%
% Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014.
% Rozdział 10: Sterowanie dynamiką sygnału.
% Autorzy rozdziału: Roman Rumian, Wojciech Półchłopek.
%
% Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl
%
% Opracowanie przykładu: kwiecień 2014 r.

clc; clear; close all;

fpr=48000;                      % częstotliwość próbkowania, w [Hz];
dt=1/fpr;                       % odstęp między kolejnymi próbkami na osi czasu;
N=2^12;                         % liczba próbek;
n=0:N-1;                        % numery próbek sygnału;

fo=1000;                        % częstotliwość sygnału, w [Hz];
fa=fo/100;                      % częstotliwość modulacji amplitudy, w [Hz];
ax=abs(cos(2*pi*n*fa/fpr));     % zmienna w czasie amplituda sygnału;
x0=sin(2*pi*n*fo/fpr);          % sygnał o stałej amplitudzie;
x=x0.*ax;                       % generowanie sygnału wejściowego;

AT=0.4;                         % współczynnik wagowy "ataku", w [s];
RT=0.001;                       % współczynnik wagowy opadania, w [s];
ta=-2.2*dt/log(1-AT),           % stała czasowa ataku wyliczona ze współczynnika AT, w [s];
tr=-2.2*dt/log(1-RT),           % stała czasowa opadania wyliczona ze współczynnika RT, w [s];  

xPEAK(1)=0;
for n=2:N;
    ax=abs(x(n));
    dx=ax-xPEAK(n-1);
    if dx>0,
        xPEAK(n)=(1-AT)*xPEAK(n-1)+AT*ax;  % wyliczenie próbki obwiedni z użyciem "wagi ataku";
    else
        xPEAK(n)=(1-RT)*xPEAK(n-1);        % wyliczenie próbki obwiedni z użyciem "wagi opadania";
    end;    
end;

y=x0.*xPEAK;                    % weryfikacja efektu;

t=0:dt:(N-1)*dt;                % punkty na osi czasu, wyrażone w [s];

    figure(1);
        plot(t,x,'b.-');  grid on; hold on;
        plot(t,xPEAK,'k.-');
        plot(t,y,'r.-');
            title('Efekt dzialania algorytmu AGC z wykorzystaniem wartosci szczytowej');
            legend('sygnal wejsciowy','obwiednia','sygnal odtworzony z obwiedni',4);
            xlabel('t [s]');
            xlim([t(1),t(end)]);
            
% KONIEC PRZYKŁADU 10.1.

Przykład 10.2

Przykład (plik przyklad_10_2.m) systemu AGC opartego na metodzie pomiaru poziomu sygnału za pomocą wartości RMS.
% Przykład 10.2:
% m-plik: przyklad_10_2.m
%
% Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014.
% Rozdział 10: Sterowanie dynamiką sygnału.
% Autorzy rozdziału: Roman Rumian, Wojciech Półchłopek.
%
% Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl
%
% Opracowanie przykładu: kwiecień 2014 r.

clc; clear; close all;

fpr=48000;                      % częstotliwość próbkowania, w [Hz];
dt=1/fpr;                       % odstęp między kolejnymi próbkami na osi czasu;
N=2^12;                         % liczba próbek;
n=0:N-1;                        % numery próbek sygnału;

fo=1000;                        % częstotliwość sygnału, w [Hz];
fa=fo/100;                      % częstotliwość modulacji amplitudy, w [Hz];
ax=abs(cos(2*pi*n*fa/fpr));     % zmienna w czasie amplituda sygnału;
x0=sin(2*pi*n*fo/fpr);          % sygnał o stałej amplitudzie;
x=x0.*ax;                       % generowanie sygnału wejściowego;

TAV=0.005;                      % współczynnik wagowy "ataku", w [s];
tav=-2.2*dt/log(1-TAV),         % stała czasowa ataku wyliczona ze współczynnika AT, w [s];

xRMS2(1)=0;
for n=2:N;
    x2=x(n)^2;
    xRMS2(n)=(1-TAV)*xRMS2(n-1)+TAV*x2;  % wyliczenie próbki obwiedni z użyciem "wagi ataku";
end;
xRMS=sqrt(xRMS2);
y=x0.*xRMS;                     % weryfikacja efektu;

t=0:dt:(N-1)*dt;                % punkty na osi czasu, wyrażone w [s];

    figure(1);
        plot(t,x,'b.-');  grid on; hold on;
        plot(t,xRMS,'k.-');
        plot(t,y,'r.-');
            title('Efekt dzialania algorytmu AGC z wykorzystaniem wartosci RMS');
            legend('sygnal wejsciowy','obwiednia RMS','sygnal odtworzony z obwiedni',4);
            xlabel('t [s]');
            xlim([t(1),t(end)]);
            
% KONIEC PRZYKŁADU 10.2.

Przykład 10.3

Przykład (plik przyklad_10_3.m) implementacji systemu AGC opartego na metodzie pomiaru poziomu sygnału za pomocą modułu sygnału analitycznego.
% Przykład 10.3:
% m-plik: przyklad_10_3.m
%
% Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014.
% Rozdział 10: Sterowanie dynamiką sygnału.
% Autorzy rozdziału: Roman Rumian, Wojciech Półchłopek.
%
% Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl
%
% Opracowanie przykładu: kwiecień 2014 r.

clc; clear; close all;

fpr=48000;                      % częstotliwość próbkowania, w [Hz];
dt=1/fpr;                       % odstęp między kolejnymi próbkami na osi czasu;
N=2^12;                         % liczba próbek;
n=0:N-1;                        % numery próbek sygnału;

fo=1000;                        % częstotliwość sygnału, w [Hz];
fa=fo/100;                      % częstotliwość modulacji amplitudy, w [Hz];
ax=abs(cos(2*pi*n*fa/fpr));     % zmienna w czasie amplituda sygnału;
x0=sin(2*pi*n*fo/fpr);          % sygnał o stałej amplitudzie;
x=x0.*ax;                       % generowanie sygnału wejściowego;

% Projektujemy dyskretny filtr Hilberta (FIR):
        M=200;          m=-M:M;
        h=sinc(m/2).^2.*(pi*m/2);
        w=blackman(2*M+1)';        
        h=h.*w;                 % korekcja z użyciem okna;

% Powracamy do obliczeń:        
xH=conv(h,x);                   % wynik filtracji filtrem Hilberta;
xH=xH(M+1:M+1+N-1);             % kompensacja opóźnienia;

xMAX=sqrt(x.^2+xH.^2);          % wyznaczenie obwiedni;

y=x0.*xMAX;                     % weryfikacja efektu;

t=n*dt;                         % punkty na osi czasu, wyrażone w [s];

    figure(1);
        plot(t,x,'bo-','markersize',4);  grid on; hold on;
        plot(t,xMAX,'k.-');
        plot(t,y,'r.-');
            title('Efekt dzialania algorytmu AGC z wykorzystaniem filtru Hilberta');
            legend('sygnal wejsciowy','obwiednia x_M_A_X','sygnal odtworzony z obwiedni',1);
            xlabel('t [s]');
            xlim([t(1),t(end)]);            
            
% KONIEC PRZYKŁADU 10.3.