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.