cpsd output vector differs from plotted result
조회 수: 3 (최근 30일)
이전 댓글 표시
When using cpsd to calculate the cross power spectral density, I've noticed that the plot produced by directly running the command with no output arguments is slightly different from what I get when I run it with an output argument and plot that output myself.
The following code (attached along with example signal file) produces the figure below.
signalx = randn(2e4,1);
signaly = randn(2e4,1);
window = length(signalx)/3;
noverlap = round(0.9*window);
fs = 2074;
[Pxy,F] = cpsd(signalx,signaly,window,noverlap,[],fs);
plot(F./1000,10.*log10(real(Pxy)))
hold on
cpsd(signalx,signaly,window,noverlap,[],fs);
legend('CPSD output','CPSD direct plot')
I'm trying to run cpsd column-wise on a pair of very large matrices. Obviously I can't just plot them one by one, but I don't know how to interpret this difference and I'm not sure if I trust the output argument. Does anyone know what's going on here? Thanks!
댓글 수: 0
채택된 답변
Voss
2024년 8월 1일
편집: Voss
2024년 8월 1일
Looks like cpsd with no outputs plots the magnitude, abs(Pxy), rather than the real part, real(Pxy).
signalx = randn(2e4,1);
signaly = randn(2e4,1);
window = length(signalx)/3;
noverlap = round(0.9*window);
fs = 2074;
[Pxy,F] = cpsd(signalx,signaly,window,noverlap,[],fs);
% use a thick line so it can be seen underneath the thin line on top
plot(F./1000,10.*log10(abs(Pxy)),'--','LineWidth',2)
hold on
cpsd(signalx,signaly,window,noverlap,[],fs);
legend('CPSD output','CPSD direct plot')
% zoom in to see that the lines match
xlim([0 0.01])
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Spectral Measurements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!