经典谱估计
周期图法
把随机信号
x
(
n
)
x(n)
x(n)的N点观察数据
x
N
(
n
)
x_N(n)
xN(n)视为一个能量有限信号,直接取
x
N
(
n
)
x_N(n)
xN(n)的傅里叶变换,得到
X
N
(
e
j
w
)
X_N(e^{jw})
XN(ejw),然后再取其幅值的平方,除以N,作为对
x
(
n
)
x(n)
x(n)真实的功率谱
P
(
e
j
w
)
P(e^{jw})
P(ejw)的估计。
P
^
P
E
R
(
w
)
=
1
N
∣
X
N
(
w
)
∣
2
\hat{P}_{PER}(w) = \frac{1}{N}|X_N(w)|^2
P^PER(w)=N1∣XN(w)∣2
[Pxx,f] = periodgram(xn,window,nfft,fs)
window: rectwin(length(xn)) hamming(length(xn)) .....
自相关法
由
x
N
(
n
)
x_N(n)
xN(n)估计出自相关函数
r
^
(
m
)
\hat{r}(m)
r^(m),然后对
r
^
(
m
)
\hat{r}(m)
r^(m)求傅里叶变换得到
x
N
(
n
)
x_N(n)
xN(n)的功率谱,记为
P
^
B
T
(
w
)
\hat{P}_{BT}(w)
P^BT(w),并以此作为对
P
(
w
)
P(w)
P(w)的估计。
P
^
B
T
(
w
)
=
∑
m
=
−
M
M
r
^
(
m
)
e
−
j
w
m
,
∣
M
∣
≤
N
−
1
\hat{P}_{BT}(w) = \sum_{m=-M}^{M} \hat{r}(m) e^{-jwm},\quad |M| \leq N-1
P^BT(w)=m=−M∑Mr^(m)e−jwm,∣M∣≤N−1
cxn = xcorr(xn,'unbiased');
P = fft(cxn);
Bertlett法
对L个具有相同均值
μ
\mu
μ和方差
σ
2
\sigma^2
σ2的独立随机变量
X
1
,
X
2
,
⋯
,
X
L
X_1,X_2,\cdots,X_L
X1,X2,⋯,XL,新随机变量
X
=
(
X
1
+
X
2
+
⋯
+
X
L
)
/
L
X = (X_1 + X_2 + \cdots + X_L)/L
X=(X1+X2+⋯+XL)/L的均值也是
μ
\mu
μ,但方差变为
σ
2
/
L
\sigma^2/L
σ2/L,小了L倍。由此得到改善
P
^
P
E
R
(
w
)
\hat{P}_{PER}(w)
P^PER(w)方差特性的一个有效方法。将采样数据
x
N
(
n
)
x_N(n)
xN(n)分为L段,每段的长度都是M,即N=LM,第i段数据加矩形窗后,变为
P
^
P
E
R
i
(
w
)
=
1
M
∑
i
=
1
L
∣
∑
n
=
0
M
−
1
x
N
i
(
n
)
e
−
i
w
n
∣
2
\hat{P}_{PER}^i (w) = \frac{1}{M} \sum_{i=1}^{L} \left|\sum_{n=0}^{M-1} x_N^i(n) e^{-iwn}\right|^2
P^PERi(w)=M1i=1∑L
n=0∑M−1xNi(n)e−iwn
2,把
P
^
P
E
R
i
(
w
)
\hat{P}_{PER}^i (w)
P^PERi(w)对应相加,再取平均,得到平均周期图。
P
ˉ
P
E
R
(
w
)
=
1
L
∑
i
=
1
L
P
^
P
E
R
i
(
w
)
=
1
M
L
∑
i
=
1
L
∣
∑
n
=
0
M
−
1
x
N
i
(
n
)
e
−
i
w
n
∣
2
\bar{P}_{PER}(w) = \frac{1}{L} \sum_{i=1}^{L} \hat{P}_{PER}^i (w) = \frac{1}{ML} \sum_{i=1}^{L} \left|\sum_{n=0}^{M-1} x_N^i(n) e^{-iwn}\right|^2
PˉPER(w)=L1i=1∑LP^PERi(w)=ML1i=1∑L
n=0∑M−1xNi(n)e−iwn
2
Welch法
Welch法是对Bartlett法的改进。在对
x
N
(
n
)
x_N(n)
xN(n)分段时,可允许每一段数据有部分的交叠;每一段的数据窗口可以不是矩形窗口,例如使用汉宁窗或汉明窗,记为
d
2
(
n
)
d_2(n)
d2(n)。这样可以改善由于矩形窗边瓣较大引起的频谱失真。
P
ˉ
P
E
R
i
(
w
)
=
1
M
U
∣
∑
n
=
0
M
−
1
x
N
i
(
n
)
d
2
(
n
)
e
−
j
w
n
∣
2
\bar{P}_{PER}^i(w) = \frac{1}{MU} \left|\sum_{n=0}^{M-1} x_N^i(n) d_2(n) e^{-jwn}\right|^2
PˉPERi(w)=MU1
n=0∑M−1xNi(n)d2(n)e−jwn
2
U
=
1
M
∑
n
=
0
M
−
1
d
2
2
(
n
)
U = \frac{1}{M} \sum_{n=0}^{M-1} d_2^2(n)
U=M1n=0∑M−1d22(n)
[Pxx,f] = pwelch(xn,window,noverlap,nfft,fs,range)
代码
%谱估计 2023.09.19
close all;clear;
N = 1024;
fs = 1000;
n = (0:N-1)/fs;
xn = sin(2* pi*100*n) + sin(2* pi*200*n) + 0.001*randn(size(n));
%周期图法
[Pxx,f] = periodogram(xn,hamming(N),1024,fs);
%相关法
cxn = xcorr(xn,'unbiased');
P = fftshift(fft(cxn));
%Welch
[Pxx2,f2] = pwelch(xn,400,200,N,fs,'onesided'); %每段400,有200重叠
figure;
subplot(1,3,1);plot(f,10*log10(abs(Pxx)));title('周期图')
subplot(1,3,2);plot((-N+1:N-1)/N*fs/2,10*log10(abs(P)));title('相关法')
subplot(1,3,3);plot(f2,10*log10(abs(Pxx2)));title('Welch')
时频分析
问题背景:在处理声致水面微动信号问题时,一般处理流程是提取水面振动信号
y
(
t
)
y(t)
y(t)以后,通过周期图等频谱估计方法估计声源频率。
当声源频率随时间变化时,我们不仅想要知道频率,更想知道频率随时间的变化,此时就需要用到时频分析。
spectrogram