この記事は,CheapTrick[Morise, 2015]とD4C[Morise, 2016]という音声処理の手法について,考察した事項をメモしたものです.窓関数を用いたDFTによる信号処理についてご存じであれば読めるかと思います.
なお,周期$T$の周期関数で,区間$[0,T]$において自乗可積分であるものの全体集合を$L^2(T)$と表記します.
CheapTrickの窓関数が持つ重要な性質に「分析する信号が周期関数であれば,信号の時間シフトでパワーが変化しない」ことがあります.どういうことかというと,次の定理が成立します.
$f\in L^2(T)$なら,次式が成立する.
\begin{equation}
\int_0^{3T} \abs{w(t)f(t)}^2\intd{t} = \frac{9}{8}\int_0^T \abs{f(t)}^2\intd{t}
\where w(t) = \frac{1}{2}-\frac{1}{2}\cos\pqty{\frac{2\pi t}{3T}}
\end{equation}
まず,$f(t)$,$w(t)$を周期$3T$の周期関数としてフーリエ級数展開し,フーリエ係数をそれぞれ$\fseries{f}_n$,$\fseries{w}_n$とおく.すると,$\fseries{w}_n$は
\begin{equation}
\hat{w}_n = \begin{cases}
1/2 & \text{($n=0$)} \\
-1/4 & \text{($n=\pm 1$)} \\
0 & \text{(otherwise)}
\end{cases}
\end{equation}
である.したがって,$g(t)=w(t)f(t)$のフーリエ係数$\fseries{g}_n$は,畳み込み定理により
\begin{equation}
\fseries{g}_n = \sum_{i=-\infty}^\infty \fseries{w}_i\fseries{f}_{n-i}
= -\frac{1}{4}\fseries{f}_{n-1} + \frac{1}{2}\fseries{f}_n - \frac{1}{4}\fseries{f}_{n+1}
\end{equation}
と書ける.
ここで,$f(t)$は周期$T$の周期関数だから,$n$が$3$の倍数でなければ$\fseries{f}_n=0$となる.そのため,$\fseries{f}_{n-1}$,$\fseries{f}_n$,$\fseries{f}_{n+1}$のうち,$0$でないものは1つしかない.よって
\begin{equation}
\abs{\fseries{g}_n}^2 = \fseries{g}_n\conj{\fseries{g}_n}
= \frac{1}{16}\abs{\fseries{f}_{n-1}}^2 + \frac{1}{4}\abs{\fseries{f}_n}^2 + \frac{1}{16}\abs{\fseries{f}_{n+1}}^2 + \sum_{\substack{i,j\in\Set{0,\pm 1}\\ i\neq j}}\cancelto{0}{\fseries{f}_{n+i}\conj{\fseries{f}_{n+j}}}
\end{equation}
である.したがって,パーセバルの定理から
\begin{align}
\frac{1}{3T}\int_0^{3T}\abs{g(t)}^2\intd{t} &= \sum_{n=-\infty}^\infty\abs{\fseries{g}_n}^2 \\
&= \frac{1}{16}\sum_{n=-\infty}^\infty\abs{\fseries{f}_{n-1}}^2 + \frac{1}{4}\sum_{n=-\infty}^\infty\abs{\fseries{f}_n}^2 + \frac{1}{16}\sum_{n=-\infty}^\infty\abs{\fseries{f}_{n+1}}^2 \\
&= \pqty{\frac{1}{16}+\frac{1}{4}+\frac{1}{16}}\cdot\frac{1}{3T}\int_0^{3T}\abs{f(t)}^2\intd{t} \\
&= \frac{1}{8T}\int_0^{3T}\abs{f(t)}^2\intd{t}
\end{align}
となる.$f(t)$は$T$を周期に持つから
\begin{equation}
\int_0^{3T}\abs{g(t)}^2\intd{t} = \frac{3}{8}\int_0^{3T}\abs{f(t)}^2\intd{t}
= \frac{9}{8}\int_0^T\abs{f(t)}^2\intd{t}
\end{equation}
である.
この証明において本質的なのは「畳み込み定理」と「パーセバルの定理」であり,これらはどちらも離散フーリエ変換に対しても成立します.よって,この主張・証明は離散フーリエ変換に対するものとして書き直せます.
$f_n$が周期$N$の周期数列なら,次式が成立する.
\begin{equation}
\sum_{n=0}^{3N-1} \abs{w_nf_n}^2 = \frac{9}{8}\sum_{n=0}^{N-1} \abs{f_n}^2
\where w_n = \frac{1}{2}-\frac{1}{2}\cos\pqty{\frac{2\pi n}{3N}}
\end{equation}
まず,$f_n$,$w_n$を周期$3N$の周期数列として離散フーリエ変換する.すなわち
\begin{equation}
F_k = \sum_{n=0}^{3N-1}f_ne^{-i(2\pi k/(3N))n},
\quad W_k = \sum_{n=0}^{3N-1}w_ne^{-i(2\pi k/(3N))n}
\end{equation}
とおく.すると,$W_k$は
\begin{equation}
W_k = \begin{cases}
1/2 & \text{($k=0$)} \\
-1/4 & \text{($k=\pm 1$)} \\
0 & \text{(otherwise)}
\end{cases}
\end{equation}
である.したがって,$g_n=w_nf_n$の離散フーリエ変換$G_k$は,畳み込み定理により
\begin{equation}
G_k = \sum_{n=0}^{3N-1}W_nF_{k-n}
= -\frac{1}{4}F_{k-1} + \frac{1}{2}F_k - \frac{1}{4}F_{k+1}
\end{equation}
と書ける.
ここで,$f_n$は周期$N$の周期関数だから,$k$が$3$の倍数でなければ$F_k=0$となる.そのため,$F_{k-1}$,$F_k$,$F_{k+1}$のうち,$0$でないものは1つしかない.よって
\begin{equation}
\abs{G_k}^2 = G_k\conj{G_k}
= \frac{1}{16}\abs{F_{k-1}}^2 + \frac{1}{4}\abs{F_k}^2 + \frac{1}{16}\abs{F_{k+1}}^2 + \sum_{\substack{i,j\in\Set{0,\pm 1}\\ i\neq j}}\cancelto{0}{F_{k+i}\conj{F_{k+j}}}
\end{equation}
である.したがって,パーセバルの定理から
\begin{align}
3N\sum_{n=0}^{3N-1}\abs{g_n}^2 &= \sum_{n=0}^{3N-1}\abs{G_n}^2 \\
&= \frac{1}{16}\sum_{k=0}^{3N-1}\abs{F_{k-1}}^2 + \frac{1}{4}\sum_{k=0}^{3N-1}\abs{F_k}^2 + \frac{1}{16}\sum_{k=0}^{3N-1}\abs{F_{k+1}}^2 \\
&= \pqty{\frac{1}{16}+\frac{1}{4}+\frac{1}{16}}\cdot 3N\sum_{n=0}^{3N-1}\abs{f_n}^2 \\
&= \frac{9N}{8}\sum_{n=0}^{3N-1}\abs{f_n}^2
\end{align}
となる.$f_n$は$N$を周期に持つから
\begin{equation}
\sum_{n=0}^{3N-1}\abs{g_n}^2 = \frac{3}{8}\sum_{n=0}^{3N-1}\abs{f_n}^2
= \frac{9}{8}\sum_{n=0}^{N-1}\abs{f_n}^2
\end{equation}
である.
次のJavaScriptを実行することで,この定理が成り立つことを数値的に確認できます.
const PI = Math.PI;
const N = 300;
const x = [];
const w = [];
for (let i = 0; i < N; i++) {
x[i] = Math.random();
x[i + N] = x[i];
x[i + 2 * N] = x[i];
}
for (let i = 0; i < 3 * N; i++) {
w[i] = 0.5 - 0.5 * Math.cos(2 * PI * i / (3 * N));
}
let S1 = 0;
let S2 = 0;
for (let i = 0; i < 3 * N; i++) {
S1 += (x[i] * w[i]) ** 2;
}
for (let i = 0; i < N; i++) {
S2 += x[i] ** 2;
}
console.log(S1 / S2); // 1.125 = 9/8
$f\in L^2(T)$なら,次式が成立する.
\begin{equation}
\int_0^{4T} \abs{w(t)f(t)}^2\intd{t} \fallingdotseq 1.2184\int_0^T\abs{f(t)}^2\intd{t}
\where w(t) = 0.42-0.5\cos\pqty{\frac{2\pi t}{4T}}+0.08\cos\pqty{\frac{2\pi t}{2T}}
\end{equation}
まず,$f(t)$,$w(t)$を周期$4T$の周期関数としてフーリエ級数展開し,フーリエ係数をそれぞれ$\fseries{f}_n$,$\fseries{w}_n$とおく.すると,$\fseries{w}_n$は
\begin{equation}
\hat{w}_n = \begin{cases}
0.42 & \text{($n=0$)} \\
-0.25 & \text{($n=\pm 1$)} \\
0.04 & \text{($n=\pm 2$)} \\
0 & \text{(otherwise)}
\end{cases}
\end{equation}
である.したがって,$g(t)=w(t)f(t)$のフーリエ係数$\fseries{g}_n$は,畳み込み定理により
\begin{equation}
\fseries{g}_n = \sum_{i=-\infty}^\infty \fseries{w}_i\fseries{f}_{n-i}
= 0.04\fseries{f}_{n-2} -0.25\fseries{f}_{n-1} + 0.42\fseries{f}_n - 0.25\fseries{f}_{n+1} + 0.04\fseries{f}_{n+2}
\end{equation}
と書ける.
ここで,$f(t)$は周期$T$の周期関数だから,$n$が$4$の倍数でなければ$\fseries{f}_n=0$となる.そのため,$\fseries{f}_{n-2}\conj{\fseries{f}_{n+2}}$は$0$とは限らないことに注意すると,CheapTrickと同様に
\begin{equation}
\abs{\fseries{g}_n}^2 = \fseries{g}_n\conj{\fseries{g}_n}
= (0.04)^2\pqty{\abs{\fseries{f}_{n-2}}^2+\abs{\fseries{f}_{n+2}}^2} + (0.25)^2\pqty{\abs{\fseries{f}_{n-1}}^2+\abs{\fseries{f}_{n+1}}^2} + (0.42)^2\abs{\fseries{f}_n}^2 + (0.04)^2\underbrace{\pqty{\fseries{f}_{n-2}\conj{\fseries{f}_{n+2}}+\fseries{f}_{n+2}\conj{\fseries{f}_{n-2}}}}_{\text{$R_n$とおく}}
\end{equation}
と計算できる(右辺の末項に注意).したがって,パーセバルの定理から
\begin{align}
\frac{1}{4T}\int_0^{4T}\abs{g(t)}^2\intd{t} &= \sum_{n=-\infty}^\infty\abs{\fseries{g}_n}^2 \\
&= \pqty{2(0.04)^2+2(0.25)^2+(0.42)^2}\cdot\frac{1}{4T}\int_0^{4T}\abs{f(t)}^2\intd{t} + (0.04)^2\sum_{n=-\infty}^\infty R_n\\
&= \frac{0.3046}{4T}\int_0^{4T}\abs{f(t)}^2\intd{t} + (0.04)^2\sum_{n=-\infty}^\infty R_n \tag{1}
\end{align}
となる.
ここで,$\sum_{n=-\infty}^\infty R_n$を評価する.コーシー・シュワルツの不等式,およびパーセバルの定理から
\begin{equation}
\abs{\sum_{n=-\infty}^\infty\fseries{f}_{n-2}\conj{\fseries{f}_{n+2}}} \leq \sqrt{\sum_{n=-\infty}^\infty\abs{\fseries{f}_{n-2}}^2}\sqrt{\sum_{n=-\infty}^\infty\abs{\fseries{f}_{n+2}}^2}
= \sum_{n=-\infty}^\infty\abs{\fseries{f}_n}^2
= \frac{1}{4T}\int_0^{4T}\abs{f(t)}^2\intd{t}
\end{equation}
となる.したがって,三角不等式から
\begin{equation}
\abs{\sum_{n=-\infty}^\infty R_n} \leq \abs{\sum_{n=-\infty}^\infty\fseries{f}_{n-2}\conj{\fseries{f}_{n+2}}} + \abs{\sum_{n=-\infty}^\infty\fseries{f}_{n+2}\conj{\fseries{f}_{n-2}}}
\leq \frac{1}{2T}\int_0^{4T}\abs{f(t)}^2\intd{t}
\end{equation}
と評価できるので,式(1)から
\begin{equation}
\frac{\abs{\int_0^{4T}\abs{g(t)}^2\intd{t} - 0.3046\int_0^{4T}\abs{f(t)}^2\intd{t}}}{\int_0^{4T}\abs{f(t)}^2\intd{t}} = \frac{4T(0.04)^2\abs{\sum_{n=-\infty}^\infty R_n}}{\int_0^{4T}\abs{f(t)}^2\intd{t}} \leq 2(0.04)^2 = 0.0032
\end{equation}
となる.$\int_0^{4T}\abs{f(t)}^2\intd{t}=4\int_0^T\abs{f(t)}^2\intd{t}$だから
\begin{equation}
\frac{\abs{\int_0^{4T}\abs{g(t)}^2\intd{t} - 1.2184\int_0^T\abs{f(t)}^2\intd{t}}}{\int_0^T\abs{f(t)}^2\intd{t}} \leq 0.0128
\end{equation}
である.
以上により,不等式
\begin{equation}
(1.2184-0.0128)\int_0^T\abs{f(t)}^2\intd{t} \leq \int_0^{4T}\abs{g(t)}^2\intd{t} \leq (1.2184+0.0128)\int_0^T\abs{f(t)}^2\intd{t}
\end{equation}
が成立する.したがって($1.2184$と比べて)$\pm 0.0128$の影響が無視できる範囲においては
\begin{equation}
\int_0^{4T}\abs{g(t)}^2\intd{t} \fallingdotseq 1.2184\int_0^T\abs{f(t)}^2\intd{t}
\end{equation}
と近似できる.