Here, you can find the SNR of a received signal from periodogram / FFT bins using the Kaiser operator. The beta (β) parameter characterizes the Kaiser window, which controls the trade-off between the main lobe width and the side lobe level in the frequency domain. For that you should know the sampling rate of the signal.
The Kaiser window is a type of window function commonly used in signal processing, particularly for designing finite impulse response (FIR) filters and performing spectral analysis. It is a general-purpose window that allows for control over the trade-off between the main lobe width (frequency resolution) and side lobe levels (suppression of spectral leakage). The Kaiser window is defined using a modified Bessel function of the first kind.
Steps
- Set up the sampling rate and time vector
- Compute the FFT and periodogram
- Plot the periodogram using FFT
- Specify parameters for Kaiser window and periodogram
- Calculate the frequency resolution and signal power
- Exclude the signal power from noise calculation
- Compute the noise power
- Calculate the SNR
MATLAB Code
fs = 32000;
t = 0:1/fs:1-1/fs;
x=load("x2.mat");
x = x.x2;
N = length(x);
xdft = fft(x);
xdft = xdft(1:N/2+1);
psdx = (1/(fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:fs/length(x):fs/2;
figure; plot(freq,pow2db(psdx))
grid on
title("Periodogram Using FFT")
xlabel("Frequency (Hz)")
ylabel("Power/Frequency (dB/Hz)")
%rng default
Fi = 3000;
Fs = 32e3;
N = 1024;%2048;
w = kaiser(numel(x),38);
[Pxx, F] = periodogram(x,w,numel(x),Fs);
SNR_periodogram = snr(Pxx,F,'psd')
freq_resolution= abs(F(2)-F(3));
Signal_power= Pxx(3000); % p
s=sum((Signal_power), 1); s=s/length(Signal_power); s=abs(s);
Sig_power=pow2db(freq_resolution*s)
exclude_range = pxx(3000);
Noise_power = Pxx;
Noise_power(exclude_range) = 0; % Set the values in the specified range to zero
% Noise_power= Pxx(20001:24001); %x,y,z
n=sum((Noise_power), 1)/length(Noise_power); n=abs(n);
N_power=pow2db(freq_resolution*n)
SNR=Sig_power-N_power