Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
M = length(p);
% Tolleranza per considerare poli con molteplicità > 1
EPS = 1e-4;
% Contatore per la molteplicità di un polo
m = 0;
% Iterazione sui poli
for i = 1:M
% Per considerare poli con molteplicità > 1
if (i > 1)
if abs(p(i) - p(i-1)) < EPS
m = m + 1;
else m = 0;
end
end
% Calcolo del coefficiente per la molteplicità
c = 1;
for j = 0:m-1
c = c * (n + m - j);
end
c = c / factorial(m);
% Calcolo della parte destra della sequenza
if (abs(p(i)) < Rmin)
% Monolatera destra
x = x + r(i) * c .* (p(i).^n) .* un;
elseif (abs(p(i) > Rmax))
% Monolatera sinistra 1
x = x - r(i) * c .* (p(i).^n) .* u_n;
else
% Errore: polo all'interno della regione di convergenza
x = [];
disp("Errore: polo all'interno della regione di convergenza");
return;
end
end
% Aggiunta dei contributi dei poli residui
if length(k) > 0
ind_of_zero = find(n == 0);
ncamp = min(length(k), length(n) - ind_of_zero + 1);
x(ind_of_zero:ind_of_zero + ncamp - 1) = x(ind_of_zero:ind_of_zero + ncamp - 1)
+ k(1:ncamp);
end
end 2
Esercizio 1 (esercizio 1.19 pag.53):
si scriva una funzione per generare una sequenza lunga N campioni, con un impulso discreto avente un ritardo
di k campioni rispetto al punto di inizio della sequenza (impulso.m), nel command window inseriamo:
N = 30;
k = 5;
% Genera una sequenza di impulso di lunghezza N centrato su k.
y = impulso(N, k);
% Sequenze di indici da 0 a N-1.
nn = 0:N-1;
% 'stem' per tracciare il grafico della sequenza.
stem(nn, y)
% Per un grafico con pallini pieni, usa la versione 'filled' di 'stem'.
stem(nn, y, 'filled');
% Imposta etichette dell'asse x e y e modifica il formato del carattere.
xlabel('n');
ylabel('y[n]');
% Imposta il formato del carattere sull'asse corrente.
set(gca, 'fontsize', 24);
% Abilita la modalità 'grid' per sovrascrivere i grafici.
grid on;
% Imposta i limiti dell'asse x e y nel grafico.
axis([0 29 0 1.5])
% Utilizza il comando 'print' per salvare il grafico in formato PDF con un nome
specifico.
%print -dpdf .bestfit 'nome_file_da_salvare.pdf'
Esercizio 2 (esercizio 1.21 pag.55):
si scriva una funzione che generi una sequenza esponenziale di N campioni con base reale o complessa
(esponenziale.m):
a = 0.95; % Imposta il valore di 'a' a 0.95.
% Genera una sequenza esponenziale di lunghezza N con il valore di 'a'.
y = esponenziale(N, a);
% Utilizza la funzione 'stem' per tracciare il grafico della sequenza 'y' con
pallini pieni.
stem(nn, y, 'filled');
% Imposta l'etichetta dell'asse x.
xlabel('n');
% Imposta l'etichetta dell'asse y con un'etichetta formattata contenente il valore
di 'a'.
ylabel(sprintf('y[n] = (%3.2f)^n', a));
N = 30; % Imposta il valore di N a 30.
% Calcola 'a' come un numero complesso utilizzando l'espressione fornita.
1
a = 0.95 * exp(1i * 2 * pi * 0.1);
% Genera una sequenza esponenziale di lunghezza N con il valore complesso 'a'.
y = esponenziale(N, a);
% Crea una sequenza di indici da 0 a N-1.
nn = 0:N-1;
% Estrae la parte reale della sequenza complessa 'y' e la memorizza in 'yre'.
yre = real(y);
% Estrae la parte immaginaria della sequenza complessa 'y' e la memorizza in 'yim'.
yim = imag(y);
% Crea un subplot 2x2 e seleziona il primo subplot (in alto a sinistra).
subplot(2, 2, 1);
% Utilizza la funzione 'stem' per tracciare il grafico della parte reale 'yre' con
pallini pieni.
stem(nn, yre, 'filled');
% Imposta l'etichetta dell'asse x.
xlabel('n');
% Imposta l'etichetta dell'asse y con un'etichetta formattata contenente il valore
di 'a'.
ylabel(sprintf('y[n] = Re[(%3.2f + j%3.2f)^n]', real(a), imag(a)));
% Imposta il formato del carattere sull'asse corrente.
set(gca, 'fontsize', 18);
% (Le righe successive seguono un pattern simile con alcune variazioni nei subplot
e negli stili di tracciamento.)
subplot(2, 2, 2);
stem(nn, yim, 'filled');
xlabel('n');
ylabel(sprintf('y[n] = \\Im[(%3.2f + j%3.2f)^n]', real(a), imag(a)));
set(gca, 'fontsize', 18);
subplot(2, 2, 3);
plot(y, 'o:');
xlabel('Re(y[n])');
ylabel('Im(y[n])');
set(gca, 'fontsize', 18);
% Imposta il formato dell'asse per avere un aspetto quadrato.
axis square;
% Imposta il formato dell'asse per avere un aspetto uguale.
axis equal;
% Imposta il formato del carattere sull'asse corrente.
set(gca, 'fontsize', 18);
Esercizio 3 (esercizio 1.23 pag.58):
si scriva una funzione che permetta di calcolare la trasformata di Fourier di una sequenza data (ft.m), e subito
dopo generiamo una funzione che calcola la trasfromata di fourier di una sequenza e genera il grafico della sua
ampiezza (ft_display.m):
% Imposta la frequenza della sinusoide a 0.05.
2