MATLAB Réalisation de Fast Fourier Transform FFT

Bonjour joli garçon/fée, s'il y a une connaissance en hautes mathématiques que vous avez entendue plusieurs fois mais que vous ne comprenez pas bien, et encore moins comment l'utiliser, alors la transformée de Fourier doit être sur la liste. La plupart des gens qui essaient pour la première fois auront vaguement l'impression que la transformée de Fourier est compliquée et difficile à démarrer. En fait, ce n'est pas le cas. Ce blog ne fera qu'une ou deux pages pour vous permettre de comprendre rapidement le principe et l'application. de la transformée de Fourier, de sorte que vous pouvez Même si vous partez de Xiaobai, vous pouvez rapidement démarrer et maîtriser cet artefact mathématique.


1. Connaissances de base

Lorsque la plupart des étudiants atteindront le niveau des études supérieures, ils rencontreront plus ou moins un moment où ils devront faire une analyse du spectre. Puis j'ai vérifié le livre et j'ai trouvé la formule suivante :
X ( ω ) = 1 T ∫ − ∞ ∞ x ( t ) e − j ω tdt X(\omega)=\frac{1}{T}\int_{-\ infin}^{\infin}{x(t)e^{-j\omega t}}dtX ( ω )=J1x ( t ) ej ω tt
x ( t ) x(t)x ( t ) est une quantité variant dans le temps appelée signal de domaine temporel, tel qu'un signal électronique variant dans le temps. X ( ω ) X(\omega)X ( ω ) est l'amplitude du signal transformée dans le domaine fréquentiel,ω \omegaω est la fréquence. Par exemple, un signal de domaine temporel estx ( t ) = a sin ⁡ ( kx ) = 0,5 sin ⁡ ( 4 π t ) x(t)=a\sin(kx)=0,5\sin(4\pi t)x ( t )=unpéché ( k x )=0 . 5sin ( 4 π t ) , le signal est en fait un signal d'amplitude 0,5 et de fréquencek 2 π = 4 π 2 π = 2 \frac{k}{2\pi}=\frac{4\pi} {2 \pi}=214h _k=14h _16h _=2 signaux. DoncX ( ω ) X(\omega)X ( ω ) seulement àω = 2 \omega=2Oh=0,5 pour 2 et 0 pour les autres.

Cependant, dans les calculs numériques réels, les problèmes physiques sont tous discrétisés, de sorte que le signal généré est également un vecteur. Ensuite, la transformée de Fourier dans la formule ci-dessus peut être écrite comme une matrice de transformée de Fourier discrète FFF est multiplié par un signal discret dans le domaine temporel et divisé par le nombre d'échantillons. Soit :
X = 1 NF x X = \frac{1}{N}FxX=N1F x
spécifique à propos deFFLa connaissance de l'algèbre linéaire de F ne sera pas introduite ici, il suffit de savoir qu'il s'agit d'une matrice. Ensuite, parlons de la façon de l'utiliser, ici nous utilisons MATLAB pour l'appliquer.


2. Application spécifique

Regardez directement le code source.Cet exemple est également copié de la documentation d'aide officielle de MATLAB, qui est très illustrative.

Fs=100; % 采样频率
L=150;  % 采样个数
t=(0:L-1)/Fs; % 时间


S = 0.7*sin(2*pi*20*t)+sin(2*pi*40*t);  % 时域信号
X = S + 1*randn(size(t)); % 添加随机噪动,也可以不加,下面给出二者对比图

subplot(2,1,1);
plot(t,X,'b.-'); % 画出时域信号
title("Siginal in time domain");
xlabel('t');
ylabel('X');
hold on;

% FFT 变换
Y = fft(X);

% fft()之后的频域信号的幅值还需要做一点处理才可以完全对应时域信号的幅值
P1=abs(Y);
P2=P1(1:L/2+1);
P2=P2/L;
P2(2:end-1)=P2(2:end-1)*2;
f = Fs*(0:L/2)/L;

subplot(2,1,2);
% 画出频域信号
plot(f,P2,'r.-');
title('Amplitude Spectrum of X');
xlabel('f (Hz)');
ylabel('|P2(f)|');

La signification de ce code est la suivante : un signal de fréquence 20 d'amplitude égale à 0,7 est superposé à un autre signal d'amplitude 1 et de fréquence 40 pour effectuer une transformée de Fourier discrète sur le signal formé. Je donne les résultats dans le domaine fréquentiel après perturbation par le bruit ou non. Tracés des domaines temporel et fréquentiel du signal sans bruit ajouté :
Tracés dans le domaine temporel et dans le domaine fréquentiel du signal avec bruit ajouté :
On peut voir que lorsque les deux transforment le signal dans le domaine temporel en un signal dans le domaine fréquentiel, les signaux avec des fréquences de 20 et 40 et des amplitudes de 0,7 et 1 sont trouvés.

Ce qui est un peu difficile à comprendre dans le code est le traitement du signal dans le domaine temporel après la transformation DFT : prenez la moitié du signal dans le domaine fréquentiel et mettez-le à l'échelle. Vous n'avez pas besoin de comprendre cela, je peux vous dire quoi faire.
L'instruction P1=abs(Y);obtient la longueur du volume intermédiaire après transformation fft. Étant donné que la fréquence d'échantillonnage Fsne peut résoudre Fs/2que la fréquence au maximum, elle est exploitée P2=P1(1:L/2+1);. Afin de faire correspondre l'amplitude du signal transformé à l'amplitude du signal dans le domaine temporel, il est également nécessaire de mettre à l'échelle le signal.Les premier et dernier signaux sont divisés par le nombre d'échantillons de signal discrets, et le signal intermédiaire est divisé par le Lnombre L/2à obtenir le résultat final.

Jolis garçons, fées, ici, la discrète transformée de Fourier comprend à peu près comment s'en servir. Ce n'est pas grave si vous ne comprenez pas, communiquons dans la zone de commentaires ~


Vous pouvez également accéder au lien de l'article de mon jardin de blog mis à jour de manière synchrone pour jouer. Personnellement, j'aime le jardin de blog, qui est relativement propre et simple.

Guess you like

Origin blog.csdn.net/Meiyuan2021/article/details/124464505