nahue-passano commited on
Commit
9438940
1 Parent(s): ad3bdee

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -0
app.py ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import numpy as np
3
+ import matplotlib.pyplot as plt
4
+
5
+
6
+ def main():
7
+ st.set_page_config(layout="wide")
8
+ st.title(
9
+ "Procesamiento Digital de Señales - UNTREF \n ## Spectral Leakage en la DFT"
10
+ )
11
+ st.divider()
12
+ signal_expression, signal_settings = st.columns(2)
13
+
14
+ with signal_settings:
15
+ st.markdown("### Parámetros de la señal")
16
+ num_samples = st.slider(
17
+ "Cantidad de Muestras", min_value=4, max_value=64, value=8, step=1
18
+ )
19
+
20
+ freq = st.slider(
21
+ r"$\omega_0$",
22
+ min_value=-np.pi,
23
+ max_value=np.pi,
24
+ value=0.0,
25
+ step=np.pi / 64,
26
+ )
27
+ with signal_expression:
28
+ freq_samples = int(np.round(64 * freq / np.pi))
29
+ st.markdown("### Señal analizada:")
30
+ with st.columns(3)[1]:
31
+ st.markdown(f"# $$e^{{j\\frac{{{freq_samples}}}{{64}}\pi}}$$")
32
+
33
+ samples = np.arange(num_samples)
34
+ signal = np.exp(1j * (freq) * samples)
35
+
36
+ dft_result = np.fft.fftshift(np.fft.fft(signal))
37
+ dft_result = dft_result / np.max(np.abs(dft_result))
38
+ dft_freqs = np.fft.fftshift(np.fft.fftfreq(len(signal)))
39
+
40
+ dtft_samples = 2048
41
+ dtft_result = np.fft.fftshift(np.fft.fft(signal, dtft_samples))
42
+ dtft_result = dtft_result / np.max(np.abs(dtft_result))
43
+ dtft_freqs = np.fft.fftshift(np.fft.fftfreq(dtft_samples))
44
+
45
+ dft_freqs_rad = 2 * np.pi * dft_freqs
46
+ dtft_freqs_rad = 2 * np.pi * dtft_freqs
47
+
48
+ # Plot the signals
49
+ fig = plt.figure(figsize=(10, 4))
50
+ plt.axvline(freq, color="black", alpha=0.5, linestyle=":", label=r"$\omega_0$")
51
+ plt.plot(dtft_freqs_rad, np.abs(dtft_result), color="red", label="DTFT")
52
+ plt.stem(dft_freqs_rad, np.abs(dft_result), markerfmt="C0o", label="DFT")
53
+ plt.axvline(np.pi, color="black", linestyle="--")
54
+ plt.axvline(-np.pi, color="black", linestyle="--")
55
+
56
+ plt.xlabel("Frecuencia angular [rad]")
57
+ plt.ylabel("Magnitud de la transformada normalizada")
58
+ plt.ylim(0, 1.1)
59
+ plt.xlim(-np.pi - 0.1, np.pi + 0.1)
60
+ plt.xticks(
61
+ np.linspace(-np.pi, np.pi, 9),
62
+ [
63
+ r"$-\pi$",
64
+ r"$-\frac{3}{4}\pi$",
65
+ r"$-\frac{\pi}{2}$",
66
+ r"$-\frac{\pi}{4}$",
67
+ r"0",
68
+ r"$\frac{\pi}{4}$",
69
+ r"$\frac{\pi}{2}$",
70
+ r"$\frac{3}{4}\pi$",
71
+ r"$\pi$",
72
+ ],
73
+ )
74
+ plt.grid()
75
+ plt.legend(loc="upper right", framealpha=1, ncol=3, bbox_to_anchor=(0.65, 1.06))
76
+
77
+ plt.tight_layout()
78
+
79
+ st.pyplot(fig, use_container_width=True)
80
+
81
+
82
+ if __name__ == "__main__":
83
+ main()