If the sequence is short (N is small), we cannot resolves frequencies being closed together (even by some tricks like zero padding).
One way to solve it is to create a pseudo-sequence from the data in hand by linear transformation of the RVs. Next, overlapping (by about 25%) these two series, we can process the new series with longer (pseudo) data. This method is based on the linear transformation of RVs.
This theorem is proposed in 8.2 by 1. I can realize the simulation using the code shown in below. However, I don't really understand the assumptions behind this operation.
n = 1:64; x = sin(0.3*pi*n) + sin(0.32*pi*n) + 0.5*randn(1,64); [ax,ay,w,y] = linear_modified_periodogram(x); subplot(2,1,1); plot(w,ax,'k'); xlabel('w'); ylabel('PSD'); subplot(2,1,2); plot(w,ay,'k'); xlabel('w'); ylabel('Modified PSD');
function [ax, ay, w, y] = linear_modified_periodogram(x) [sx, ax, px] = general_win_periodogram(x,2,512); y1 = [x zeros(1,48)] + 0.2*rand(1, 112); y2 = [zeros(1,48) x] + 0.2*rand(1,112); y = (0.2*y1+(y2)*0.2); [sy, ay, py] = general_win_periodogram(y,2,512); w = 0:2*pi/512:2*pi-(2*pi/512); end
function [s, as, ps] = general_win_periodogram(x, win,L) if(win == 2) w = rectwin(length(x)); elseif (win ==3) w = hamming(length(x)); elseif (win ==4) w = bartlett(length(x)); elseif (win ==5) w = tukeywin(length(x)); elseif (win ==6) w = blackman(length(x)); elseif (win ==7) w = triang(length(x)); elseif (win ==8) w = blackmanharris(length(x)); end xw = x.*w'; s = zeros(L,length(x)); for m = 1:L n = 1:length(x); s(m) = sum(xw.*exp(-j*(m-1)*(2*pi/L)*n)); end as = ((abs(s)).^2/length(x))/norm(w); ps = atan(imag(s)./real(s)); end