{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "Yyyeym-VC3Bq" }, "source": [ "# Laboratorul 9\n", "\n", "Rezolvați exercițiile de mai jos în celulele care v-au fost puse la dispoziție. La final, rulați tot notebook-ul și asigurați-vă că nu aveți erori. Salvați fișierul și încărcați-l în assignment-ul de Teams corespunzător grupei voastre." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "KUu8KcQ_BAXh" }, "outputs": [], "source": [ "import numpy as np\n", "import scipy.signal\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": { "id": "qTj85twMC6Wq" }, "source": [ "## Exercițiul 1\n", "\n", " Scrieți câte o funcție prin care să construiți o **fereastră dreptunghiulară**, respectiv o **fereastră de tip Hanning**. Funcțiile primesc ca parametru **lungimea ferestrei**.\n", "\n", " Generați și afișați o sinusoidă cu frecvență $f = 100 \\, \\text{Hz}$, amplitudine unitară și fază nulă, apoi treceți-o prin cele două tipuri de ferestre (pentru lungimea $N_w = 200$) și afișați grafic rezultatul." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "GOTcHOGxE1T4" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "id": "iqjUTeNSDX16" }, "source": [ "## Exercițiul 2\n", "\n", "Fișierul `traffic-one-week.csv` conține date de trafic colectate pe o perioadă de o săptămână. Perioada de eșantionare este de o oră, iar valorile măsurate reprezintă numărul de vehicule care trec printr-o intersecție." ] }, { "cell_type": "markdown", "metadata": { "id": "GzbhJLFJSHvj" }, "source": [ "### Subpunctul a)\n", "\n", "Încărcați datele în memorie și selectați din semnalul dat o porțiune corespunzătoare pentru **3 zile**, `x`, pe care veți lucra în continuare." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "XVsXxaqXDkIw" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "id": "PuIFVaSk9KNo" }, "source": [ "### Subpunctul b)\n", "\n", "Utilizați funcția `np.convolve(x, np.ones(w), 'valid') / w` pentru a realiza un filtru de tip medie alunecătoare și neteziți semnalul obținut anterior. Setați dimensiuni diferite ale ferestrei (variabila `w` în codul de mai sus), spre exemplu $5$, $9$, $13$, $17$. Afișați grafic semnalele obținute." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "d219NmtJ9KUf" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "id": "R9SF1hBg9Qia" }, "source": [ "### Subpunctul c)\n", "\n", "Dorinți să filtrați **zgomotul** (frecvențe înalte) din semnalul cu date de trafic. Alegeți o **frecvență de tăiere** pentru un filtru trece-jos pe care îl veți crea în subpunctul următor. Argumentați alegerea făcută.\n", "\n", "**Indicație:** transformata Fourier a semnalului, calculată în laboratorul anterior, ar putea să vă ajute cu luarea acestei decizii.\n", "\n", "Pe lângă valoarea frecvenței în Herzi, determinați și valoarea ei normalizată între 0 și 1, unde 1 reprezintă frecvența Nyquist pentru semnalul de trafic." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "lsxpQZb29SS-" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "id": "dz2nGs869Sz2" }, "source": [ "### Subpunctul d)\n", "\n", "Utilizați funcția `scipy.signal.butter`, respectiv funcția `scipy.signal.cheby1`, pentru a **proiecta** filtrele Butterworth și Chebyshev de ordin 5, cu frecvența de tăiere $W_n$ (valoare normalizată), stabilită la subpunctul anterior.\n", " \n", "Pentru început, setați atenuarea ondulațiilor la `rp = 5` (dB), urmând ca apoi să încercați și alte valori." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "wn4jyCNc9TYe" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "id": "Nidyg6sH-AKy" }, "source": [ "### Subpunctul e)\n", "\n", "**Filtrați** datele de trafic cu cele 2 filtre și afișați semnalele filtrate împreună cu datele brute. Ce filtru alegeți dintre cele două și de ce?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "4pZ97iw_-BDO" }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": { "id": "8qH4De4n-Beq" }, "source": [ "### Subpunctul f)\n", "\n", "Reproiectați filtrele alegând atât un ordin mai mic, cât și unul mai mare. De asemenea, reproiectați filtrul Chebyshev cu alte valori ale `rp` și observați efectul.\n", "\n", "Stabiliți **valorile optime** ale parametrilor pentru a vă atinge scopul (cel de a filtra zgomotul din semnal)." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "gNK3T5Eg-D9q" }, "outputs": [], "source": [] } ], "metadata": { "colab": { "authorship_tag": "ABX9TyOiF/xZYuNM+0wcPX/z1DIf", "provenance": [] }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "name": "python" } }, "nbformat": 4, "nbformat_minor": 0 }