Salut tout le monde,

Voilà j'ai un problème avec mon code, normalement la fenêtre Flattop devrait me donner une amplitude précise du signal que je fenêtre or ce n'est pas le cas, elle est même très mauvaise. Quelqu'un aurait-il une idée pour m'aider?

Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Fs = 100000; % Sampling frequency
T = 1/Fs; % Sample time
L = 100000; % Length of signal
t = (0:L)*T; % Time vector
 
f1=10;
f2=30;
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
x = sin(2*pi*f1*t)+0.005*sin(2*pi*f2*t);
 
win_hann = window(@hann, length(x));
win_flat = window(@flattopwin, length(x));
 
y_hann = [win_hann].*x';
y_flat = [win_flat].*x';
 
NFFT=2^(nextpow2(length(y_hann))+1);
f = Fs/2*linspace(0,1,NFFT/2+1);
 
Y=fft(x,NFFT)/L;
Y_hann = fft(y_hann,NFFT)/L;
Y_flat = fft(y_flat,NFFT)/L;
 
figure(1)
subplot(3,1,1), hold on
plot(t, win_hann, 'b');
plot(t, y_hann, 'b', 'Linewidth',4);
plot(t, x, 'r');
legend('Fenêtre de Hann','Signal fenêtré','Signal non fenêtré')
xlabel('Time (s)')
ylabel('Amplitude')
title('Domaine temporel')
subplot(3,1,2),hold on
plot(f, 2*abs(Y_hann(1:NFFT/2+1)), 'b');
plot(f, 2*abs(Y(1:NFFT/2+1)),'r');
legend('FFT signal fenêtré','FFT signal non fenêtré')
xlabel('Frequency (Hz)')
ylabel('Magnitude')
title('FFT')
axis([0,30,0,1]);
subplot(3,1,3), hold on
plot(f, 20*log10((Y_hann(1:NFFT/2+1))),'b');
plot(f, 20*log10((Y(1:NFFT/2+1))), 'r');
axis([0,100,-200,0]);
legend('FFT signal fenêtré','FFT signal non fenêtré')
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('FFT logarithmiques')
 
figure(2)
subplot(3,1,1), hold on
plot(t, win_flat, 'b');
plot(t, y_flat, 'b', 'Linewidth',4);
plot(t, x, 'r');
legend('Fenêtre Flat top','Signal fenêtré','Signal non fenêtré')
xlabel('Time (s)')
ylabel('Amplitude')
title('Domaine temporel')
subplot(3,1,2),hold on
plot(f, 2*abs(Y_flat(1:NFFT/2+1)), 'b');
plot(f, 2*abs(Y(1:NFFT/2+1)),'r');
legend('FFT signal fenêtré','FFT signal non fenêtré')
xlabel('Frequency (Hz)')
ylabel('Magnitude')
title('FFT')
axis([0,30,0,1]);
subplot(3,1,3), hold on
plot(f, 20*log10((Y_flat(1:NFFT/2+1))),'b');
plot(f, 20*log10((Y(1:NFFT/2+1))), 'r');
axis([0,100,-200,0]);
legend('FFT signal fenêtré','FFT signal non fenêtré')
xlabel('Frequency (Hz)')
ylabel('Magnitude (dB)')
title('FFT logarithmiques')