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.