6 时间序列的谱
遍历的时间序列可以从一次实现的时间分布进行统计分析, 称为时域分析。 平稳时间序列的二阶性质也可以从其频率分解来研究, 称为频域分析。 频谱的典型代表是声音。
6.1 声音频谱演示
利用Audacity软件演示声音波形和频谱。
在Audacity中显示并播放笛子曲片段music-demo1.wav。 界面见图6.1。
其中有一个C5音主频率为523Hz,相应的片段存入了music-demo1b.wav, 在Audacity中打开此片段并聆听,见图6.2。 放大局部见图6.3。 谱密度图见图6.4。 其中最大值点就是乐器当前振动的频率, 音阶为C5(523Hz左右)。还有一些其他的峰, 在基础频率的倍数的位置。 谱估计的纵轴用了对数尺度。
我们人为用正弦波生成了频率为523Hz的声音文件,存入了music-demo1c.wav。 在Audacity中聆听、看波形、频谱图。 放大的波形图见图6.5, 这是一个严格的正弦波。 频谱图见6.6。 一个频率为\(f_0\)的正弦波声音,其振动波形的方程为 \[ y_t = \sin(2\pi f_0 t), t>0 \] \(t\)为以秒为单位的连续时间。
连续波形必须按一定的采样频率变成离散时间的时间序列, 比如每秒8000点,称为采样频率8kHz, 这只要按每秒钟按上述方程生成8000个\(y_t\)值即可。 常用的采样频率如CD音质,为44.1kHz。 可以记录单声道或者双声道, 每个采样点的值一般用若干二进制位表示, 比如CD音质使用16bit记录一个采样点的值, 波形取值在\(\pm 2^{15}\)之间。
保存声音的数据文件可以进行压缩, 比如MP3格式就是一种压缩的有失真的压缩声音文件格式。 用比特率表示保存每秒所需要的二进制位数, 比如MP3常用的标准音质为128kbps, 即每秒钟16K字节,或每分钟0.9M字节。
在R中读入music-demo2.wav, 这是笛子演奏片段,有三个音阶
C5--D#5--C5
。 在R中画C5(523Hz)0.05秒片段时间序列图、谱密度估计图、动态谱峰图。 见§6.4.4。在R中人为生成523Hz正弦波, 画时间序列图、谱密度估计和动态谱峰图。 见§6.4.4。 保存为music-demo2b.wav。 可在Audacity中查看和聆听。
在R中直接生成的两个单音C4和C5叠加的复音的序列图和谱密度估计、动态谱峰图。 保存为music-demo2c.wav。 可在Audacity中查看和聆听。
音调和频率的对照表:
音调 | 低音(3) | 中音(4) | 高音(5) |
---|---|---|---|
C | 131 | 262 | 523 |
D | 147 | 294 | 587 |
E | 165 | 330 | 659 |
F | 175 | 349 | 698 |
G | 196 | 392 | 784 |
A | 220 | 440 | 880 |
B | 247 | 494 | 988 |
频率262是中音C或C4, 是钢琴键盘的最中间8度音的C音, 这一组是小字1组; 频率440是中音A或A440, 频率440是国际标准音高。
在十二音阶中, 相差八度音的两个音调(比如C4, 262Hz与C5, 523Hz)的频率相差一倍; 每个半音的频率为上一个半音频率的\(\sqrt[12]{2}\)倍。

图6.1: Audacity运行界面

图6.2: Audacity中笛子音C5

图6.3: Audacity中笛子音C5画面放大

图6.4: Audacity中笛子音C5片段的谱密度

图6.5: Audacity中单音C5片段放大

图6.6: Audacity中单音C5谱密度
6.2 平稳序列的谱
6.2.1 平稳序列的谱函数
设平稳序列\(\{X_t\}\) 有自协方差函数 \(\{\gamma_k\}\). 如果有\([-\pi,\pi]\)上的单调不减右连续的函数\(F(\lambda)\)使得 \[\begin{equation} \gamma_k \ = \int_{-\pi}^{\pi} e^{ik\lambda}\ dF(\lambda), \ \ F(-\pi)=0, \ \ k\in \mathbb Z, \tag{6.1} \end{equation}\] 则称 \(F(\lambda)\)是\(\{X_t\}\) 或 \(\{\gamma_k\}\)的谱分布函数, 简称为谱函数; 如果有\([-\pi,\pi]\)上的非负函数\(f(\lambda)\)使得 \[\begin{equation} \gamma_k \ = \int_{-\pi}^{\pi} f(\lambda) e^{ik\lambda}\ d\lambda, \quad k\in \mathbb Z, \tag{6.2} \end{equation}\] 则称\(f(\lambda)\)是\(\{X_t\}\) 或 \(\{\gamma_k\}\)的谱密度函数或功率谱密度, 简称为谱密度或功率谱.
谱反映了平稳序列的相关结构。 谱密度是将原始序列看成许多个不同频率的余弦波的叠加时, 不同频率的振幅平方大小, 谱密度越高的地方, 对应的频率成分的振幅越大。
例6.1 演示:高频时间序列和低频时间序列的序列图和密度.
演示:低频时间序列图形
set.seed(1)
m <- 10
n <- 100+m+1
fil <- rep(1/(m+1), m+1)
eps <- rnorm(n)
x <- filter(eps, fil, method="convolution", sides=1)
eps <- eps[-seq(m+1)]
x <- x[-seq(m+1)]
ts.plot(x, col="black", main="Low frequency t.s.",
xlab="time", ylab="y")
低频时间序列的谱密度样例(横坐标为\([0,\pi]\)内的角频率):
fr <- seq(0, pi, length=100)
sp <- numeric(length(fr))
for(j in seq(along=fr)){
sp[j] <- abs(sum(complex(mod=1, arg=-(0:m)*fr[j])))^2
}
sp <- sp/(2*pi*(m+1)^2)
plot(fr, sp, type='l', main="Spectral density of LOW frequency t.s.",
xlab="Frequency", ylab="Density")
高频时间序列的模拟数据:
r0 <- complex(mod=1.1, arg=4/5*pi)
poly1 <- c(1, -2*Re(r0), Mod(r0)^2)
poly2 <- poly1 / poly1[3]
poly2 <- rev(poly2)
eps <- rnorm(n+100)
y <- numeric(length(eps))
for(j in 3:length(y)){
y[j] = -poly2[2]*y[j-1] - poly2[3]*y[j-2] + eps[j]
}
y <- y[-seq(100)]
ts.plot(y, main="High frequency t.s.",
xlab="time", ylab="y")
高频时间序列的谱密度样例:
sp2 <- numeric(length(fr))
for(j in seq(along=fr)){
sp2[j] <- abs(sum(poly2 * complex(mod=1, arg=(0:2)*fr[j])))^2
}
sp2 <- 1/(2*pi) / sp2
plot(fr, sp2, type='l', main="Spectral density of HIGH frequency t.s.",
xlab="Frequency", ylab="Density")
○○○○○○
定理6.1 (Herglotz定理) 平稳序列的谱函数是惟一存在的.
(参见(谢衷洁 1990)P21定理1.6)
若\(F(\lambda)\)和\(f(\lambda)\)同时存在则 \[\begin{align} F(\lambda) = \int_{-\pi}^\lambda f(s) \,ds \tag{6.3} \end{align}\]
若\(F(\lambda)\)绝对连续则其几乎处处导数\(F'(\lambda)\)为谱密度。 若\(F(\lambda)\)是连续函数,除去有限点外导函数存在且连续则 \[\begin{aligned} f(\lambda) = \begin{cases} F'(\lambda) & \ \text{当$F'(\lambda)$存在}\\ 0 & \ \text{当$F'(\lambda)$不存在} \end{cases} \end{aligned}\] 是谱密度。
6.2.2 白噪声列的谱密度
设\(\{\varepsilon_t \}\)为白噪声列WN(\(\mu\), \(\sigma^2\))。 自协方差函数为 \[\begin{aligned} \gamma_k = \sigma^2 \delta_k, \quad k \in \mathbb Z \end{aligned}\] 显然,令 \[\begin{aligned} f(\lambda) = \frac{\sigma^2}{2\pi}, \quad \lambda \in [-\pi, \pi] \end{aligned}\] 有 \[\begin{aligned} \gamma_k = \int_{-\pi}^{\pi} f(\lambda) e^{ik\lambda} d\lambda, \quad k \in \mathbb Z \end{aligned}\] 即白噪声列有常数谱密度。
反之,有常数谱密度的平稳列一定是白噪声列。
6.2.3 线性平稳列的谱密度
定理6.2 如果 \(\{\varepsilon_t\}\) 是 \(\text{WN}(0,\sigma^2)\), 实数列 \(\{a_j\}\)平方可和, 则线性平稳序列 \[ X_t = \sum_{j=-\infty}^{\infty} a_j \varepsilon_{t-j}, \ \ t\in \mathbb Z, \] 有谱密度 \[\begin{align} f(\lambda) = \frac{\sigma^2}{2\pi } \left|\sum_{j=-\infty}^{\infty} a_j e^{ij\lambda}\right|^2. \tag{6.4} \end{align}\]
证明:
§5.1.5已经证明\(\{X_t\}\)的自协方差函数为 \[\begin{aligned} \gamma_k = \sigma^2 \sum_{j=-\infty}^\infty a_j a_{j+k} \end{aligned}\] 由§5.2的式(5.1), 可得到 \[\begin{aligned} \sigma^2 \sum_{j=-\infty}^\infty a_j a_{j+k} = \int_{-\pi}^{\pi} f(y) e^{iky} dy, \quad k \in \mathbb Z \end{aligned}\] 其中 \[\begin{aligned} f(\lambda) =& \frac{\sigma^2}{2\pi} \left| \sum_{j=-\infty}^{\infty} a_j e^{ij\lambda} \right|^2 \end{aligned}\] 于是 \[\begin{aligned} \gamma_k = \int_{-\pi}^{\pi} f(y) e^{iky} dy, \quad k \in \mathbb Z \end{aligned}\] 即\(f(\lambda)\)是\(\{X_t \}\)的谱密度。
○○○○○○
实际上,存在谱密度也是线性序列的充分条件:
定理6.3 若平稳列\(\{ X_t \}\)有谱密度, 则存在白噪声列\(\{ \varepsilon_t \}\)和平方可和的数列\(\{ a_j \}\)使得 \[ x_t = \sum_{j=-\infty}^{\infty} a_j \varepsilon_{t-j}, \ t \in \mathbb Z . \]
参见(谢衷洁 1990) P.49定理1.14。
6.2.4 两正交序列的谱
定理6.4 设\(\{X_t\}\) 和\(\{Y_t\}\)是相互正交的零均值平稳序列, \(c\)是常数, 定义 \[ Z_t=X_t+Y_t +c, \ \ t\in \mathbb Z. \]
如果\(\{X_t\}\) 和\(\{Y_t\}\)分别有谱函数 \(F_X(\lambda)\) 和 \(F_Y(\lambda)\), 则平稳序列 \(\{Z_t\}\) 有谱函数 \(F_Z(\lambda)=F_X(\lambda)+F_Y(\lambda)\).
如果\(\{X_t\}\) 和\(\{Y_t\}\)分别有谱密度 \(f_X(\lambda)\) 和 \(f_Y(\lambda)\), 则\(\{Z_t\}\) 有谱密度 \(f_Z(\lambda)=f_X(\lambda)+f_Y(\lambda)\).
证明: 主要由 \[ \gamma_Z(k) = \gamma_X(k) + \gamma_Y(k) \] 及谱函数和谱密度定义可得。
○○○○○○
6.2.5 线性滤波与谱
设平稳序列\(\{X_t\}\)有谱函数\(F_X(\lambda)\)和自协方差函数\(\{\gamma_k\}\). \(H=\{h_j\}\)是一个绝对可和的保时线性滤波器(参见§2.3). 当输入过程是\(\{X_t\}\)时, 输出过程是 \[\begin{align} Y_t=\sum_{j=-\infty}^\infty h_j X_{t-j}, \ \ t\in \mathbb Z. a.s. \tag{6.5} \end{align}\] 输出的自协方差为 \[\begin{align} \gamma_Y(k)=\sum_{l, j=-\infty}^\infty h_l h_j \gamma(k+l-j). \tag{6.6} \end{align}\] 求和意义为实数级数绝对收敛。
由控制收敛定理 \[\begin{align} \gamma_Y(k)=& \sum_{l,j=-\infty}^\infty h_l h_j \int_{-\pi}^\pi \exp(i(k+l-j)\lambda)\ dF_X(\lambda) \nonumber\\ =& \int_{-\pi}^\pi \sum_{l,j=-\infty}^\infty h_l h_j \exp(i(l-j)\lambda) e^{ik\lambda}\ dF_X(\lambda) \nonumber\\ =& \int_{-\pi}^\pi \left| \sum_{j=-\infty}^\infty h_j \exp(-ij\lambda) \right |^2 e^{ik\lambda}\ dF_X(\lambda) \nonumber\\ =& \int_{-\pi}^\pi |H(e^{-i\lambda})|^2 e^{ik\lambda} \;dF_X(\lambda), \tag{6.7} \end{align}\] 其中 \[\begin{align} H(z)=\sum_{j=-\infty}^\infty h_j z^j, \ |z|\leq 1. \tag{6.8} \end{align}\]
线性滤波输出\(\{Y_t\}\)的谱函数为 \[\begin{align} F_Y(\lambda) = \int_{-\pi}^\lambda |H(e^{-is})|^2 \ dF_X(s). \tag{6.9} \end{align}\] 当\(\{X_t\}\)有谱密度\(f_X(\lambda)\)时 \[\begin{align} F_Y(\lambda) = \int_{-\pi}^\lambda |H(e^{-is})|^2 f_X(s)\ ds. \tag{6.10} \end{align}\] 即\(\{Y_t\}\)谱密度为 \[\begin{align} f_Y(\lambda) = |H(e^{-i\lambda})|^2 f_X(\lambda) \tag{6.11} \end{align}\]
结论归纳成如下定理.
定理6.5 设\(\{X_t\}\)是平稳序列,\(H=\{h_j\}\)是绝对可和的保时线性滤波器, \(\{Y_t\}\)为滤波输出 \[\begin{align} Y_t=\sum_{j=-\infty}^\infty h_j X_{t-j}, \ \ t\in \mathbb Z. a.s. \tag{6.12} \end{align}\] \(H(z)\)是滤波器\(H\)的特征多项式 \[\begin{align} H(z)=\sum_{j=-\infty}^\infty h_j z^j, \ |z|\leq 1. \tag{6.13} \end{align}\]
如果\(\{X_t\}\)有谱函数\(F_X(\lambda)\), 则\(\{Y_t\}\)有谱函数 \[\begin{align} F_Y(\lambda) = \int_{-\pi}^\lambda |H(e^{-is})|^2 \ dF_X(s). \tag{6.14} \end{align}\]
如果\(\{X_t\}\)有谱密度\(f_X(\lambda)\), 则\(\{Y_t\}\)有谱密度 \[\begin{align} f_Y(\lambda) = |H(e^{-i\lambda})|^2 f_X(\lambda) \tag{6.15} \end{align}\]
由于(6.12), 序列\(\{ h_j \}\)看成\(j \in \mathbb Z\)的函数, 称为保时线性滤波器的脉冲响应函数。 由于(6.15), \(H(e^{-i\lambda})|^2\)称为频率响应函数。
脉冲响应的含义是, 如果输入\(\{ X_t \}\)中仅\(X_0=1\), 其它都等于0, 则\(Y_j = h_j\), 即输入在\(t=0\)时的一个单位的扰动, 由于线性滤波的影响, 输出在\(t=j\)时受到的影响是\(h_j\)。
频率响应的含义是, 原来在\(\lambda_0\)频率附近的震荡能量, 经过滤波后被放大到了原来的\(|H(e^{-i\lambda_0})|^2\)倍。
6.2.6 采样定理
设\(\{X(t), t\in \mathbb R\}\)是连续时的实值随机过程,若 \[\begin{aligned} & E X(t) \equiv \mu, \quad \forall t \in \mathbb R \\ & \text{Cov}(X(t), X(s)) = \gamma(t-s), \quad t,s \in \mathbb R \end{aligned}\] 则称\(\{X(t)\}\)为连续时平稳过程。 \(\{\gamma(\tau), \tau \in \mathbb R \}\)称为\(\{X(t)\}\)的自协方差函数。
对连续时平稳过程\(\{X(t), t\in \mathbb R\}\), 设自协方差函数为\(\{\gamma(\tau) \}\), 若有\((-\infty,\infty)\)上的单调不减右连续的函数\(F(\lambda)\)使得 \[\begin{aligned} \gamma(\tau) \ = \int_{-\infty}^{\infty} e^{i\tau\lambda}\ dF(\lambda), \ \ F(-\infty)=0, \ \ \tau\in \mathbb R, \end{aligned}\] 则称 \(F(\lambda)\)是\(\{X_t\}\) 或 \(\{\gamma(\tau)\}\)的谱函数, 在一定理论条件下也有类似于Herglotz定理的结论。
如果有\((-\infty,\infty)\)上的非负函数\(f(\lambda)\)使得 \[\begin{aligned} \gamma(\tau) \ = \int_{-\infty}^{\infty} f(\lambda) e^{i\tau\lambda}\ d\lambda, \ \ \tau\in \mathbb R, \end{aligned}\] 则称 \(f(\lambda)\)是\(\{X_t\}\) 或 \(\{\gamma(\tau)\}\)的谱密度函数或功率谱密度, 简称为谱密度或功率谱.
连续时的平稳过程只能以一定的时间间隔记录,称为采样。 如何保证不损失信息?
定理6.6 (采样定理) 设\(\{X(t), t \in \mathbb R \}\)为连续时平稳过程, 有谱函数\(F(\lambda)\)且谱函数满足 \[\begin{aligned} \int_{|\lambda| \geq 2\pi f_0} dF(\lambda) = 0 \end{aligned}\] 则 \[\begin{aligned} X_t = \sum_{n=-\infty}^\infty X\left(\frac{n}{2 f_0} \right) \dfrac{\sin(2\pi f_0 t - n\pi)} {2\pi f_0 t - n\pi} \quad (L^2), \quad t \in \mathbb R \end{aligned}\] 这时记\(Y_n = X\left(\frac{n}{2 f_0} \right), n \in \mathbb Z\), 则平稳时间序列\(\{Y_n\}\)是\(X(t)\)以\(\Delta = \frac{1}{2 f_0}\) 等间隔取样的结果。 从采样\(\{Y_n, n \in \mathbb Z \}\)可以恢复原信号\(\{X(t), t \in \mathbb R\}\)。
参见:(谢衷洁 1990) P50定理1.15。
\(f_0\)称为上界频率,采样间隔不大于\(\Delta = \frac{1}{2 f_0}\) 采样恢复原始信号。
如果采样间隔大于\(\Delta\),信号的高频部分有丢失和混杂入低频的问题。
6.2.6.1 声音信号采样
数字音频信号以一定频率采样, 并把信号强度数字化为8位、16位等。 采样频率越高、数字化位数越多则信号保真度越高。 CD音质采样频率为44.1kHz(即采样间隔为\(\Delta = 1 / 44100\)秒, 上界频率为22.05kHz), 信号强度用每声道16位记录。 这样,立体声音频每秒钟记录的数据比特数为 \(44100\times 16 \times 2 = 1411200\) (称为码率1411.2kbps)。 每分钟约80MB数据。
MP3编码使用比较低的采样速率和数字化位数,并利用听觉心理学进行了压缩, 码率一般在\(32\sim 320\)kbps。
6.3 离散谱序列及其周期性
6.3.1 简单的离散谱序列
设随机变量\(\xi,\eta\)。\(E\xi=0, E\eta=0\); \(E(\xi \eta)=0\), \(E \xi^2 = E\eta^2 = \sigma^2\)。 常数\(\lambda_0 \in (0,\pi]\)。 令 \[\begin{align} Z_t = \xi \cos(\lambda_0 t) + \eta \sin(\lambda_0 t), t \in \mathbb N_+ \tag{6.16} \end{align}\] 写成极坐标表示: \[\begin{align} A =& \sqrt{\xi^2 + \eta^2}, \quad \cos\theta = \frac{\xi}A, \ \sin\theta = \frac{\eta}A \tag{6.17} \\ Z_t =& A \cos(t\lambda_0 - \theta) \tag{6.18} \end{align}\] 其实现是一个相位为\(-\theta\)的角频率为\(\lambda_0\)的余弦函数的离散采样, 表现并不随机,随机性表现在多个实现样本。
如果\(\xi\), \(\eta\)服从独立的标准正态分布, \(A\)服从Rayleigh分布, \(\theta\)服从U(\(-\pi, \pi\)), \(A\)和\(\theta\)独立。
易见\(E Z_t=0\)。 自协方差函数为 \[\begin{aligned} \gamma_{t-s} =& E(Z_t Z_s) \\ =& \Big[E(\xi^2) \cos(t\lambda_0)\cos(s\lambda_0) + E(\eta^2) \sin(t\lambda_0)\sin(s\lambda_0) \\ & + E(\xi\eta) \cos(t\lambda_0)\sin(s\lambda_0) + E(\xi\eta) \cos(s\lambda_0)\sin(t\lambda_0) \Big] \\ =& \sigma^2\left[\cos(t\lambda_0)\cos(s\lambda_0) + \sin(t\lambda_0)\sin(s\lambda_0) \right] + 0 + 0 \\ &\quad(\text{注意}\xi,\eta\text{正交}) \\ =& \sigma^2 \cos((t-s)\lambda_0) \end{aligned}\] 所以(6.18)定义的\(\{Z_t \}\)平稳, 有自协方差函数\(\{\gamma_k\}\)。
现 \[\begin{aligned} \gamma_k =& \sigma^2 \cos(k\lambda_0),\ k \in \mathbb Z \end{aligned}\] 若\(\lambda_0 \neq \pi\), 谱函数为 \[\begin{aligned} F(\lambda) = \sigma^2 [ 0.5 I_{[-\lambda_0,\pi]}(\lambda) + 0.5 I_{[\lambda_0,\pi]}(\lambda)] \end{aligned}\]

图6.7: 简单离散谱序列的谱函数
这样的阶梯函数形式的谱函数表示在\([-\pi,\pi]\)上的一个测度, 此测度仅在\(-\lambda_0\)和 \(\lambda_0\)两个点上有质量\(\sigma^2/2\)。 由积分与测度的关系可知 \[\begin{aligned} \int_{-\pi}^\pi e^{ik\lambda} dF(\lambda) = \frac{\sigma^2}{2} [ e^{-ik\lambda_0} + e^{ik\lambda_0} ] = \gamma_k \end{aligned}\]
若\(\lambda_0 = \pi\), 则\(\gamma_k = \sigma^2 \cos(k\pi)\), \[\begin{aligned} F(\lambda) = \sigma^2 I_{\{\pi\}}(\lambda), \ \lambda \in [-\pi,\pi] \end{aligned}\]
如果将\(\gamma_k\)看成是\(k \in [0, \infty)\)的函数, 这是以\(\frac{2\pi}{\lambda_0}\)为周期的一个余弦函数, 当\(k\)等于周期的倍数时达到最大值, 也就是说, \(\rho(X_t, X_{t+k})\)当\(k\)为轨道的周期的倍数时最大, 而轨道的周期恰好是谱函数的跳跃点或者谱密度的峰值点。 注意谱函数和谱密度是序列中不同频率振动的强度的度量, 这个例子告诉我们, 如果从谱函数和谱密度中看出某个频率占优, 则相应的周期上的相关性也最强。 \(\gamma_k\)与\(f(\lambda)\)是傅立叶系数与傅立叶级数函数之间的关系, 从时间序列来看, \(\gamma_k\)与\(\rho_k\)反映了相关性大小, 谱密度反映不同频率的振动能量大小, 相关性强的滞后值\(k\)会对应于谱密度\(\frac{2\pi}{k}\)附近的峰值。
6.3.2 离散谱
阶梯函数的谱函数称为离散谱函数, 相应的平稳序列称为离散谱序列。 离散谱函数对应\([-\pi,\pi]\)上的一个只在离散点上取值的测度。
离散谱函数没有对应的谱密度,但是可以逼近。 令 \[\begin{aligned} f_n(\lambda) =& n \sigma^2 I_{[-\lambda_0, -\lambda_0 + 1/(2n)] \cup [\lambda_0 - 1/(2n), \lambda_0]}(\lambda) \\ F_n(\lambda) =& \int_{-\pi}^\lambda f_n(u) du \end{aligned}\] 则\(f_n\)是一个仅在两个长度为\(\frac{1}{2n}\)的小区间上非零的分段函数。 \(F_n(\lambda)\)为连续的折线函数,仅在上述两个小区间上为线性增函数, 在其它位置为水平线。 有极限 \[\begin{aligned} F_n(\lambda) \to F(\lambda), \ \lambda \neq \pm \lambda_0, \ n \to \infty. \end{aligned}\]
\(f_n(\lambda)\)是某平稳列的谱密度。 当\(n\to\infty\)时 \[\begin{aligned} g_k(n) \stackrel{\triangle}{=}& \int_{-\pi}^\pi e^{ik\lambda} f_n(\lambda) d\lambda \\ =& n\sigma^2 \left(\int_{-\lambda_0}^{-\lambda_0 + \frac{1}{2n}} e^{ik\lambda} d\lambda + \int_{\lambda_0 - \frac{1}{2n}}^{\lambda_0} e^{ik\lambda} d\lambda \right) \\ =& 2 n \sigma^2 \int_{\lambda_0 - \frac{1}{2n}}^{\lambda_0} \cos(k\lambda) d\lambda \\ & \quad (\sin\text{在关于原点对称的区间积分为零})\\ =& 2 n \sigma^2 \cos(k(\lambda_0 + \alpha_n)) \cdot \frac{1}{2n} \quad\text{(积分中值定理)} \\ =& \sigma^2 \cos(k\lambda_0 + k\alpha_n) \\ \to& \sigma^2 \cos(k\lambda_0) = \gamma_k, \ n \to \infty \end{aligned}\] 其中数列\(\{\alpha_n \}\)满足\(\alpha_n \in (-\frac{1}{2n}, 0), n\in \mathbb N_+\)。
当\(n\)很大时, \(f_n(\lambda)\)对应的平稳列和\(\{Z_t\}\)的表现已经很接近, 其轨道表现为近似周期函数形式。
推广来看,如果某平稳列的谱密度在某处有很高的峰, 则此序列的轨道在峰对应的频率(角频率)处应该表现出周期性。 比如,月度数据的谱密度在角频率\(\frac{2\pi}{12}\)处表现出高的峰值。 设\(\omega\)为角频率,\(f\)为频率,\(T\)为周期,则 \[\begin{aligned} \omega = 2\pi f, \quad T = \frac{1}{f} \end{aligned}\]
例6.2 国际航空订票数据的随机项的谱密度在周期12处有显著峰值。 考察数据的周期性变化是谱密度估计的重要应用之一。
这里的横坐标频率单位是以\(1/T\)为单位, 这里\(T=12\)。
○○○○○○
6.3.3 离散谱序列
实际中的离散谱序列经常会有多个频率成分。 设有\(2p\)个随机变量\(\xi_k, \eta_k, k=1,\dots,p\), 所有\(2p\)个两两正交,满足 \[\begin{align} E\xi_j = E\eta_j = 0, \quad E\xi_j^2 = E\eta_j^2 = \sigma_j^2 \tag{6.19} \end{align}\] 设\(\lambda_j \in (0,\pi], j=1,\dots,p\),定义 \[\begin{align} Z_t =& \sum_{j=1}^p [\xi_j \cos(\lambda_j t) + \eta_j \sin(\lambda_j t) ] \nonumber \\ =& \sum_{j=1}^p A_j \cos(\lambda_j t - \theta_j), \quad t \in \mathbb N_+ \tag{6.20} \end{align}\] 其轨道表现为有\(p\)个频率成分的非随机函数。
\(\{Z_t\}\)为零均值平稳列, \[\begin{align} \gamma_k = \sum_{j=1}^p \sigma_j^2 \cos(k\lambda_j), \quad k \in \mathbb Z. \tag{6.21} \end{align}\]
设所有\(\lambda_j \neq \pi\), 这时谱函数为 \[\begin{aligned} F(\lambda) = \sum_{j=1}^p \frac{\sigma_j^2}{2} \left[ I_{[-\lambda_j, \pi]}(\lambda) + I_{[\lambda_j, \pi]}(\lambda) \right], \ \lambda \in [-\pi,\pi] \end{aligned}\] 此谱函数表现为在\(\pm \lambda_j\)处有跳跃\(\frac{\sigma_j^2}{2}\) 的阶梯函数,表明谱的能量集中在这\(2p\)个频率上。
§6.1讲谱时的单音例子就是离散谱的例子。
离散谱序列可以由可列个简单的离散谱序列叠加而成。 设\(\xi_j, \eta_k, (j,k=1,2,\dots)\)两两正交,满足 \[\begin{align} E\xi_j = E\eta_j = 0, \quad E\xi_j^2 = E\eta_j^2 = \sigma_j^2 \tag{6.22} \end{align}\] 且 \[\begin{align} \sum_{j=1}^\infty \sigma_j^2 < \infty \tag{6.23} \end{align}\] 设\(\lambda_j \in (0,\pi], j=1,2,\dots\)。
定义 \[\begin{align} Z_t =& \sum_{j=1}^\infty [\xi_j \cos(\lambda_j t) + \eta_j \sin(\lambda_j t) ] \quad t \in \mathbb N_+ \tag{6.24} \end{align}\] 改写为 \[\begin{align} Z_t = \sum_{j=1}^\infty \left[ \sigma_j \cos(t\lambda_j) (\xi_j / \sigma_j) + \sigma_j \sin(t\lambda_j) (\eta_j / \sigma_j) \right], \tag{6.25} \end{align}\] 其中\(\{\xi_j/\sigma_j\}\)和\(\{\eta_j/\sigma_j\}\)可以合并为一个WN(0,1), 级数中组合系数平方可和: \[\begin{aligned} \sum_{j=1}^\infty \left[ (\sigma_j \cos(t\lambda_j))^2 + (\sigma_j \sin(t\lambda_j))^2 \right] = \sum_{j=1}^\infty \sigma_j^2 < \infty \end{aligned}\] 所以级数(6.24)的右端均方收敛。
由\(L^2\)中内积的连续性, 对\(\forall t, s \in \mathbb Z\)有 \[\begin{aligned} E(Z_t) =& E(Z_t \cdot 1) \\ =& \sum_{j=1}^\infty E [\xi_j \cos(\lambda_j t) + \eta_j \sin(\lambda_j t) ] \\ =& 0 \\ E(Z_t Z_s) =& \lim_{n\to\infty} \Big\{ \sum_{j=1}^n [\xi_j \cos(\lambda_j t) + \eta_j \sin(\lambda_j t) ] \\ & \cdot \sum_{j=1}^n [\xi_j \cos(\lambda_j s) + \eta_j \sin(\lambda_j s) ] \Big\} \\ =& \lim_{n\to\infty} \sum_{j=1}^n \sigma_j^2 \cos[(t-s)\lambda_j] \\ =& \sum_{j=1}^\infty \sigma_j^2 \cos[(t-s)\lambda_j] \end{aligned}\]
所以,由可列个简单离散谱序列叠加得到的序列(6.24)是零均值平稳列。 它由可列个正弦波和余弦波叠加构成。 有自协方差函数 \[\begin{align} \gamma_k = \sum_{j=1}^\infty \sigma_j^2 \cos(k\lambda_j), \ k \in \mathbb Z \tag{6.26} \end{align}\] 谱函数为 \[\begin{align} F(\lambda) = \sum_{j=1}^\infty \frac{\sigma_j^2}{2} \left[ I_{[-\lambda_j, \pi]}(\lambda) + I_{[\lambda_j, \pi]}(\lambda) \right], \ \lambda \in [-\pi,\pi] \tag{6.27} \end{align}\] 是一个有可列个跳跃点的阶梯函数,在\(\pm \lambda_j\)有跳跃\(\sigma_j^2/2\), 对应于\([-\pi,\pi]\)的一个离散测度。 如果某个\(\lambda_j=\pi\), 它对\(F(\lambda)\)的贡献应该写成, \(\sigma_j I_{\{\pi\}}(\lambda)\)。
尽管离散谱序列是随机的,但它的每一次观测是确定的三角函数相加在整数点上的取值。 实际工作中也经常把这样的模型看作非随机的,这时 \[\begin{aligned} Z_t = \sum_{j=1}^p A_j \cos(\lambda_j t + \theta_j), \ t \in \mathbb Z \end{aligned}\] 其中\(A_j, \theta_j\)非随机。 称这样的模型为调和模型(harmonic model)。
6.4 附录:用R程序处理声音
6.4.1 tuneR包
tuneR包可以读写WAV格式的声音文件, 并作一些简单操作。 还可以读入MP3格式, 读入Midi格式, 分辨音符并输出为lilipond格式。
读入一个WAV文件,用如
还可以指定from
, to
, units="seconds"
来读取WAV文件的一个片段。
读入的左声道数据为mus@left
,
采样率为mus@samp.rate
。
读入的声音数据没有自动标准化,
取值可能是在\(\pm 2^{\text{bit}-1}\)范围而不是\([-1,1]\)范围。
readMP3()
函数可以读取MP3文件。
用writeWave将声音保存为WAV文件,如
y2 <- tuneR::sine(freq=523, samp.rate=8000, duration=1, xunit="time")
writeWave(y2, filename="data/music-demo2b.wav")
可以用stereo()
函数将两个单声道组合成立体声,
可以用mono()
函数从立体声取出其中一个声道。
6.4.2 sound包
R软件的sound包可以读写WAV格式的声音文件并进行简单的操作。 可以在WAV格式与矩阵格式之间进行转换。
读入一个WAV文件,用如
这样读入一个声音对象。
用rate(mus)
求采样频率。
用saveSample把声音片段保存为WAV格式,如
6.4.3 seewave包
seewave包可以分析、合成声音, 进行时间、振幅、频率分析, 估计声音之间的数量差别,生成新的声音用于回放。
读入的声音, 可以是向量、矩阵、时间序列(ts, mts), 或者tuneR包的Wave类型, audio包的audioSample类型。
对于普通向量, 矩阵, 只要指定采样频率, 就可以看成是声音。
对于ts或者mts类型的时间序列, 其frequency对应于声音的采样频率。 多元时间序列在seewave中只使用其中第一列。
oscillo()
绘制声音波形图。
spec()
作谱密度估计图。
spectro()
作动态谱峰图。
6.4.4 演示程序
如下的程序读入music-demo2.wav音乐文件, 此文件包含了笛子演奏片段,有三个音符:
## Warning in readChar(con, 4): 在non-UTF-8 MBCS语言环境里只能读取字节
## Warning in readChar(con, 4): 在non-UTF-8 MBCS语言环境里只能读取字节
## Warning in readChar(con, 4): 在non-UTF-8 MBCS语言环境里只能读取字节
## Warning in readChar(con, 4): 在non-UTF-8 MBCS语言环境里只能读取字节
## 采样频率= 22050
用seewave::cutw()
函数截取从0.125秒到1.125秒的音高为C5的片段,
以及其中0.05秒的片段:
## mi1: 1秒长的一段C5音阶。
mi1 <- cutw(mus, from=0.125, to=1.125,
output="Wave")
## mi1a: 0.05秒长的一段C5音阶。
mi1a <- cutw(mus, from=0.500, to=0.550,
output="Wave")
显示0.05秒的序列图,标题中的f=22050是采样频率, 音阶是C5(523Hz):
对0.05秒的C5音阶录音用时间序列分析的spec.pgram()
函数做加窗谱估计,
注意纵轴用了对数刻度:
spec.pgram(ts(mi1a@left, frequency=mi1a@samp.rate), spans=c(5,7),
xlim=c(0,10000), main="用spec.pgram进行谱估计",
xlab="")
用seewave包的spec()
函数显示0.05秒的C5音阶的频谱,纵轴没有用对数刻度:
下面用seewave包的spectro()
函数对包含三个音阶的笛子演奏片段做动态谱峰图,
动态显示随时间变化的主要谱峰位置。
横坐标是时间,纵坐标是声音频率,
颜色为在该时间、该频率上的振幅
(注意同一时刻只有一个主要频率有振幅)
能看出C5--D#5--C5
的频率主峰变化。
如下的程序用R的基本函数生成一个523Hz声音(音调C5)的1秒的波形, 作为一个R向量, 并显示前0.05秒的波形图:
f8000 <- 8000 ## 采样频率8kHz。
## timey: 为[0,1]中等间隔8000个点的时间。采样频率8000Hz。
timey <- seq(0,1, length.out=f8000*1)
## y: 直接用sin函数生成的523Hz单音,向量长度为8000个点,组成1秒钟。
y <- sin(2*pi*523*timey)
## 用oscillo函数作波形图,仅取前0.05秒:
seewave::oscillo(
cutw(y, f=f8000, from=0, to=0.05),
f=f8000,
title='直接用sin函数生成523Hz单音')
事实上,
tuneR包的sine()
函数可以更容易地生成这种单音的文件,如
人造单音的动态频谱图:
下面用基本R函数生成C4+C5复音,以C4为主(振幅比值为2)。 作前0.05秒的波形图:
f8000 <- 8000
y3 <- 0.5*sin(2*pi*262*seq(0,1, length.out=f8000*1)) + # C4音阶
0.25 * sin(2*pi*523*seq(0,1, length.out=f8000*1))
##writeWave(Wave(y3*2^15, samp.rate=f8000, bit=16),
## filename="data/music-demo2c.wav")
oscillo(cutw(y3, f=f8000, from=0, to=0.05), f=f8000,
title='低音C和中音C的复音')
人造复音的频谱图:
人造复音的动态频谱图:
6.5 谱函数和谱密度补充
当平稳时间序列的自协方差函数绝对可和时, 谱密度存在且与自协方差函数是傅立叶级数和傅立叶系数的关系。 对于连续时平稳过程的自协方差函数绝对可积时, 也有谱密度,且自协方差函数与谱密度为傅立叶变换关系。
设复值平稳列\(\{ \xi_t, t\in \mathbb Z \}\)的谱函数为\(F(\lambda)\), \(\{\xi_t \}\)张成的Hilbert空间\(H_\xi\)与 \[\begin{aligned} L^2(dF) = \{\varphi(\lambda): \int_{-\pi}^\pi |\varphi(\lambda)|^2 d F(\lambda) \} \end{aligned}\] 存在等距对应映射\(\mathcal K\)把\(L^2(dF)\)映射到\(H_\xi\)使得两空间同构, \(\mathcal K\)把\(e^{it\lambda}\)映射为\(\xi_t\)。
定理6.7 (平稳序列谱表示) 对复值平稳时间序列\(\{\xi_t, t\in \mathbb Z\}\), 存在\([-\pi,\pi]\)上的零均值连续时正交增量左\(L^2\)连续复值随机过程 \(\{Z(\lambda), \lambda \in [-\pi,\pi]\}\), 使得\(Z(-\pi)=0\), \[\begin{aligned} E| Z(\lambda_2) - Z(\lambda_1) |^2 = F_\xi(\lambda_2) - F_\xi(\lambda_1), \ -\pi \leq \lambda_1 < \lambda_2 \leq \pi. \end{aligned}\] 对任意\(\varphi \in L^2(dF_\xi)\),可以定义随机积分 \[\begin{aligned} \int_{-\pi}^\pi \varphi(\lambda) dZ(\lambda) \end{aligned}\] 这时 \[\begin{aligned} \xi_t = \int_{-\pi}^{\pi} e^{it\lambda} dZ(\lambda) \end{aligned}\] 称为平稳时间序列的谱表示, 含义是如下极限 \[\begin{aligned} \xi_t = \lim_{\max |\Delta \lambda_k| \to 0} \sum_{k} e^{it\lambda_k} Z^{(b)}(\Delta\lambda_k) \end{aligned}\]
见(谢衷洁 1990)PP30–40。
定理6.8 有谱密度的平稳列必为系数平方可和的线性序列。
见(谢衷洁 1990)P49。
6.6 给定谱密度后的时间序列模拟生成
设某平稳列\(\{ X_t \}\)谱密度为\(f(\lambda)\), 希望生成\(\{ X_t \}\)的模拟数据\(X_1, X_2, \dots, X_n\)。
因为\(f(\lambda)\)决定了自协方差函数\(\{\gamma_k\}\), 可以先计算\(\gamma_0, \gamma_1, \dots, \gamma_{n-1}\), 具体可以使用数值积分方法计算 \[ \gamma_k = 2\int_0^\pi f(\lambda) \cos(k\lambda) \,d\lambda, \ k=0,1,\dots, n-1 \] 得到随机向量\(\boldsymbol X = (X_1, X_2, \dots, X_n)\)的协方差阵\(\Gamma_n\)。
当\(n\)不太大时, 可以计算\(\Gamma_n\)的Cholesky分解\(\Gamma_n = B B^T\), \(B\)为下三角阵且对角线元素为正值。 生成独立同标准正态分布的\(Z_1, Z_2, \dots, Z_n\), 令\(\boldsymbol Z = (Z_1, Z_2, \dots, Z_n)^T\), 令\(\boldsymbol X = B Z\), 则\(X_1, X_2, \dots, X_n\)为自协方差函数为\(\{ \gamma_k \}\), 谱密度为\(f(\lambda)\)的零均值正态平稳列的样本。
当\(n\)很大时, 计算很多个\(\{\gamma_k \}\)计算量很大也不必要, 因为\(\gamma_k \to 0\); 存储和计算Cholesky分解也可能需要许多存储空间与计算时间, 而且由于计算误差可能导致\(\Gamma_n\)不正定。 这时可以用条件分布法, 设定一个界限\(p\), 认为条件分布\(X_k | X_{k-1}, \dots, X_1\)近似等于条件分布\(X_k | X_{k-1}, \dots, X_{k-p}\), 然后仅利用\(\Gamma_p\)产生条件期望和条件方差, 逐步向前推进模拟。 可以从\(\gamma_0, \dots, \gamma_p\)求解出一个AR(\(p\))模型, 模拟这个AR(\(p\))代替要模拟的序列。
作为例子, 我们来模拟6.3.2中用阶梯函数谱密度逼近离散谱序列的问题。 只有一个频率的离散谱序列为 \[ X_t = \xi \cos(\lambda_0 t) + \eta \sin(\lambda_0 t) \] 其中\(\xi, \eta\)不相关,零均值,方差都等于\(\sigma^2\)。 自协方差函数为 \[ \gamma_k = \sigma^2 \cos(k \lambda_0) \] \(\{X_t \}\)的谱函数为 \[\begin{aligned} F(\lambda) = \sigma^2 [ 0.5 I_{[-\lambda_0,\pi]}(\lambda) + 0.5 I_{[\lambda_0,\pi]}(\lambda)] \end{aligned}\] 是仅在\(-\lambda_0\)和\(\lambda_0\)处有跳跃的阶梯函数, 见图6.7。
取谱密度 \[\begin{aligned} f_n(\lambda) =& n \sigma^2 I_{[-\lambda_0, -\lambda_0 + 1/(2n)] \cup [\lambda_0 - 1/(2n), \lambda_0]}(\lambda) \\ F_n(\lambda) =& \int_{-\pi}^\lambda f_n(u) du \end{aligned}\] 则\(f_n\)是一个仅在两个长度为\(\frac{1}{2n}\)的小区间上非零的分段函数。 \(F_n(\lambda)\)为连续的折线函数,仅在上述两个小区间上为线性增函数, 在其它位置为水平线。 有极限 \[\begin{aligned} F_n(\lambda) \to F(\lambda), \ \lambda \neq \pm \lambda_0, \ n \to \infty. \end{aligned}\]
来模拟生成谱密度为\(f_n(\lambda)\)的平稳列。 对应的协方差函数为 \[\begin{aligned} g_k(n) =& \int_{-\pi}^\pi f(\lambda) \cos k\lambda \\ =& \frac{2 n \sigma^2}{k} \left[ \sin(k \lambda_0) - \sin(k (\lambda_0 - \frac{1}{2n}) ) \right], k=1,2,\dots, \\ g_0(n) =& \sigma^2 \end{aligned}\]
取\(\lambda_0 = \frac{2\pi}{4}\),
对应于周期4,
取\(n = 10\)。
下面的函数中,
T
是要模拟的序列长度,
T0
是离散谱的周期,对应于\(\frac{2\pi}{\lambda_0}\),
\(n\)是用来近似的谱密度\(f_n(\lambda)\)的逼近程度,
\(n\)越大,模拟的谱函数越接近于离散谱函数。
## 一般的给定自协方差函数的模拟程序
sim.fromgam <- function(gamfun){
n <- length(gamfun)
Gmat <- outer(1:n, 1:n, function(i, j) gamfun[abs(i-j) + 1])
B <- chol(Gmat) # 结果是n*n上三角矩阵
c(rnorm(n) %*% B)
}
sim.disc2dens <- function(T = 64, T0 = 4, n = 10, sigma = 1){
## 先计算\gamma_0, \dots, \gamma_{T-1}
lam0 <- 2*pi / T0
lam1 <- lam0 - 1/(2*n)
kk <- 1:(T-1)
gamfun <- (2*n*sigma^2) * c(1/(2*n), 1/kk * (
sin(kk*lam0) - sin(kk*lam1) ) )
sim.fromgam(gamfun)
}
模拟一次:
xdd <- sim.disc2dens(T = 64, T0 = 4, n = 10)
## Error in chol.default(Gmat) : the leading minor of order 11 is not positive definite
经过试验发现, 由于数值误差以及近似为离散谱的原因, 即使对比较小的\(n\), \(\Gamma_T\)矩阵也很快变得不满秩。 由于计算误差的影响, 上面结果中的\(\Gamma_T\)矩阵计算出的特征值从第28个开始就为负值了。 所以,我们取一个较低阶的AR(\(p\))作为近似。 取\(p = 6\)。
sim.disc2dens <- function(T = 128, T0 = 4, n = 10, p = 6, sigma = 1){
## 先计算\gamma_0, \dots, \gamma_{p}
lam0 <- 2*pi / T0
lam1 <- lam0 - 1/(2*n)
kk <- 1:p
gamfun <- (2*n*sigma^2) * c(1/(2*n), 1/kk * (
sin(kk*lam0) - sin(kk*lam1) ) )
## 求解Y-W方程得到a_1, \dots, a_p和AR模型的白噪声方差
Gmat <- outer(1:p, 1:p, function(i, j) gamfun[abs(i-j) + 1])
avec <- solve(Gmat, gamfun[-1])
s2ar <- gamfun[1] - sum(gamfun[-1] * avec)
arima.sim(model = list(ar = avec), n = T) * sqrt(s2ar)
}
xdd <- sim.disc2dens(T = 128, T0 = 4, n = 10, p = 6)
ts.plot(xdd)
结果中可以看出明显的周期性, 但是又和离散谱序列轨道哪种严格的周期函数不同。 估计其谱密度:
估计的谱密度在\(\lambda_0 = \frac{2\pi}{4} = 0.25\)处有唯一一个高峰。