Podstawy arytmetyki stałoprzecinkowej
Autorzy: Wojciech Półchłopek, Roman Rumian, Paweł Turcza
Pliki: rozdzial_11.zip
Przykład 11.1
(plik przyklad_11_1.m).Przykład 11.2
Przykład (plik przyklad_11_2.m) zjawiska cykli granicznych dla formatu Qm.n% Przykład 11.2:
% m-plik: przyklad_11_2.m
%
% Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014.
% Rozdział 11: Podstawy artymetyki stałoprzecinkowej.
% Autorzy rozdziału: Wojciech Półchłopek, Roman Rumian, Paweł Turcza.
%
% Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl
%
% Opracowanie przykładu: marzec 2014 r./WP/RR.
clc; clear; close all;
nb=1; mb=3; % liczba bitów przed- i za przecinkiem;
y_max=2^(nb-1)-2^(-mb); y_min=-2^(nb-1); % wyznaczamy wartosci: maksymalną i minimalną zakresu;
q=2^(-mb); % wyznaczamy krok kwantyzacji;
a=[1, -0.875, 0.625]; % współczynniki mianownika transmitancji filtra [1, -7/8, 5/8];
b=[0,0,1]; % współczynniki licznika transmitancji filtra;
[z,p,K]=tf2zp(b,a); % sprawdzamy bieguny filtra (wektor p);
p
x=[0.375, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; %wymuszenie;
y=[0, 0]; % inicjalizacja wektora wyjściowego;
% filtrowanie:
for n=1:24;
y0=-a(2)*y(n+1)-a(3)*y(n)+x(n); % próbka wyjściowa - filtracja;
if y0>y_max, y0=y_max; elseif y0<y_min, y0=y_min; end; % ograniczenie (nasycenie);
y(n+2)=round(y0/q)*q; % kwantyzacja;
end;
y_test=filter(b,a,x); % dla porównania - bez kwantyzacji;
figure(1); n=1:24;
plot(n,y_test(n),'rx'); grid on; hold on;
stem(n,y(n));
xlabel('n'); ylabel('y(n)'); title('Cykle graniczne');
legend('bez kwantyzacji','z kwantyzacja');
% KONIEC PRZYKŁADU 11.2.
Przykład 11.3
Przykład (plik przyklad_11_3.m) wyliczenia położeń na płaszczyźnie zespolonej biegunów sekcji drugiego rzędu dla formatu Qm.n, przy 8-bitowej kwantyzacji współczynników.% Przykład 11.3:
% m-plik: przyklad_11_3.m
%
% Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014.
% Rozdział 11: Podstawy artymetyki stałoprzecinkowej.
% Autorzy rozdziału: Wojciech Półchłopek, Roman Rumian, Paweł Turcza.
%
% Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl
%
% Opracowanie przykładu: marzec 2014 r./WP/RR.
clc; clear; close all;
nb=2; mb=4; % liczba bitów przed- i za przecinkiem;
q=2^(-mb); % krok kwantyzacji;
a1=-2^(nb-1):q:2^(nb-1)-q; % możliwe wartości współczynnika a1 po kwantyzacji;
a2=-2^(nb-1):q:2^(nb-1)-q; % możliwe wartości współczynnika a2 po kwantyzacji;
mm = 1;
zakres = 0;
for na1=1:length(a1),
for na2=1:length(a2),
a=[1, a1(na1), a2(na2)]; % wektor współczynników mianownika transmitancji filtra;
pp = roots(a); % oblicz pierwiastki (bieguny);
if (max(abs(pp)) < 1-eps), % sprawdź warunek stabilności (z zapasem równym zmiennej wbudowanej "eps");
p(mm)= pp(1);
mm = mm + 1;
p(mm)= pp(2);
mm = mm + 1;
end;
end;
end;
figure(1); h=gcf; close(h); % przygotowanie rysunku dla "zplane(0,0,1)";
zplane(0,0,1); hold on;
plot(p,'b.');
% KONIEC PRZYKŁADU 11.3.
Przykład 11.4
Przykład (plik przyklad_11_4.m) możliwych położeń bieguna sekcji pierwszego rzędu, mającego tylko jeden współczynnik zespolony w formacie Qm.n, przy kwantyzacji 7-bitowej.% Przykład 11.4:
% m-plik: przyklad_11_4.m
%
% Cyfrowe przetwarzanie sygnałów. Podstawy, multimedia, transmisja. PWN, Warszawa, 2014.
% Rozdział 11. Podstawy arytmetyki stałoprzecinkowej.
% Autorzy rozdziału: Wojciech Półchłopek, Roman Rumian, Paweł Turcza.
%
% Więcej na stronie internetowej: http://teledsp.kt.agh.edu.pl
%
% Opracowanie przykładu: kwiecien 2014 r./WP/RR.
clc; clear; close all;
mb=5; % liczba bitów za przecinkiem (przed przecinkiem z założenia jest 1 bit);
q=2^(-mb);
Re_a1=-1:q:1-q; % wynikające z kwantyzacji możliwe wartości części rzeczywistej współczynnika a1;
Im_a1=-1:q:1-q; % wynikające z kwantyzacji możliwe wartości części urojonej współczynnika a1;
mm = 1;
zakres = 0;
for n_Re=1:length(Re_a1),
for n_Im=1:length(Im_a1),
p0=Re_a1(n_Re)+i*Im_a1(n_Im);
if (abs(p0) < 1-eps), % sprawdzanie warunku stabilności;
p(mm)=p0;
mm = mm + 1;
end;
end;
end;
% rysowanie wyniku:
figure(1); h=gcf; close(h); % przygotowanie rysunku dla "zplane(0,0,1)";
zplane(0,0,1); hold on;
plot(p,'b.');
% KONIEC PRZYKŁADU 11.4.