Я использую Matlab, чтобы принимать БПФ сигналов, и я застреваю в нормализации.В частности, как нормализовать спектр в единицах дБм.Я знаю, что 0.316228 - это правильный коэффициент нормализации, но мои вопросы связаны с тем, как правильно нормализовать корзины.
Я создал следующую программу, чтобы поднять мои вопросы.Просто порежьте и вставьте его в Matlab, и он запустится сам.Смотрите вопросы в строке.
В частности, я запутался, как нормализовать корзины.Например, если БПФ имеет индексы 1: конец, где конец четный, когда я вычисляю спектр величин БПФ, нужно ли мне умножать на (2 / N) для индексов 2: (конец / 2)?Аналогично, нормализуется ли бин на частоте Найквиста (расположенный в конце индекса / 2 + 1) к (1 / N)?Я знаю, что есть множество способов нормализовать в зависимости от своих интересов.Скажем, сигнал, который я использую (St ниже), это напряжение, снятое с АЦП.
Любая обратная связь с благодарностью.Заранее спасибо!
%% 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;