{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from matplotlib import pyplot as plt\n", "from skimage.color import rgb2hed, hed2rgb\n", "from skimage import img_as_float, img_as_ubyte\n", "from skimage import data, io, filters, exposure\n", "from skimage import util\n", "import matplotlib as mp\n", "import numpy as np\n", "import math as mt\n", "\n", "from pylab import *\n", "from scipy import *\n", "\n", "from ipywidgets import *\n", "\n", "%matplotlib inline \n", "\n", "# ROZWAZANY PRZEDZIAL ([T0, T1])\n", "signalScale = [0.0, 20.0]\n", "# WYSWIETLANA SKALA NA WYKRESIE (DZIEDZINA CZASU)\n", "timePlotXScale = [0.0, 20.0]\n", "# WYSWIETLANA SKALA Y (DZIEDZINA CZASU)\n", "timePloyYScale = [-3.0, 3.0] \n", "\n", "def changeX(left = 10, right = 20, speed = 10.0):\n", " def dynamicX(x):\n", " result = x\n", " if x >= left and x <= right:\n", " angle = (x - left)/(right-left)*(mt.pi)\n", " shift = (mt.cos(angle + mt.pi) + 1.0) / 2.0\n", " result = result + shift * speed\n", " if x > right:\n", " result = result + 1.0 * speed\n", " return result\n", " return dynamicX\n", "\n", "def changeY(left = 5, right = 15, amplitude = 1.0):\n", " def dynamicY(y, x):\n", " result = y\n", " if x >= left and x <= right:\n", " angle = (x - left)/(right-left)*(2.0*mt.pi)\n", " shift = (mt.cos(angle + mt.pi) + 1.0) / 2.0\n", " result = y + shift * amplitude\n", " return result\n", " return dynamicY\n", "\n", "\n", "\n", "# KLASA SCENARIO\n", "# PO PROSTU LISTA SIGNALOW \n", "class Scenario(Widget):\n", " def __init__(self, signals):\n", " self.signals = signals\n", " \n", "# KLASA SYGNAL - PROSTY(SIN)\n", "class Signal:\n", " def __init__(self, amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color='blue', \n", " changeX=changeX(-1,-1,0), changeY=changeY(-1,-1,0)):\n", " self.amplitude = amplitude\n", " self.frequency = frequency\n", " self.phase = phase\n", " self.yTranslation = yTranslation\n", " self.color = color\n", " self.changeX = changeX\n", " self.changeY = changeY\n", " \n", " #LISTA X, Y DLA ZADANEGO PRZEDZIALU I CZESTOTLIWOSCI PROBKOWANIA\n", " def getDataForRange(self, scale, samplingFrequency):\n", " x = np.arange(scale[0], scale[1], 1.0 / samplingFrequency)\n", " fs = lambda a: (self.amplitude * mt.sin(self.phase + self.changeX(a) * self.frequency * 2.0 * mt.pi) + self.yTranslation)\n", " y = [self.changeY(fs(a), a) for a in x ]\n", " return x, y\n", "\n", "# WYLICZA WYNIKOWY SYGNAL ZE SKLADOWYCH\n", "def getFinalSignal(signals, samplingFrequency):\n", " x = []\n", " y = []\n", " for s in signals:\n", " data = s.getDataForRange(signalScale, samplingFrequency)\n", " if len(x) == 0: x = data[0]\n", " if not y: y = [0] * len(x)\n", " for i in range(len(x)):\n", " y[i] = y[i] + data[1][i]\n", " return x, y\n", " \n", "# --- RYSOWANIE WSZYSTKIEGO\n", "# --- SINGLE - NA WEJSCIU PARAMETRY DLA POJEDYNCZEGO SYGNALU\n", "# --- ALL - NA WEJSCIU SCENARIO\n", "\n", "\n", "\n", "def plotSingle( amplitude = 1.0, \n", " frequency = 0.5, \n", " phase = 0.0, \n", " yTranslation = 0.0,\n", " samplingFrequency = 10.0, \n", " showComponents = True, \n", " showFinal=False, \n", " showFrequencyDomain=False, \n", " showSymmetrical=False,\n", " showInverseFFT=False):\n", " \n", " scenario = Scenario([Signal(amplitude, frequency, phase, yTranslation)])\n", " plotAll(scenario, samplingFrequency, showComponents, showFinal, showFrequencyDomain, showSymmetrical, showInverseFFT)\n", " \n", "def plotAllWithNoiseCancel(scenario = Scenario([Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color='blue')]),\n", " samplingFrequency = 10.0, \n", " noiseThreshold = 10000.0,\n", " showComponents = True, \n", " showFinal=False, \n", " showFrequencyDomain=False, \n", " showSymmetrical=False, \n", " showInverseFFT=False,\n", " showSpectrogram=False,\n", " windowSize = 2.0,\n", " windowJump = 0.5):\n", " \n", " signals = scenario.signals\n", " \n", " # --- CONSTRUCT FIGURE AND SUBPLOTS ------------------------\n", " if showFrequencyDomain == True or showInverseFFT == True or showSpectrogram == True:\n", " column_width_pt = 1000.0\n", " else:\n", " column_width_pt = 500.0\n", " \n", " pt_per_inch = 72\n", " size = column_width_pt / pt_per_inch;\n", " height = 0.55\n", " \n", " total = 1\n", " if showFrequencyDomain == True: total = total + 1\n", " if showInverseFFT == True: total = total + 1\n", " if showSpectrogram == True: total = total + 1\n", " if total == 2: height = 0.37\n", " if total == 3: height = 0.37\n", "\n", " fig = plt.figure(1, figsize=(size, height * size))\n", " sub = fig.add_subplot(1, total, 1)\n", " if showFrequencyDomain == True:\n", " subFreq = fig.add_subplot(1, total, 2)\n", " if showInverseFFT == True:\n", " if (showFrequencyDomain == False):\n", " subIFFT = fig.add_subplot(1, total, 2)\n", " else:\n", " subIFFT = fig.add_subplot(1, total, 3)\n", "\n", " if showSpectrogram == True:\n", " subSpectr = fig.add_subplot(1, total, total)\n", " # ------------------------------------------------------\n", " # --- TIME DOMAIN --------------------------------------\n", " \n", " sub.set_xlabel('Time [s]')\n", " sub.set_ylabel('y = signal(x)')\n", " sub.grid('on', axis='both', color='gray', linewidth=1.25)\n", " \n", " sub.set_xlim(timePlotXScale)\n", " sub.set_ylim(timePloyYScale)\n", " \n", " if showComponents == True:\n", " for s in range(len(signals)):\n", " data = signals[s].getDataForRange(signalScale, samplingFrequency)\n", " #ŻEBY BYLO PRZEJRZYSCIEJ\n", " if (samplingFrequency < 8.0):\n", " sub.plot(data[0], data[1], marker='o', linestyle='---', color = signals[s].color)\n", " else:\n", " sub.plot(data[0], data[1], linestyle='-', color = signals[s].color)\n", " \n", " dataFinal = getFinalSignal(signals, samplingFrequency)\n", " if (showFinal):\n", " dataFinal = getFinalSignal(signals, samplingFrequency)\n", " sub.plot(dataFinal[0], dataFinal[1], linestyle='-', linewidth = 2.0, color = 'red')\n", " \n", " # ------------------------------------------------------\n", " # --- FREQUENCY DOMAIN --------------------------------------\n", " \n", " ind = np.arange(len(dataFinal[0])) # the x locations for the groups \n", " signal1 = np.fft.fft(dataFinal[1])\n", " signal2 = abs(signal1) /(0.5*len(dataFinal[0]))\n", " signal2[0] = signal2[0] / 2\n", "\n", " ffty = signal2\n", " freq = [v * samplingFrequency / len(dataFinal[0]) for v in ind]\n", " \n", " #signal1 = abs(signal1)/(0.5*n) \n", " \n", " # USUWAMY PASMO\n", " signal3 = []\n", " for i in range(len(freq)):\n", " if noiseThreshold <= samplingFrequency / 2:\n", " if freq[i] <= samplingFrequency / 2 and freq[i] >= noiseThreshold:\n", " ffty[i] = 0.0\n", " signal1[i] = 0.0\n", " if freq[i] >= samplingFrequency / 2 and freq[i] <= samplingFrequency - noiseThreshold:\n", " ffty[i] = 0.0\n", " signal1[i] = 0.0\n", " \n", " if showSymmetrical == False:\n", " freq = freq[0:int(len(signal2)/ 2)]\n", " ffty = ffty[0:int(len(signal2)/ 2)]\n", " \n", " if showFrequencyDomain == True:\n", " \n", " subFreq.set_xlabel('Frequency [Hz]')\n", " subFreq.set_ylabel('Amplitude')\n", " subFreq.grid('on', axis='both', color='gray', linewidth=1.25)\n", " \n", " #TRANSFORM\n", " width = 0.15\n", " x = [v - width / 2 for v in freq]\n", " subFreq.set_ylim([0.0, 5.0]) \n", " barFreq = subFreq.bar(x, ffty,width, color='blue')\n", " \n", " # ------------------------------------------------------\n", " # --- INVERSE FFT --------------------------------------\n", " if showInverseFFT == True:\n", " subIFFT.set_xlabel('Time [s]')\n", " subIFFT.set_ylabel('y = signal(x)')\n", " subIFFT.grid('on', axis='both', color='gray', linewidth=1.25)\n", " \n", " subIFFT.set_xlim(timePlotXScale)\n", " subIFFT.set_ylim(timePloyYScale)\n", " \n", " signalIFFT = np.fft.ifft(signal1)\n", " \n", " \n", " subIFFT.plot(dataFinal[0], np.real(signalIFFT), linestyle='-', linewidth = 2.0, color = 'red')\n", " \n", " # ------------------------------------------------------\n", " # --- SHOW SPECTROGRAM --------------------------------------\n", " if showSpectrogram == True:\n", " subSpectr.set_xlabel('Time [s]')\n", " subSpectr.set_ylabel('Frequency [Hz]')\n", " subSpectr.grid('on', axis='both', color='gray', linewidth=1.25)\n", " \n", " xlabel = []\n", " data = []\n", " \n", " labels = []\n", " timesX = 0\n", " \n", " start = 0;\n", " startInDomain = 0\n", " windowSizeInDomain = windowSize * samplingFrequency\n", " jumpInDomain = windowJump * samplingFrequency\n", " \n", " timesX = windowSize/2\n", " \n", " yticks = []\n", " \n", " while startInDomain + windowSizeInDomain <= len(dataFinal[0]):\n", " \n", " labels.append(timesX)\n", " timesX += windowJump\n", " #labels.append(windowJump)\n", " xlabel.append(start)\n", " \n", " \n", " portion = []\n", " for i in range(int(startInDomain), int(startInDomain + windowSizeInDomain)):\n", " portion.append(dataFinal[1][i])\n", " \n", " if yticks == []:\n", " yticks = np.arange(0, len(portion), 1)\n", " \n", " toAdd = abs(np.fft.fft(portion))/(0.5*len(portion))\n", " toAdd[0] = toAdd[0]/2\n", " if showSymmetrical == False:\n", " toAdd = toAdd[0:int(len(toAdd)/ 2)]\n", " \n", " data.append(toAdd)\n", " \n", " start += windowJump\n", " startInDomain += jumpInDomain\n", " \n", " \n", " npdata = np.array(data)\n", " npdata = np.transpose(npdata)\n", " \n", " \n", " print(timesX)\n", " xticks = np.arange(0, len(labels), 1)\n", " \n", " ylabels=[]\n", " for i in range(0, len(yticks)):\n", " freq=i/len(yticks) * samplingFrequency\n", " ylabels.append(freq)\n", " \n", " subSpectr.set_xticks(xticks)\n", " subSpectr.set_xticklabels(labels)\n", " \n", " subSpectr.set_yticks(yticks)\n", " subSpectr.set_yticklabels(ylabels)\n", " \n", " \n", " #subSpectr.set_xlim(0, len(npdata[0]))\n", " subSpectr.set_ylim(0, len(npdata))\n", " \n", " \n", " \n", " heatmap = subSpectr.pcolor(npdata)\n", " fig.colorbar(heatmap)\n", " \n", " \n", " plt.show()\n", " \n", "def plotSpectrogram(scenario = Scenario([Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color='blue')]),\n", " samplingFrequency = 10.0, \n", " showComponents = True, \n", " showFinal=False, \n", " showFrequencyDomain=False, \n", " showSymmetrical=False, \n", " showSpectrogram=False,\n", " windowSize = 2.0,\n", " windowJump = 0.5):\n", " \n", " plotAllWithNoiseCancel(scenario, samplingFrequency, 1000000.0, showComponents, showFinal, \n", " showFrequencyDomain, showSymmetrical, False, showSpectrogram,\n", " windowSize,\n", " windowJump)\n", " \n", " \n", "def plotAllWithNoiseCancelWithoutSpectrogram(scenario = Scenario([Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color='blue')]),\n", " samplingFrequency = 10.0, \n", " noiseThreshold = 10000.0,\n", " showComponents = True, \n", " showFinal=False, \n", " showFrequencyDomain=False, \n", " showSymmetrical=False, \n", " showInverseFFT=False):\n", " \n", " plotAllWithNoiseCancel(scenario, samplingFrequency, noiseThreshold, showComponents, showFinal, \n", " showFrequencyDomain, showSymmetrical, showInverseFFT, showSpectrogram=False,\n", " windowSize = 2.0,\n", " windowJump = 0.5)\n", " \n", "# --- WA - BEZ CZESCI PARAMETROW TRUE/FALSE - INACZEJ NIE WIEM JAK WYWALIC WIDGET Z INTERACT\n", "# --- WIFFT - BEZ PARAMETROW IFFT - INACZEJ NIE WIEM JAK WYWALIC WIDGET Z INTERACT\n", "def plotAll(scenario = Scenario([Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color='blue')]),\n", " samplingFrequency = 10.0, \n", " showComponents = True, \n", " showFinal=False, \n", " showFrequencyDomain=False, \n", " showSymmetrical=False, \n", " showInverseFFT=False): \n", " \n", " plotAllWithNoiseCancel(scenario, samplingFrequency, 10000.0, showComponents, showFinal, \n", " showFrequencyDomain, showSymmetrical, showInverseFFT, showSpectrogram=False,\n", " windowSize = 10,\n", " windowJump = 3)\n", "\n", "def plotSingleWithoutAll( \n", " amplitude = 1.0, \n", " frequency = 0.5, \n", " phase = 0.0, \n", " yTranslation = 0.0,\n", " samplingFrequency = 10.0):\n", " \n", " scenario = Scenario([Signal(amplitude, frequency, phase, yTranslation)])\n", " plotAll(scenario, samplingFrequency)\n", "\n", "def plotSingleWIFFT(\n", " amplitude = 1.0, \n", " frequency = 0.5, \n", " phase = 0.0, \n", " yTranslation = 0.0,\n", " samplingFrequency = 10.0, \n", " showComponents = True, \n", " showFinal=False, \n", " showFrequencyDomain=False, \n", " showSymmetrical=False):\n", " \n", " scenario = Scenario([Signal(amplitude, frequency, phase, yTranslation)])\n", " plotAll(scenario, samplingFrequency, showComponents, showFinal, showFrequencyDomain, showSymmetrical)\n", " \n", "def plotAllWithoutAll( \n", " scenario = Scenario([Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color='blue')]),\n", " samplingFrequency = 10.0, \n", " showComponents = True, \n", " showFinal=False):\n", " \n", " plotAll(scenario, samplingFrequency,showComponents, showFinal)\n", "\n", " \n", " \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# SYGNAL W DZIEDZINIE CZASU" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Podstawowe cechy, czestotliwosc probkowania, nyquista" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "interact(plotSingleWithoutAll, amplitude=(0.5,2.5,0.1),\n", " frequency=(0.1, 2.0,0.1),phase = (-2.0 * mt.pi, 2.0*mt.pi, 0.25), \n", " yTranslation = (-2.5, 2.5, 0.5), samplingFrequency=(0.25,10,0.25));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$u(t) = A \\cdot sin(2\\cdot \\pi \\cdot f_{0} \\cdot t + \\varphi) + y_{0}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jaka musi być częstotliwość sygnału, aby jego przebieg się (jeden, pełen okres) się skończył w 5s?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = 0.2\n", "plotSingleWithoutAll( 2, frequency = x, phase = 0, yTranslation = 0, samplingFrequency=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Jaka musi być częstotliwość sygnału, aby jego przebieg się (jeden, pełen) się skończył w 0.5s?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sumowanie sygnałow" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "sc1 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 2.0, frequency = 0.25, phase = 0.0, yTranslation = 0.0, color = 'green') ])\n", "sc2 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 1.25, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'green') ])\n", "sc3 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = mt.pi, yTranslation = 0.0, color = 'green') ])\n", "\n", "\n", "\n", "scenarios = {\"1. Przyklad\": sc1 , \"2. Wzmocnienie\" : sc2, \"3. Tlumienie\" : sc3}\n", "interact(plotAllWithoutAll, scenario=scenarios, samplingFrequency=(0.25,10,0.25));\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sygnal w dziedzinie czestotliwosci" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Omowienie podstaw" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#FFT\n", "interact(plotSingleWIFFT, amplitude=(0.5,2.5,0.1),\n", " frequency=(0.0, 2.0,0.1),phase = (-2.0 * mt.pi, 2.0*mt.pi, 0.25), \n", " yTranslation = (-2.5, 2.5, 0.5), samplingFrequency=(0.25,10,0.25));" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "https://pl.wikipedia.org/wiki/Twierdzenie_Kotielnikowa-Shannona" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Suma sygnalow w dziedzinie czasu a efekt w dziedzinie czestotliwosci." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Odwrotne FFT" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", " \n", "sc1 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 2.0, frequency = 0.25, phase = 0.0, yTranslation = 0.0, color = 'green') ])\n", "sc2 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 1.25, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'green') ])\n", "sc3 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = mt.pi, yTranslation = 0.0, color = 'green') ])\n", "\n", "scenarios = {\"1. Przyklad\": sc1 , \"2. Wzmocnienie\" : sc2, \"3. Tlumienie\" : sc3}\n", "interact(plotAll, scenario=scenarios, samplingFrequency=(0.25,10,0.25));\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "x = np.arange(0, 2 * 2*np.pi, 0.1)\n", "y = np.sin(x)\n", "print(y)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "yp = np.fft.ifft(np.fft.fft(y))\n", "print(y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Fajne zastosowanie FFT i iFFT" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "l1 = [\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 1.5, frequency = 0.25, phase = 0.5 * mt.pi, yTranslation = 0.0, color = 'green'),\n", " Signal(amplitude = 0.5, frequency = 0.4, phase = 1.25 * mt.pi, yTranslation = 0.0, color = 'orange')]\n", "\n", "l2 = [\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue'),\n", " Signal(amplitude = 1.5, frequency = 0.25, phase = 0.5 * mt.pi, yTranslation = 0.0, color = 'green'),\n", " Signal(amplitude = 0.5, frequency = 0.4, phase = 1.25 * mt.pi, yTranslation = 0.0, color = 'orange')]\n", "\n", "for i in range(50):\n", " amplitude = 0.05 + random.random() * 0.15\n", " #Round - Uniknięcie błędów numerycznych, co sie stanie po usunieciu round?\n", " # frequency = round(1.0 + random.random() * 3.0, 1)\n", " frequency = round(1.0 + random.random() * 3.0, 1) \n", " phase = random.random() * mt.pi\n", " color = 'black'\n", " l2.append(Signal(amplitude, frequency, phase, 0.0, color))\n", "\n", "sc1 = Scenario(l1)\n", "sc2 = Scenario(l2)\n", "\n", "scenarios = {\"1. Przyklad\": sc1, \"2. Noise\": sc2 }\n", "interact(plotAllWithNoiseCancelWithoutSpectrogram, scenario=scenarios, noiseThreshold=6.0, samplingFrequency=(0.25,10,0.25));\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a = np.eye(4)\n", "print(a)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fd = np.fft.fft2(a)\n", "print(fd)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d = np.fft.ifft2(fd)\n", "print(d)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "d = np.fft.ifft2(fd)\n", "print(np.abs(d))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "cam = img_as_float(data.camera())\n", "io.imshow(cam)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "#imgProc = util.random_noise(cam, mode='s&p', amount=0.3) \n", "#imgProc = util.random_noise(cam, mode='gaussian', mean=0, var=0.2)\n", "\n", "imgProc = np.empty_like(cam)\n", "imgProc[:] = cam\n", "\n", "for y in range(0, imgProc.shape[0]):\n", " phi = (random.random() * 100)\n", " freq = 0.2 + random.random() * 0.5\n", " for x in range(0, imgProc.shape[1]):\n", " ab = 0.3 * sin(2*np.pi * freq * x + phi)\n", " #imgProc[y][x] = ab\n", " imgProc[y][x] += ab\n", "\n", "\n", "#io.imshow(imgProc,cmap='gray', interpolation='none')\n", "fig, ax = plt.subplots(figsize=(6,6))\n", "ax.imshow(imgProc,cmap='gray', interpolation='none', extent=[80,130,32,0])\n", "ax.set_aspect(2) # you may also use am.imshow(..., aspect=\"auto\") to restore the" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fd = np.fft.fft2(imgProc)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fdp = np.abs(fd)\n", "print(fdp)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "m = np.max(fdp)\n", "copy = fdp / m\n", "print(np.mean(copy))\n", "norm = (copy - 0) / (0.01 - 0)\n", "norm[norm > 1] = 1\n", "norm[norm < 0] = 0\n", "plt.imshow(norm)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(fd.shape)\n", "w = fd.shape[1]\n", "h = fd.shape[0]\n", "\n", "prop = 0.9\n", "copy = np.empty_like(fd)\n", "copy[:] = fd\n", "\n", "#copy[int(h/2 - h/2 * prop): int(h/2 + h/2* prop), int(w/2 - w/2 * prop): int(w/2 + w/2* prop)] = 0\n", "copy[0:h, int(w/2 - w/2 * prop): int(w/2 + w/2* prop)] = 0\n", "\n", "\n", "\n", "new_img = np.fft.ifft2(copy)\n", "#print(new_img)\n", "plt.imshow(np.abs(new_img),cmap='gray')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pojedynczy sygnal - zmienny w czasie" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "\n", "sc1 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue', \n", " changeX=changeX(5,15,10))])\n", "sc2 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue', \n", " changeY=changeY(5,15,1))])\n", "sc3 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue', \n", " changeX=changeX(10,20,10), changeY=changeY(0,10,1))])\n", "\n", "\n", "scenarios = {\"1. Zmienna czestotliwosc\": sc1 , \"2. Zmiena amplituda/wychylenie\" : sc2, \"3. Mix\" : sc3}\n", "interact(plotAll, scenario=scenarios, samplingFrequency=(0.25,10,0.25));\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Spectrogram" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "\n", "sc1 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue', \n", " changeX=changeX(5,15,10))])\n", "sc2 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue', \n", " changeY=changeY(5,15,1))])\n", "sc3 = Scenario([\n", " Signal(amplitude = 1.0, frequency = 0.5, phase = 0.0, yTranslation = 0.0, color = 'blue', \n", " changeX=changeX(10,20,10), changeY=changeY(0,10,1))])\n", "\n", "scenarios = {\"1. Czestotliwosc\": sc1, \"2. Amplituda\": sc2, \"3. Mix\": sc3 }\n", "interact(plotSpectrogram, scenario=scenarios, samplingFrequency=(0.25,10,0.25), windowSize=(4.0,10.0,0.25), \n", " windowJump=(0.25,2.0,0.25));\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "https://pl.wikipedia.org/wiki/Okno_czasowe" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "v = [0, 1, 0, -1]\n", "res = np.fft.fft(v)\n", "print(res)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "v = [0, 4, 0, -4]\n", "res = np.fft.fft(v)\n", "print(res)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "v = [0, 4, 0, -4]\n", "res = np.fft.fft(v)\n", "print(res)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "l = 2**0.5/2\n", "v = [0, l, 1, l, 0, -l, -1, -l]\n", "print(v)\n", "res = np.fft.fft(v)\n", "print(res)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "v = [1, 2, 1, 0]\n", "res = np.fft.fft(v)\n", "print(res)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.0" } }, "nbformat": 4, "nbformat_minor": 1 }