#!/usr/bin/env python # -*- coding: utf-8 -*- """ calcul direct de la transformée de Fourier discrète d'une fonction """ __author__ = "Dominique Lefebvre" __copyright__ = "Copyright 2020 - TangenteX.com" __version__ = "1.0" __date__ = "8 avril 2020" __email__ = "dominique.lefebvre@tangentex.com" from scipy import zeros,sin, pi, linspace, arange import cmath as cmat from matplotlib.pylab import figure,plot,grid, title,xlabel,ylabel # calcul brut de la TFD d'une fonction def TFD(u): N = len(u) tfd = zeros(N, complex) for k in range(N): for n in range(N-1): tfd[k] += u[n]*cmat.exp(-2j*cmat.pi*k*n/N) print k,tfd[k] return tfd # paramètres du signal L = 2.0 # durée du signal fd = 1.0/L # domaine fréquentiel du signal a0 = 1. # amplitude du signal f0 = 1.0 # fréquence du signal # paramètres de l'échantillonnage N = 20 # nombre de points d'échantillonnage dt = L/N # intervalle temporel entre deux points fe = 1./dt # fréquence d'échantillonnage # construction du signal t = linspace(0.0,L,N) s = a0*sin(2*pi*f0*t) + a0*sin(2*pi*2*f0*t) # calcul de la TFD de la fonction f tfd = TFD(s) # tracé de la distribution des coefficients fig1 = figure(figsize=(10,8)) grid(True) plot(range(N),tfd,'ob') title('Distribution des coefficients de Fourier') xlabel('Rang du coefficient ck de Fourier') ylabel('Amplitude') # domaine fréquentiel pour affichage du spectre freq = arange(N)*fd # tracé du spectre fig2 = figure(figsize=(10,8)) grid(True) plot(freq[0:N//2],abs(tfd[0:N//2]),'or') title('Spectre du signal') xlabel(u'Fréquence') ylabel('Amplitude')