diff --git a/.direnv/flake-profile b/.direnv/flake-profile new file mode 120000 index 0000000..0c05709 --- /dev/null +++ b/.direnv/flake-profile @@ -0,0 +1 @@ +flake-profile-1-link \ No newline at end of file diff --git a/.direnv/flake-profile-1-link b/.direnv/flake-profile-1-link new file mode 120000 index 0000000..539ee0b --- /dev/null +++ b/.direnv/flake-profile-1-link @@ -0,0 +1 @@ +/nix/store/zcsc63f1ncp6p1nf533q6m35imm42z78-latex-env \ No newline at end of file diff --git a/Assignment1_211.pdf b/Assignment1_211.pdf new file mode 100644 index 0000000..42fdc6a Binary files /dev/null and b/Assignment1_211.pdf differ diff --git a/Assignment1_211.tex b/Assignment1_211.tex index 7f14d13..d608c4e 100644 --- a/Assignment1_211.tex +++ b/Assignment1_211.tex @@ -105,7 +105,7 @@ \begin{minipage}[b][4cm]{1.0\textwidth} \begin{center} \begin{bf} -\begin{large} Digitale Signalverarbeitung WS 2025/26 -- 1.~Aufgabe\end{large} \\ +\begin{large} Digitale Signalverarbeitung SS 2025/26 -- 2.~Aufgabe\end{large} \\ \vspace{0.3cm} \begin{Large} Analog Signals and Systems \end{Large} \\ \vspace{0.3cm} @@ -121,231 +121,115 @@ Quirin Ecker, k12310122 \\ \noindent \rule[0.8em]{\textwidth}{0.12mm}\\[-0.5em] %======================================================================================= +\begin{aufgabe} - -\begin{aufgabe}{} - -\begin{align*} -c_1 &= -5 + 3j -= \sqrt{(-5)^2 + 3^2}\, e^{j \arctan\left(\frac{3}{-5}\right)} -= \sqrt{34}\, e^{-j\,0.54} \\ -\end{align*} - -\begin{align*} -c_2 &= \frac{\sqrt{2}}{2} e^{-j \frac{3\pi}{4}} -= \frac{\sqrt{2}}{2} \cos\left(-\frac{3\pi}{4}\right) -+ j \frac{\sqrt{2}}{2} \sin\left(-\frac{3\pi}{4}\right) -= -\frac{1}{2} - \frac{1}{2}j \\ -\end{align*} - -\begin{align*} -c_3 &= \frac{1}{\sqrt{2}} + \frac{1}{\sqrt{2}}j -= \sqrt{\left(\frac{1}{\sqrt{2}}\right)^2 + \left(\frac{1}{\sqrt{2}}\right)^2} -\, e^{j \arctan\left(\frac{\frac{1}{\sqrt{2}}}{\frac{1}{\sqrt{2}}}\right)} -= e^{j \frac{\pi}{4}} \\ -\end{align*} - -\begin{align*} -c_4 &= c_1 + c_2 -= (-5 + 3j) + \left(-\frac{1}{2} - \frac{1}{2}j\right) -= -\frac{11}{2} + \frac{5}{2}j \\ -\end{align*} - -\begin{align*} -c_5 &= c_1 \cdot c_2 -= \left(\sqrt{34}\, e^{-j\,0.54}\right)\left(\frac{\sqrt{2}}{2} e^{-j \frac{3 \pi}{4}}\right) -\approx \sqrt{17} e^{-j\,2.8961} \\ -\end{align*} - -\begin{align*} -c_6 &= |c_3|^2 -= \left(\sqrt{\left(\frac{1}{\sqrt{2}}\right)^2 + \left(\frac{1}{\sqrt{2}}\right)^2}\right)^2 -= 1 \\ -\end{align*} - -\begin{align*} -c_7 &= \arg(c_3) = \frac{\pi}{4} \\ -\end{align*} - -\begin{align*} -c_8 &= \frac{c_1}{c_2} -= \frac{-5 + 3j}{-\frac{1}{2} - \frac{1}{2}j} -\cdot \frac{-\frac{1}{2} + \frac{1}{2}j}{-\frac{1}{2} + \frac{1}{2}j} \\ -&= \frac{(-5)(-\frac{1}{2}) + 3(-\frac{1}{2}) + j\left(3(-\frac{1}{2}) - (-5)(-\frac{1}{2})\right)}{\left(-\frac{1}{2}\right)^2 + \left(-\frac{1}{2}\right)^2} \\ -&= 2 - 8j \\ -\end{align*} - -\begin{align*} -c_9 &= c_1 \cdot c_1^* -= \sqrt{34}\, e^{-j\,0.54} \cdot \sqrt{34}\, e^{j\,0.54} -= 34 -\end{align*} -\end{aufgabe} - -\begin{aufgabe}{} - - -\[ - x(t) = \hat{X} \cos(2\pi f_0 t) \xleftrightarrow{} \iff X(f) = \frac{\hat{X}}{2} \delta(f - f_0) + \frac{\hat{X}}{2} \delta(f + f_0) \\ -\] - -\[ - x(t) = \hat{X}( \frac{1}{2} \cdot e^{j2\pi f_0 t} + \frac{1}{2} \cdot e^{-j2\pi f_0 t} ) -\] - -\[ - X(f) = \hat{X}( \frac{1}{2} \cdot \delta (f-f_0) + \frac{1}{2} \cdot \delta (f+f_0) ) -\] - -\[ - X(f) = \frac{\hat{X}}{2} \cdot \delta (f-f_0) + \frac{\hat{X}}{2} \cdot \delta (f+f_0) -\] - -\begin{center} - \includegraphics[width=0.95\textwidth]{fig/aufgabe2.png} -\end{center} - - - -\end{aufgabe} - -\begin{aufgabe}{} - -\begin{enumerate} - \item -\[ -\sin\left(2\pi f_i (t - 0.1)\right) = \sin\left(2\pi f_i t + \phi_i\right) -\] - -\[ -2\pi f_i (t - 0.1) = 2\pi f_i t + \phi_i -\] - -\[ -2\pi f_i (t - 0.1) - 2\pi f_i t = \phi_i -\] - -\[ -2\pi f_i \big((t - 0.1) - t\big) = \phi_i -\] - -\[ -\phi_i = 2\pi f_i (-0.1) = -0.1 \cdot 2\pi f_i -\] - -The fourier transform shift theorem states $x(t - T) \;\longleftrightarrow\; X(f)\, e^{-j 2\pi f T}$, where the angle is $2\pi fT$ and $T = 0.1$ in this case. Combining everything, we get $-0.1 \cdot 2\pi f_i$ which is equivalent to the result we got. - -\item Figures: - \begin{center} - \includegraphics[width=0.95\textwidth]{fig/aufgabe3_1.png} - \includegraphics[width=0.95\textwidth]{fig/aufgabe3_2.png} - \end{center} -\end{enumerate} - -\end{aufgabe} - - -\begin{aufgabe}{} - -\begin{itemize} - \item $y(t) = (x(t))^2$ - -\[ -y(t) = (x(t))^2 -\] - -\[ -y_1(t) = (\alpha x_1(t))^2 + (\beta x_2(t))^2 -\] - -\[ -= \alpha^2 (x_1(t))^2 + \beta^2 (x_2(t))^2 -\] - -\[ -y_2(t) = \alpha (x_1(t))^2 + \beta (x_2(t))^2 -\] - -\[ -y_1(t) \ne y_2(t) -\] - -\[ -\implies \text{Not linear} -\] - - -\[ - y_1(t) &= \left(x(t - \Delta)\right)^2 \\ -\] - -\[ - y_2(t) &= y_1(t - \Delta) = \left(x(t - \Delta)\right)^2 \\ -\] - -\[ - y_1 &= y_2 \\ -\] - -\[ -\implies \text{Time invariant} -\] - \item $y(t) = x(t) sin(\Omega_0 t)$ - -\[ - y(t) &= x(t) \sin(\Omega_0 t) \\ -\] - -\[ - y_1(t) &= \left( \alpha \, x(t) \sin(\Omega_0 t) \right) + \left( \beta \, x(t) \sin(\Omega_0 t) \right) \\ -\] - -\[ - y_t(t) &= \alpha \left( x(t) \sin(\Omega_0 t) \right) + \beta \left( x(t) \sin(\Omega_0 t) \right) \\ -\] - -\[ - y_1 &= y_2 -\] - -\[ - \implies \text{linear} -\] - - - - -\[ - y_1(t) = &\coloneqq x(t - \Delta) \sin(\Omega_0 t - \Delta) \\ -\] - -\[ - y_2(t) &= y_1(t - \Delta) = x(t - \Delta) \sin(\Omega_0 t - \Delta) \\ -\] - -\[ - y_1 &= y_2 \\ -\] - -\[ - \implies \text{Time invariant} -\] -\end{itemize} + \begin{enumerate} + \item add back in + \item add back in + \item add back in + \item add back in + \item (see assignment2\_1.m) + \item table: + \begin{table}[h] + \centering + \begin{tabular}{|c|c|c|} + \hline + Signal & Energy & Power \\ + \hline + $x_1[n]$ & 37 & -- \\ + $x_2[n]$ & 48.0394 & -- \\ + $x_3[n]$ & 1152 & 4.4825 \\ + $x_4[n]$ & 128.9565 & -- \\ + \hline + \end{tabular} + \caption{Energy and Power Values} + \label{tab:energy_power} + \end{table} + \end{enumerate} \end{aufgabe} \begin{aufgabe} \begin{enumerate} - \item System A is linear because there is no difference between the plot $T [x_1(t) + x_2(t)]$ and $T [x_1(t)] + T [x_2(t)]$. - You can also see in the error plot that the error is small. - It is not exactyly zero becuase rounding errors. - \item Input and output are not proportional in a non linear system and - therefore the error change is greater than the one of the linear system - \item The output sound of System B does differ when comparing $T [x_1(t) + x_2(t)]$ and $T [x_1(t)] + T [x_2(t)]$. - But is the same when using System A. This matches the differences in the graphs. + \item $|x[n]| + |h[n]| - 1 = 5 + 4 - 1 = 8$ + \item + \begin{gather*} + +A= +\begin{bmatrix} +3 & 0 & 0 & 0\\ +-1 & 3 & 0 & 0\\ +2 & -1 & 3 & 0\\ +0 & 2 & -1 & 3\\ +1 & 0 & 2 & -1\\ +0 & 1 & 0 & 2\\ +0 & 0 & 1 & 0\\ +0 & 0 & 0 & 1 +\end{bmatrix}, +\qquad +x= +\begin{bmatrix} +2\\ +3\\ +4\\ +1 +\end{bmatrix} + +Ax= +\begin{bmatrix} +6\\ +7\\ +13\\ +5\\ +9\\ +5\\ +4\\ +1 +\end{bmatrix} + \end{gather*} \end{enumerate} +\end{aufgabe} + +\begin{aufgabe} + + \begin{enumerate} + \item $L_y = |x[n]| + |h[n]| - 1 = 50 + 3 - 1 = 52$ + \item (see assignment2\_3.m) + \item see d) + \item figure: \\ + \includegraphics[width=0.95\textwidth]{fig/aufgabe3_cd.png} + \end{enumerate} + +\end{aufgabe} + +\begin{aufgabe} + + \begin{enumerate} + \item (see assignment2\_4.m) + \item Phase Response is very small in the realm of $10^{-15}$. The signal contians multiple bigger spikes. \\ + \includegraphics[width=0.95\textwidth]{fig/aufgabe4_b.png} + \item The magnitued seems to be repeating and the phase response seems to be mirrored accross the x and y axis. + \end{enumerate} + +\end{aufgabe} + + +\begin{aufgabe} + + \begin{enumerate} + \item (siehe assignment2\_5.m) + \item (siehe assignment2\_5.m) + \item figure: \\ + \includegraphics[width=0.95\textwidth]{fig/aufgabe5_c.png} + \item original energy: 41343 \\ reverb energy: 2069.0506 \\ rir energy: $9.9997 \cdot 10^{3}$ \\ + explanation: The rir energy is less than one which would explain why the outcoming signal is smaller than the original, because convulution scales proportionally. + \end{enumerate} + + + + \end{aufgabe} \end{document} diff --git a/Assignment2_211/assignment2_1.m b/Assignment2_211/assignment2_1.m new file mode 100644 index 0000000..b8928cb --- /dev/null +++ b/Assignment2_211/assignment2_1.m @@ -0,0 +1,62 @@ +clear +close all +clc + +% x1[n], -5 <= n <= 10 +n1 = -5:10; +x1 = -4*(n1 == -3) + 4*(n1 == 0) - (n1 == 3) + 2*(n1 == 7); + +% x2[n], -5 <= n <= 10 +n2 = -5:10; +x2 = exp(-0.31*n2); + +% x3[n], 0 <= n <= 256 +n3 = 0:256; +x3 = 3*sin(2*pi*(3.5/64)*n3); + +% x4[n], 0 <= n <= 256 +n4 = 0:256; +x4 = -cos((9/64)*n4); + + +% Visualization +figure; +subplot(121); hold on; grid on; +stem(n1, x1); +stem(n2, x2); +xlabel('n'); +ylabel('x[n]'); +legend('x_1[n]', 'x_2[n]'); + +subplot(122); hold on; grid on; +plot(n3, x3); +plot(n4, x4); +xlabel('n'); +ylabel('x[n]'); +legend('x_3[n]', 'x_4[n]'); + +% Custom power function +function [ P ] = custom_power( x ) + P = (1/length(x)) * sum(abs(x).^2); +end + +% Calculate and display the power +P3 = custom_power(x3); +% Display the calculated powers +disp(['Power of x_3[n]: ', num2str(P3)]); + +% Energy function +function [ W ] = energy( x ) + W = sum(abs(x).^2); +end + +% Calculate and display the energy of each signal +P1 = energy(x1); +P2 = energy(x2); +P3 = energy(x3); +P4 = energy(x4); +% Display the calculated powers +disp(['Energy of x_1[n]: ', num2str(P1)]); +disp(['Energy of x_2[n]: ', num2str(P2)]); +disp(['Energy of x_3[n]: ', num2str(P3)]); +disp(['Energy of x_4[n]: ', num2str(P4)]); diff --git a/Assignment2_211/assignment2_3.m b/Assignment2_211/assignment2_3.m new file mode 100644 index 0000000..b8dc7f8 --- /dev/null +++ b/Assignment2_211/assignment2_3.m @@ -0,0 +1,39 @@ +clear +close all +clc + + +% Convolution function +function [ Y ] = convolution( h, x ) + Ny = length(x)+length(h)-1 + Y = zeros(1, Ny); + for n = 1:Ny + for i = 1:length(h) + if (n-i+1 >= 1) && (n-i+1 <= length(x)) + Y(n) = Y(n) + h(i) * x(n-i+1) + end + end + end +end + +n = 0:49 +hn = [0.25, 0.5, 0.25] +xn = cos(((2*pi)/20)*n) + +% Perform convolution of xn and hn +Y = convolution(hn, xn); +Y2 = conv(xn, hn) + +% Plot the results +plot(Y); +xlabel('Sample Index'); +ylabel('Amplitude'); +title('Convolution Result'); +grid on; + +% Plot Y2 on same graph +hold on; +plot(Y2, '--'); +legend('Custom Convolution', 'MATLAB conv Function'); +hold off; + diff --git a/Assignment2_211/assignment2_4.m b/Assignment2_211/assignment2_4.m new file mode 100644 index 0000000..2a39406 --- /dev/null +++ b/Assignment2_211/assignment2_4.m @@ -0,0 +1,29 @@ +function X = dtft ( x , n , w ) + % DTFT Computes Discrete-time Fourier transform + % @param x : finite duration sequence (vector) over n + % @param n : sample indices vector + % @param w : frequency vector + % @return X : DTFT of x[n] at frequencies w + % this function does not use for loops + X = sum(x(:) .* exp(-1j * n(:) * w), 1); +end + +n = -10:10; +x = (0.8) .^ abs(n) .* ((n >= -10) & (n < 11)); +w = linspace(-pi, pi, 1000); + +X = dtft(x, n, w); + +magnitude = abs(X); +phase = angle(X); +figure; +subplot(2, 1, 1); +plot(w, magnitude); +title('Magnitude Response'); +xlabel('Frequency (rad/sample)'); +ylabel('|X(w)|'); +subplot(2, 1, 2); +plot(w, phase); +title('Phase Response'); +xlabel('Frequency (rad/sample)'); +ylabel('Phase(rad)'); diff --git a/Assignment2_211/assignment2_5.m b/Assignment2_211/assignment2_5.m new file mode 100644 index 0000000..215fcd2 --- /dev/null +++ b/Assignment2_211/assignment2_5.m @@ -0,0 +1,42 @@ +% Read and play original audio +[audio, fs] = audioread('./audio.wav'); +%sound(audio, fs); + +% Read and play room impulse response (RIR) +[rir, fs_rir] = audioread('./rir.wav'); +%sound(rir, fs_rir); + +% Apply convolution (reverb effect) +audio_reverb = conv(audio, rir); + +%sound(audio_reverb, fs); + +% Plot the waveforms +figure; + +% Original audio +subplot(2,1,1); +plot(audio); +title('Original Audio'); +xlabel('Sample Number'); +ylabel('Amplitude'); + +% Reverberated audio +subplot(2,1,2); +plot(audio_reverb); +title('Audio with Reverb'); +xlabel('Sample Number'); +ylabel('Amplitude'); + +% Calculate signal energy +function [ W ] = energy( x ) + W = sum(abs(x).^2); +end + +energy_rir = energy(rir) +energy_original = energy(audio) +energy_reverb = energy(audio_reverb) + +% Display energy values +fprintf('Original Audio Energy: %.4f\n', energy_original); +fprintf('Reverberated Audio Energy: %.4f\n', energy_reverb); diff --git a/Assignment2_211/audio.wav b/Assignment2_211/audio.wav new file mode 100644 index 0000000..eef134a Binary files /dev/null and b/Assignment2_211/audio.wav differ diff --git a/Assignment2_211/rir.wav b/Assignment2_211/rir.wav new file mode 100644 index 0000000..23166d6 Binary files /dev/null and b/Assignment2_211/rir.wav differ diff --git a/fig/aufgabe3_cd.png b/fig/aufgabe3_cd.png new file mode 100644 index 0000000..99d7824 Binary files /dev/null and b/fig/aufgabe3_cd.png differ diff --git a/fig/aufgabe4_b.png b/fig/aufgabe4_b.png new file mode 100644 index 0000000..f6204b0 Binary files /dev/null and b/fig/aufgabe4_b.png differ diff --git a/fig/aufgabe5_c.png b/fig/aufgabe5_c.png new file mode 100644 index 0000000..f7757e8 Binary files /dev/null and b/fig/aufgabe5_c.png differ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..dfef1cd --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1778325437, + "narHash": "sha256-k2mUy6bm3dUviWmMCqkixBBSwfL9piisGqU41dq61Ns=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f4f40ee764efd448458bea3ee8b3de51dd2859aa", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +}