power spectral density PSD?
5 次查看(过去 30 天)
显示 更早的评论
If I am have signal with length(33),or 13 signals each with length(33), How finding PSD to each signal individually?and plot its individually?
0 个评论
采纳的回答
Youssef Khmou
2013-11-29
You can try this way :
t=linspace(0,1,33);% 1 seconde
Fs=inv(t(3)-t(2));
f=Fs/10;
P=13; % number of signals
X=zeros(33,P);
for n=1:P
X(:,n)=sin(2*pi*t*(f+n));
end
N=512; % number of points for computing DFT
frequency=(0:N-1)*Fs/N; % frequency axis
frequency=frequency(1:floor(end/2)); % One sided spectrum
PSD=zeros(N,P);
for n=1:P
PSD(:,n)=fft(X(:,n),N);
PSD(:,n)=PSD(:,n).*conj(PSD(:,n));
end
PSD(floor(end/2)+1:N,:)=[]; % one sided spectrum
% Plotting them all in one figure
figure,plot(frequency,PSD)
4 个评论
Youssef Khmou
2013-12-3
mary, they are the same, it is just a problem of scale, Fxx is the frequency axis and it is 33x1, then we should get the same number of points using fft:
plot(Fxx,Pxx);
hold on;
F1=fft(X(:,1),33*2); % 33*2 points
F1=abs(F1(1:33));
plot(Fxx,F1,'r');
I used sinus just as example, Good luck mary
更多回答(1 个)
Wayne King
2013-11-28
Hi Mary, If you have the Signal Processing Toolbox, the easiest thing is to use periodogram()
I'll create some simulated signals. I'll assume your sampling frequency is 1.
X = randn(33,13);
for nn = 1:13
[Pxx(:,nn),Fxx] = periodogram(X(:,nn),[],64,1);
end
You can plot each one individually by selecting the column.
plot(Fxx,10*log10(Pxx(:,1)))
7 个评论
Youssef Khmou
2013-12-1
512 is the number of points for calculating DFT, you can put any number, higher number gives good resolution, any number that is multiple of 2 (128,512,1024...) is faster DFT becomes FFT
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Parametric Spectral Estimation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!