[PYTHON] Propriétés de la transformée de Fourier discrète

table des matières

1.Tout d'abord --Dérivation de la transformée de Fourier discrète --Caractéristiques de la transformée de Fourier discrète --Les références --Annexe: Programme de transformation de Fourier discrète par Python

1.Tout d'abord

Le but de cet article est de comprendre les propriétés des transformées de Fourier discrètes, telles que la symétrie spectrale et la périodicité.

2. Dérivation de la transformée de Fourier discrète

Le signal discret $ x_ {échantillonnage} (t) $ obtenu en échantillonnant le signal temporel continu $ x (t) $ à l'intervalle $ T $ est exprimé comme suit. $ x_{sampling}(t)=\sum_{n=0}^{\infty} x(n)\delta(t-nT) \tag{1}$ Lorsque ce signal discret $ x_ {échantillonnage} (t) $ est transformé de Fourier

\begin{eqnarray}
\mathcal{F}[x_{sampling}(t)] &=& \int_{-\infty}^{\infty}x_{sampling}(t)e^{-j\omega t}dt \\
&=& \int_{-\infty}^{\infty} \, \sum_{n=0}^{\infty}x(n)\delta(t-nT) \, e^{-j\omega t}dt \\
&=& \sum_{n=0}^{\infty}x(n)\int_{-\infty}^{\infty}\delta(t-nT) \, e^{-j\omega t}dt \\
&=& \sum_{n=0}^{\infty}x(n) e^{-j\omega nT} \tag{2}
\end{eqnarray}

Ce sera.

Supposons maintenant que la valeur d'échantillon $ x (n) $ se compose de $ N $ points. De plus, comme le montre la figure ci-dessous, la valeur d'échantillon $ x (n) $ constituée de $ N $ points est considérée comme un cycle du signal. La fréquence angulaire à ce moment est exprimée comme $ 2 \ pi / NT $ et est appelée la fréquence angulaire de base.

La fréquence angulaire qui est un multiple entier de la fréquence angulaire de base est représentée par $ \ omega = \ frac {2 \ pi} {NT} k ; ; (k = 0,1,2, ..., N-1) $. Représente des composants de fréquence plus élevée. En remplaçant ce $ \ omega = \ frac {2 \ pi} {NT} k $ dans l'expression $ (2) $ $ \sum_{n=0}^{\infty}x(n) e^{-j\frac{2\pi}{NT}knT} $ Ce sera. Considérant que la valeur d'échantillon $ x (n) $ se compose de $ N $ points, $ \sum_{n=0}^{N-1}x(n) e^{-j\frac{2\pi}{NT}knT} = \sum_{n=0}^{N-1}x(n) e^{-j2\pi k\frac{n}{N}} \tag{3} $ Ce sera. Si vous définissez $ W = e ^ {-j \ frac {2 \ pi} {N}} $ ici pour plus de simplicité, $ X(k) = \sum_{n=0}^{N-1}x(n)W^{kn} \tag{4} $ Par conséquent, nous avons pu dériver l'équation de transformée de Fourier discrète.

La transformée de Fourier discrète de l'équation $ (4) $ signifie qu'elle calcule la similitude entre la valeur d'échantillon $ x (n) $ et la variable complexe $ W ^ {kn} $. Comme le montre la figure ci-dessous, la composante de fréquence de la valeur d'échantillon $ x (n) $ est obtenue en prenant le produit interne de la valeur d'échantillon $ x (n) $ et de la variable complexe $ W ^ {kn} $ avec différentes fréquences. Je peux. Cependant, en raison de la nature de la transformée de Fourier discrète, des composantes de fréquence peuvent apparaître à des endroits autres que les composantes de fréquence d'origine de la valeur d'échantillon $ x (n) $. (Décrit en 3. Propriétés de la transformée de Fourier discrète)

3. Propriétés de la transformée de Fourier discrète

Soit m un entier arbitraire

\begin{eqnarray}
X(k+mN) &=&\sum_{n=0}^{N-1}x(n)W^{(k+mN)n} \\
&=&\sum_{n=0}^{N-1}x(n)W^{kn}W^{mNn} \\
&=&\sum_{n=0}^{N-1}x(n)W^{kn} 
= X(k)
\end{eqnarray}

Suivant, $X(k+mN)=X(k) \tag{5}$ Est établi. Cela signifie que le même spectre apparaît pour chaque fréquence d'échantillonnage dans le spectre de fréquences.

\begin{eqnarray}
X(N-k) &=& \sum_{n=0}^{N-1}x(n)W^{(N-k)n} \\
&=& \sum_{n=0}^{N-1}x(n)W^{Nn}W^{-kn} \\
&=& \sum_{n=0}^{N-1}x(n)W^{-kn} \\
&=& [\,\sum_{n=0}^{N-1}x(n)W^{kn}\,]^{*} = X(k)^{*}
\end{eqnarray}

Suivant, $X(N-k) = X(k)^{*} \tag{6}$ Est établi.

Maintenant, afin d'approfondir notre compréhension des propriétés de la transformée de Fourier discrète, observons le spectre obtenu par la transformée de Fourier discrète réelle. Effectuez une transformation de Fourier discrète en utilisant le programme présenté en annexe. Le signal de temps continu $ x (t) = cos (2 \ pi ft) $ montré dans la figure ci-dessous est échantillonné. La fréquence $ f $ du signal de temps continu $ x (t) $ est de 1000 $ [Hz] $.

Tout d'abord, la figure suivante montre le signal $ x (n) $ échantillonné sous le signal de temps continu $ x (t) $ avec la fréquence d'échantillonnage $ f_ {échantillonnage} = 4000 [Hz] $ et le nombre d'échantillons $ N = 32 $. Il est montré dans.

Ensuite, le spectre de fréquences obtenu par la transformée de Fourier discrète de la valeur d'échantillon $ x (n) $ est montré dans la figure ci-dessous. D'après la figure, on peut voir que la composante de $ 1000 [Hz] $, qui est la fréquence du signal de temps continu $ x (t) $, apparaît. Cependant, en raison de la symétrie du spectre montré dans l'équation $ (6) $, un spectre symétrique en ligne est généré autour de 2000 $ [Hz] $, ce qui correspond à la moitié de la fréquence d'échantillonnage. Cela signifie que moins de la moitié de la fréquence d'échantillonnage peut être représentée correctement. Selon le théorème d'échantillonnage, le signal d'origine peut être rétrogradé en échantillonnant au moins deux fois la fréquence maximale du signal temporel continu $ x (t) $. Le "plus du double de la fréquence" du théorème d'échantillonnage est dû à la symétrie de la transformée de Fourier discrète.

4. Références

--Morikita Publishing "Traitement numérique du signal": Masafumi Hagiwara --Kodansha "Introduction à la théorie de l'information de Shannon" Auteur: Eiko Takaoka

Annexe: Programme de transformation de Fourier discrète en Python

DFT.py


import numpy as np
import cmath
import matplotlib.pyplot as plt

f_xn = 1000 #Signal d'entrée x(n)Fréquence de
f_sampling = 4000 #Fréquence d'échantillonnage
T = 1.0 / f_sampling #Intervalle d'échantillonnage
N = 32 #Le nombre d'échantillons

t = np.arange(0, N*T, T) #Axe du temps
width = 3 #Largeur d'affichage de l'axe des fréquences(Combien de fois la fréquence d'échantillonnage est affichée)
freq = np.linspace(0,f_sampling*width, N*width, endpoint=False).reshape([-1,1]) #Axe de fréquence

n = np.arange(N) #Indice total
k = np.arange(N*width).reshape([-1,1]) #indice de k
x_n = np.cos(2*np.pi*f_xn*t) #Exemple de valeur x(n)
W_kn = np.exp(-1j*2*np.pi*n/N *k) #Variable complexe W_kn
X_k = np.sum(x_n*W_kn, axis=1) #Somme

amp = np.abs(X_k) #Composant d'oscillation

#affichage graphique
plt.figure()
plt.rcParams['font.family'] = 'Arial'
plt.rcParams['font.size'] = 17
plt.subplot(2,1,1)
plt.plot(t, x_n, marker='o', color='r')
plt.xlabel("time[s]", fontsize=20)
plt.ylabel("x(n)", fontsize=20)
plt.grid()
plt.subplot(2,1,2)
plt.plot(freq, amp, marker='o',color='b')
plt.xlabel('frequency[Hz]', fontsize=20)
plt.ylabel('amplitude', fontsize=20)
plt.grid()
plt.subplots_adjust(wspace=0.4, hspace=0.4)
plt.show()

Recommended Posts

Propriétés de la transformée de Fourier discrète
Transformée de Fourier des données brutes
Comparons la transformée de Fourier de la source sonore synthétisée et le composite de la transformée de Fourier
Le sens de soi
le zen de Python
L'histoire de sys.path.append ()
Comment confirmer le théorème de Persival en utilisant matplotlib et la transformée de Fourier de Scipy (FFT)
Qiskit: Transformée de Fourier quantique
La dernière version de Pillow 7.0.0 tuera la transformation de pytorch.
La vengeance des types: la vengeance des types
Aligner la version de chromedriver_binary
Grattage du résultat de "Schedule-kun"
10. Compter le nombre de lignes
Vers la retraite de Python2
Obtenez le nombre de chiffres
Expliquez le code de Tensorflow_in_ROS
Réutiliser les résultats du clustering
Conversion discrète de cosinus à l'aide de chainer.links.Linear
GoPiGo3 du vieil homme
Calculez le nombre de changements
Changer le thème de Jupyter
La popularité des langages de programmation
Changer le style de matplotlib
Visualisez la trajectoire de Hayabusa 2
À propos des composants de Luigi
Composants liés du graphique
Filtrer la sortie de tracemalloc
À propos des fonctionnalités de Python
Simulation du contenu du portefeuille
Le pouvoir des pandas: Python