Przetworniki analogowo-cyfrowe i cyfrowo-analogowe
Autorzy: Wojciech Półchłopek, Roman Rumian
Pliki: rozdzial_09.zip
Przykład 9.1
Przykład (plik przyklad_9_1.m) kwantyzacji sygnału sinusoidalnego przez obcięcie i zaokrąglenie (próg odpowiednio na granicy i w środku przedziału Q).% Przykład 9.1: % m-plik: przyklad_9_1.m % % Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014. % Rozdział 9: Przetworniki analogowo-cyfrowe i cyfrowo-analogowe. % Autorzy rozdziału: Wojciech Półchłopek, Roman Rumian. % % Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl % % Opracowanie przykładu: marzec 2014 r. clc; clear; close all; b=3; q=2^(-(b-1)); % b - liczba bitów przetwornika A/C, q - krok kwantyzacji; N=2^8; fo=440; % dlugość ciągu x[n] oraz założona częstotliwość sygnału w Hz; fpr=11025; % częstotliwość próbkowania w Hz; Fo=fo/fpr; n=0:N-1; % częstotliowość unormowana i numery próbek; x=cos(2*pi*Fo*n); % tworzymy ciąg próbek o założonych parametrach; x1=x; x1(x+eps>1-q)=1-q; % korekta ze względu na asymetrię zakresów dla wartości dodatnich i ujemnych; xqr=floor((x1/q)+0.5)*q; % kwantyzacja z zaokrąglaniem (r=rounding); xqt=floor(x1/q)*q; % kwantyzacja z obcięciem (t=truncation); eqr=xqr-x; % błąd kwantyzacji z zaokrągleniem; eqt=xqt-x; % błąd kwantyzacji z obcięciem; w=hamming(N)'; X=fft(x.*w)/(N/2); AX_dB=20*log10(abs(X)+eps); % widmo amplitudowe DFT, w dB; X1=fft(xqt.*w)/(N/2); AX1_dB=20*log10(abs(X1)+eps); % widmo amplitudowe DFT, w dB; X2=fft(xqr.*w)/(N/2); AX2_dB=20*log10(abs(X2)+eps); % widmo amplitudowe DFT, w dB; % test funkcji przejścia dla obu sposobów kwantyzacji: x_test=-1:0.0001:1; x1_test=x_test; x1_test(x_test+eps>1-q)=1-q; % korekta ze względu na asymetrię zakresów dla wartości dodatnich i ujemnych; xqr_test=floor((x1_test/q)+0.5)*q; eqr_test=xqr_test-x_test; xqt_test=floor((x1_test/q))*q; eqt_test=xqt_test-x_test; F=(0:(N-1))/(N); % opis osi dla wykresów widm w częstotliwości unormowanej [Hz/Hz]; figure(1); subplot(2,1,1); plot(x_test,x_test,'k.-'); grid on; hold on; plot(x_test,xqr_test,'ro-','markersize',5,'markerface','r'); plot(x_test,xqt_test,'b.-'); title('Porównanie funkcji przejscia dla dwóch metod kwantyzacji'); legend('bez zmian','kwantyzacja z zaokraglaniem','kwantyzacja z obcieciem',4); subplot(2,1,2); plot(x_test,eqr_test,'ro-','markersize',5,'markerface','r'); grid on; hold on; plot(x_test,eqt_test,'b.-'); title('Porównanie bledu kwantyzacji'); legend('z zaokraglaniem','z obcieciem',1); figure(2); n=0:64; ms=5; plot(n, x(n+1),'bo-','markersize',ms); grid on; hold on; plot(n, xqr(n+1),'rs-','markersize',ms); plot(n, eqr(n+1),'kv-','markersize',ms); title('Kwantyzacja z zaokraglaniem'); xlabel('n'); ylabel('x[n], x_q[n], e_q[n]'); legend('sygnal x[n]','sygnal skwantowany','wartosci bledu kwantyzacji',0); xlim([0,max(n)]); figure(3); plot(n, x(n+1),'bo-','markersize',ms); grid on; hold on; plot(n, xqt(n+1),'rs-','markersize',ms); plot(n, eqt(n+1),'kv-','markersize',ms); title('Kwantyzacja z obcieciem'); xlabel('n'); ylabel('x[n], x_q[n], e_q[n]'); legend('sygnal x[n]','sygnal skwantowany','wartosci bledu kwantyzacji',0); xlim([0,max(n)]); figure(4); plot(F,AX_dB,'bo-','markersize',4); grid on; hold on; plot(F,AX1_dB,'ro-','markersize',5); plot(F,AX2_dB,'ks-','markersize',2); title('Porównanie widm amplitudowych DFT'); xlabel('F [Hz/Hz]'); ylabel('Amplituda [dB]'); legend('dla sygnalu x[n]','po kwantyzacji z zaokragleniem','po kwantyzacji z obcieciem',1); axis([0,0.5,-80,0]); % KONIEC PRZYKŁADU 9.1.
Przykład 9.2
Przykład (plik przyklad_9_2.m) kształtowania szumu kwantyzacji modulatorami Σ-Δ I, II, i III rzędu.% Przykład 9.2: % m-plik: przyklad_9_2.m % % Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014. % Rozdział 9: Przetworniki analogowo-cyfrowe i cyfrowo-analogowe. % Autorzy rozdziału: Wojciech Półchłopek, Roman Rumian. % % Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl % % Opracowanie przykładu: marzec 2014 r. clc; clear; close all; b=12; q=2^(-(b-1)); % liczba bitów przetwornika A/C i krok kwantyzacji; N=2^12; % długość ciągu modelującego szum kwantyzacji; xn=(rand(N,1)-0.5)*q; % generowanie "szumu kwantyzacji"; h= [1, -1]; % odpowiedź impulsowa modulatora sigma delta w modelu z czasem-dyskretnym (filtr FIR); y1=filter(h,1,xn); % modulator I rzędu; y2=filter(h,1,y1); % modulator II rzędu; y3=filter(h,1,y2); % modulator III rzędu; y4=filter(h,1,y2); % modulator IV rzędu; % wyznaczamy charakterystyki częstotliwościowe (DFT) szumu wejściowego oraz na wyjściach modulatorów: fpr=4e6; f=0:fpr/N:fpr/N*(N-1); Xn=fft(xn); AXn_dB=20*log10(abs(Xn)+eps); Y1=fft(y1); AY1_dB=20*log10(abs(Y1)+eps); Y2=fft(y2); AY2_dB=20*log10(abs(Y2)+eps); Y3=fft(y3); AY3_dB=20*log10(abs(Y3)+eps); % Wykresy charakterystyk amplitudowych szumów na wyjściach modulatorów: figure(1); axis_v=[0,fpr/2/1e6,-100,-20]; subplot(4,1,1); plot(f/1e6,AXn_dB,'b'); grid on; title('DFT szumu kwantyzacji'); ylabel('Amplituda(dB)'); xlabel('f[MHz]'); axis(axis_v); subplot(4,1,2); plot(f/1e6,AY1_dB,'b'); grid on; ylabel('Amplituda(dB)'); xlabel('f[MHz]'); legend('DFT szumu po modulatorze S-D I rz.',4); axis(axis_v); subplot(4,1,3); plot(f/1e6,AY2_dB,'b'); grid on; ylabel('Amplituda(dB)'); xlabel('f[MHz]'); legend('DFT szumu po modulatorze S-D II rz.',4); axis(axis_v); subplot(4,1,4); plot(f/1e6,AY3_dB,'b'); grid on; ylabel('Amplituda(dB)'); xlabel('f[MHz]'); legend('DFT szumu po modulatorze S-D III rz.',4); axis(axis_v); % KONIEC PRZYKŁADU 9.2.
Przykład 9.3
Przykład (plik przyklad_9_3.m) zastosowania szumu dither o histogramie trójkątnym i prostokątnym do redukcji szumów kwantyzacji.% Przykład 9.3: % m-plik: przyklad_9_3.m % % Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014. % Rozdział 9: Przetworniki analogowo-cyfrowe i cyfrowo-analogowe. % Autorzy rozdziału: Wojciech Półchłopek, Roman Rumian. % % Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl % % Opracowanie przykładu: marzec 2014 r./WP/RR. clc; clear; close all; w=16; % Długość słowa w bitach (word length); q=2^(1-w); % Krok kwantyzacji N=1024; % Liczba próbek; n=0:N-1; % numery próbek; k=2^6; % numer elementu DFT (bez przecieku); Fo=k/N; % Unormowana częstotliwość; A=2^(-18); % Amplituda sygnału (wersja 1); %A=Q; % Amplituda sygnału (wersja 2) - należy przenieść znak komentarza powyżej; x=A*sin(2*pi*n*Fo); % Sygnał dyskretny; % Rectangular dither - "dither" prostokątny: r=rand(1,N); r=r-mean(r); r=r./max(abs(r)); % Normalizacja; d_rect=r*q/2; %Triangular Dither - "dither" trójkątny: r1=rand(1,N); r1=r1-mean(r1); r1=r1./max(abs(r1)); d_tri=(r+r1)*q/4; % amplituda szumu dither; xqt=floor(x/q)*q; % Kwantyzacja z obcięciem et=x-xqt; xqdt=floor((x+d_tri)/Q+0.5)*Q; % Dither trójkątny win=blackman(N)'; % Okno (wersja 1); % win=hann(N)'; % Okno (wersja 2) - należy przenieść znak komentarza powyżej; win=N*win/sum(win); % Skalowanie okna; Xt=abs(fft(xqt.*win))/(N/2); X2=abs(fft(xqdt.*win))/(N/2); thres_dB=-140; thres=10^(thres_dB/20); F=(0:(N-1))/(N); X2_dB=-140*ones(size(X2)); idx2=find(X2>thres); X2_dB(idx2)=20*log10(X2(idx2)+eps); X2_dB=20*log10(X2./0.5+eps); Xt_dB=-140*ones(size(Xt)); idx4=find(Xt>thres); Xt_dB(idx4)=20*log10(Xt(idx4)+eps); Xt_dB=20*log10(Xt./0.5+eps); figure(1) subplot(211) plot(xqt(1:100),'r');title('a)Kwantyzacja z obcięciem');hold on; stem(x(1:100));hold off xlabel('n \rightarrow'); ylabel(' x_q_t \rightarrow') subplot(212) plot(F,Xt_dB); title('b)Spektrogram dla obcinania'); axis([0 0.5 -140 -80]); grid on, xlabel('f/fp \rightarrow'); ylabel(' PDF{Q}(e^{j\Omega}) [dB] \rightarrow') figure(2) subplot(211) plot(xqdt(1:100)); title('a)Dither trójkatny') xlabel('n \rightarrow'); ylabel(' x_q_d_t \rightarrow') subplot(212) plot(F,X2_dB); title('b)Spektrogam dla trójkatnego dither`ingu'); axis([0 0.5 -140 -80]); grid on, xlabel('f/fp \rightarrow'); ylabel(' PDF{Q}(e^{j\Omega}) [dB] \rightarrow') % SNR_t=10*log10(sum(x.^2)/sum(et.^2)); % Spektra z ditheringiem figure(3) Xdt=abs(fft(d_tri.*win))/(N/2); Xdt_dB=-140*ones(size(Xdt)); idx7=find(Xdt>thres); Xdt_dB(idx7)=20*log10(Xdt(idx7)); Xdt_dB=20*log10(Xdt./0.5); subplot(211) [n_tri,x_tri]=hist(d_tri,20); bar(x_tri/Q,n_tri/sum(n_tri)) title('Histogram trójkątnego szumu dither'); subplot(212) plot(F,Xdt_dB); title('Spektrum trójkątnego szumu dither'); axis([0 0.5 -140 -80]); grid on, xlabel('f/fp \rightarrow'); ylabel(' PDF{Q}(e^{j\Omega}) [dB] \rightarrow') % KONIEC PRZYKŁADU 9.3.