J'utilise Matlab pour prendre des FFT de signaux, et je suis coincé sur la normalisation. Plus précisément, comment normaliser le spectre en unités de dBm. Je sais que 0.316228 est le facteur de normalisation correct, mais mes questions sont liées à la façon de normaliser les bacs correctement.questions de normalisation FFT de base
J'ai créé le programme suivant pour poser mes questions. Il suffit de le couper et de le coller dans Matlab et il fonctionnera lui-même. Voir les questions en ligne.
En particulier, je suis confus comment normaliser les bacs. Par exemple, si la FFT a des indices 1: end, où end est pair, quand je calcule le spectre d'amplitude FFT, devrais-je multiplier par (2/N) pour les indices 2: (fin/2)? De même, la case à la fréquence de Nyquist (située à l'extrémité de l'index/2 + 1) est-elle normalisée à (1/N)? Je sais qu'il y a un tas de façons de normaliser en fonction de son intérêt. Disons que le signal que j'utilise (St ci-dessous) sont des tensions capturées à partir d'un CAN.
Tout commentaire est grandement apprécié. Merci d'avance!
%% 1. Create an Example Signal
N = 2^21 ; % N = number of points in time-domain signal (St)
St = 1 + rand(N,1,'single'); % St = example broadband signal (e.g. random noise)
% take FFT
Sf = fft(St, N);
Sf_mag = (2/N)*abs(Sf(1: N/2 + 1));
Sf_dBm = 20*log10(Sf_mag/0.316228); % 0.316338 is peak voltage of 1 mW into 50 Ohms
% Q: Are Sf_mag and Sf_dBm normalized correctly? (assume 0.316338 is correct
% peak voltage to get 1mW in 50 Ohms)
% Q: Should Sf_mag(fftpoints/2 + 1) = (1/N)*abs(Sf(fftpoints/2 + 1) for correct normalization
% of Nyquist frequency? (since Nyquist frequency is not folded in frequency
% like the others are)
%% 2. Plot Result
% create FFT spectrum x-axis
samplerate = 20e9; % 20 Gsamples/sec
fft_xaxis = single(0 : 1 : N/2)';
fft_xaxis = fft_xaxis * single(samplerate/N);
semilogx(fft_xaxis, Sf_dBm, 'b-')
xlabel('Frequency (Hz)');
ylabel('FFT Magnitude (dBm)');
title('Spectrum of Signal (Blue) vs Frequency (Hz)');
xlim([1e4 1e10]);
grid on;
Utilisez 'log10' au lieu de' log' lors de la conversion du mag en dB – YYC
Yup, c'est une super trouvaille YYC, merci! – ggkmath
Un commentaire Je continue à poser beaucoup de questions: une simple transformation de Fourier n'est pas suffisante pour l'estimation spectrale. Il y a des fonctions bien implémentées pour ce qui est disponible dans le noyau Matlab. Regardez 'pwelch'. –