Catégories
Algorithme Arduino électronique Projets Arduino Projets électroniques Projets traitement du signal

Analyse fréquentielle #6: Le fenêtrage – Simulation

Objectifs

  • Comprendre la notion du fenêtrage
  • Savoir l’utilité du fenêtrage
  • Savoir les différents types des fenêtres
  • Introduire la carte Portenta H7
  • Savoir implémenter la DFT en C/Arduino
  • Test de la DFT sur Arduino Mega/Due
  • Analyse des performances temporelles du code sur Mega/Due
  • Analyse de la DFT d’un signal sinusoïdal
  • Analyse de la DFT d’une entrée réelle
  • Prendre consciente du problème du sur-échantillonnage
  • Etc.

Voir le tuto pour plus de détails

Programme Complet

clear all; close all; clc;


%% Analyse Temporelle

N=2^13;
f0=1;t0=1/f0;
t=linspace(0,(10+1/3)*t0,N);
ts=t(2)-t(1); fs=1/ts;
s_t=5*sin(2*pi*f0*t)+sin(2*pi*2*f0*t)+sin(2*pi*10*f0*t);

% Fenêtres de Hann
Hh(1,:)=hann(N); % Fenêtres de Hann
Hh(2,:)=blackman(N); % Fenêtre de Hamming
Hh(3,:)=hamming(N); % Fenêtre de Blackman
Hh(4,:)=gaussmf(t,[t(end)/5 t(end)/2]); % Fenêtre Gaussienne
ti=linspace(0,1,N);Hh(5,:)=sin(2*pi*0.5*ti).^2; % Fenêtre sin²

figure(1)
plot(t,Hh','lineWidth',2);xlim([t(1) t(end)]);grid on;
legend({'hann','blackman','hamming','Gauss','Sin²'},'fontsize',13);
% return;



%% Analyse Fréquentielle

% Fenêtrage
for i=1:5
s_tf(i,:)=s_t.*Hh(i,:);
end;
s_tf(6,:)=s_t;


% FFT
nfft=N;
for i=1:6
s_fm(i,:)=fft(s_tf(i,:), nfft);
end;
df=fs/N;
f=linspace(-fs/2-df,fs/2,nfft);

% Affichage
figure(2);
subplot(211);
plot(t,s_tf,'lineWidth',2); grid on; xlim([t(1) t(end)]);
legend({'hann','blackman','hamming','Gauss','Sin²','Sans Fenêtre'},'fontsize',13);

subplot(212);
plot(f,20*log10(fftshift(abs(s_fm)/(N))),'lineWidth',2); grid on;xlim([-20*f0 20*f0]);
legend({'hann','blackman','hamming','Gauss','Sin²','Sans Fenêtre'},'fontsize',13);

Laisser un commentaire