Starałem się lepiej zrozumieć następujące użycie MATLAB-a spectrogram()
:
[S,F,T,P] = spectrogram(x,window,noverlap,f,fs)
Założyć x
jest realne. Z tego co rozumiem P
to szacunek PSD x
(odpowiednik użycia pwelch()
?) podczas gdy kolumny S
są razem z oknami STFT Hamminga x
. P
wydaje się być proporcjonalny do pierwiastka kwadratowego wielkości S
.
Skąd wziął się ten współczynnik proporcjonalności? Jakie są „jednostki” P
i S
, odpowiednio?
Odpowiedzi:
0 dla odpowiedzi № 1spojrzałem na spectrogram
w dokumentacji MATLAB.
Ale spektrogramy to funkcje 2D, czas i częstotliwość. The S
reprezentują DFT próbek wektora czasu T
w odniesieniu do częstotliwości na wektorze częstotliwości W
.
Ponieważ korzystasz z okna, wynik jest z okienkowych próbek czasu.
The P
wektor jest dla PSD (kwadratowa wartość bezwzględna S
) na tych samych próbkach okien i częstotliwościach.
0 dla odpowiedzi nr 2
Jak wspomniałeś, S jest STFT z okienkami x, a P jest PSD.
P można obliczyć przez S.
Tutaj możesz znaleźć tło obliczeń. tutaj
Poniższy przykład pokazuje, jak obliczyć P z S.
t = 0:0.001:2;
x = chirp(t,0,1,150); % 2 second chirp signal
nfft=256;
cFactor=0.3974; % Noise gain of hamming window
[S,F,T,P] = spectrogram(x,nfft,100,nfft,1e3); % S is STFT of hamming windowed signal
fbin=F(2)-F(1); %Frequency resolution
nS=(1/(2*(nfft/2+1)))*S; % normalizing by length of S
Pxx=2*(1/fbin)*(1/cFactor)*nS.*conj(nS); %PSD of AC value
Pxx(1,:)=(1/fbin)*(1/cFactor)*nS(1,:).*conj(nS(1,:)); %PSD of DC value
Tutaj zmienna Pxx będzie taka sama ze zmienną P.
Możesz sprawdzić wynik, korzystając z poniższego wykresu
figure(1)
subplot(2,1,1)
waterfall(F,T,P")
xlabel("frequency(Hz)")
ylabel("time(sec)")
figure(1)
subplot(2,1,2)
waterfall(F,T,real(Pxx)")
xlabel("frequency(Hz)")
ylabel("time(sec)")
Funkcja Pwelch daje także PSD, a metoda obliczeniowa jest taka sama dla spektrogramu, z wyjątkiem uśredniania wszystkich STFT.
Jeśli użyjesz funkcji pwelch w ten sam sposób z górnym przykładem, znajdziesz uśredniony wykres wszystkich segmentów STFT.
Spróbuj poniżej kodu z tym samym sygnałem, aby zobaczyć, jak działa pwelch.
t = 0:0.001:2;
x = chirp(t,0,1,150); % 2 second chirp signal
nfft=256;
[P,F] = pwelch(x,nfft,100,nfft,1e3);
figure(2)
plot(F,P)
xlabel("frequency(Hz)")
Na rysunku (2) zobaczysz średni wykres wykresu wodospadu (1).
Odnośnie jednostki S i P,
S nie ma jednostki, ponieważ DFT nie obsługuje jednostki.
P jest kwadratem wartości skutecznej sygnału czasu na Hz.
Jeśli jednostką sygnału czasowego jest Volt (V), jednostka P to Vrms ^ 2 / Hz.