rilyのアイコン画像
rily 2026年05月15日作成 (2026年08月22日更新)
セットアップや使用方法 セットアップや使用方法 閲覧数 305
rily 2026年05月15日作成 (2026年08月22日更新) セットアップや使用方法 セットアップや使用方法 閲覧数 305

PWM信号をフーリエ展開してみる

様々な波形を三角関数で近似できるフーリエ変換ですが、周波数成分や直流成分などを可視化することが可能になります。今回はただただPWM信号のフーリエ展開をするだけの記事になります。

いざフーリエ展開

さてフーリエ級数F(θ)は

F(θ)=12α0+∑n=0∞βnsin(2πnθTθ)+αncos(2πnθTθ){F(\theta)=\frac{1}{2}\alpha_0+\sum_{n=0}^\infty \beta_n \sin(\frac{2\pi n\theta}{T_{\theta}})+\alpha_n \cos(\frac{2\pi n\theta}{T_{\theta}})}

そして各フーリエ係数は

α0=2Tθ∫Tθf(θ)dθ{\alpha_0=\frac{2}{T_{\theta}}\int_{T_{\theta}}f(\theta)d\theta}

βn=2Tθ∫Tθf(θ)sin(2πnθTθ)dθ{\beta_n=\frac{2}{T_{\theta}}\int_{T_{\theta}}f(\theta)\sin(\frac{2\pi n\theta}{T_{\theta}})d\theta}

αn=2Tθ∫Tθf(θ)cos(2πnθTθ)dθ{\alpha_n=\frac{2}{T_{\theta}}\int_{T_{\theta}}f(\theta)\cos(\frac{2\pi n\theta}{T_{\theta}})d\theta}

と定義しておきますね。

今回展開する波形がこちら
PWM波形
こんな感じの波形とします。周期Tθ=2πですね。ちなみにデューティ比Dを絡めると、θ'=2πDになります。
ではα0を求めます。

α0=2Tθ∫Tθf(θ)dθ=22π(∫0θ′vdθ+∫θ′2π0dθ)=vθ′π{\alpha_0=\frac{2}{T_{\theta}}\int_{T_{\theta}}f(\theta)d\theta=\frac{2}{2\pi}(\int_0^{\theta'}vd\theta+\int_{\theta'}^{2\pi}0d\theta)=\frac{v\theta'}{\pi}}

積分区間のうち[θ'→2π]の区間は0ですね。なので以降のβnとαnでも飛ばします。
続いてβnを求めます。

βn=2Tθ∫Tθf(θ)sin(2πnθTθ)dθ=22π∫0θ′vsin(2πnθ2π)dθ=−vπn[cos(nθ)]0θ′=vπn(1−cos(nθ′)){\beta_n=\frac{2}{T_{\theta}}\int_{T_{\theta}}f(\theta)\sin(\frac{2\pi n\theta}{T_{\theta}})d\theta=\frac{2}{2\pi}\int_0^{\theta'}v\sin(\frac{2\pi n \theta}{2\pi})d\theta=-\frac{v}{\pi n}[\cos(n\theta)]_0^{\theta'}=\frac{v}{\pi n}(1-\cos(n\theta'))}

βn=vπn(1−cos(nθ′)){\beta_n=\frac{v}{\pi n}(1-\cos(n\theta'))}

次にαnを求めます。

αn=2Tθ∫Tθf(θ)cos(2πnθTθ)dθ=22π∫0θ′vcos(2πnθ2π)dθ=vπn[sin(nθ)]0θ′=vπnsin(nθ′){\alpha_n=\frac{2}{T_{\theta}}\int_{T_{\theta}}f(\theta)\cos(\frac{2\pi n\theta}{T_{\theta}})d\theta=\frac{2}{2\pi}\int_0^{\theta'}v\cos(\frac{2\pi n \theta}{2\pi})d\theta=\frac{v}{\pi n}[\sin(n\theta)]_0^{\theta'}=\frac{v}{\pi n}\sin(n\theta')}

αn=vπnsin(nθ′){\alpha_n=\frac{v}{\pi n}\sin(n\theta')}

次にフーリエ級数の式に当てはめます。

F(θ)=12α0+∑n=0∞βnsin(2πnθTθ)+αncos(2πnθTθ)=vθ′2π+vπ∑n=0∞1n((1−cos(nθ′))sin(2πnθ2π)+sin(nθ′)cos(2πnθ2π)){F(\theta)=\frac{1}{2}\alpha_0+\sum_{n=0}^\infty \beta_n \sin(\frac{2\pi n\theta}{T_{\theta}})+\alpha_n \cos(\frac{2\pi n\theta}{T_{\theta}})=\frac{v\theta'}{2\pi}+\frac{v}{\pi}\sum_{n=0}^\infty \frac{1}{n}((1-\cos(n\theta'))\sin(\frac{2\pi n\theta}{2\pi})+\sin(n\theta')\cos(\frac{2\pi n\theta}{2\pi}))}

F(θ)=v{θ′2π+1π∑n=0∞1n((1−cos(nθ′))sin(2πnθ2π)+sin(nθ′)cos(2πnθ2π))}{F(\theta)=v\{\frac{\theta'}{2\pi}+\frac{1}{\pi}\sum_{n=0}^\infty \frac{1}{n}((1-\cos(n\theta'))\sin(\frac{2\pi n\theta}{2\pi})+\sin(n\theta')\cos(\frac{2\pi n\theta}{2\pi}))\}}

となりました。
また、交流成分を三角形で表すとこうなりますよね。
交流三角形
なので以下の式に変形することができます。

βnsin(θ)+αncos(θ)=∣βn⃗+αn⃗∣sin(θ+ϕ){\beta_n\sin(\theta)+\alpha_n\cos(\theta)=|\vec{\beta_n}+\vec{\alpha_n}|\sin(\theta+\phi)}

ϕ=arctan(αnβn){\phi=\arctan(\frac{\alpha_n}{\beta_n})}

ここで三平方の定理を用いて

∣βn⃗+αn⃗∣=(βn)2+(αn)2=vπn(1−cos(nθ′))2+sin2(nθ′)=vπn2(1−cos(nθ′)){|\vec{\beta_n}+\vec{\alpha_n}|=\sqrt{(\beta_n)^2+(\alpha_n)^2}=\frac{v}{\pi n}\sqrt{(1-\cos(n\theta'))^2+\sin^2(n\theta')}=\frac{v}{\pi n}\sqrt{2(1-\cos(n\theta'))}}

また位相差φは

ϕ=arctan(αnβn)=arctan(sin(nθ′)1−cos(nθ′)){\phi=\arctan(\frac{\alpha_n}{\beta_n})=\arctan(\frac{\sin(n\theta')}{1-\cos(n\theta')})}

う〜ん...三角比が発散したり不定形になる可能性があるので注意ですね。。。
そしてこれを整理して再度フーリエ級数にすると

F(θ)=v{θ′2π+1π∑n=1∞2(1−cos(nθ′))nsin(nθ+ϕ)}{F(\theta)=v\{\frac{\theta'}{2\pi}+\frac{1}{\pi}\sum_{n=1}^\infty \frac{\sqrt{2(1-\cos(n\theta'))}}{n}\sin(n\theta+\phi)\}}

ϕ=arctan(sin(nθ′)1−cos(nθ′)){\phi=\arctan(\frac{\sin(n\theta')}{1-\cos(n\theta')})}

となりました。位相がわかりやすくなりましたね!もう一度言いますが、位相差成分の三角比が無限大に発散したり不定形になることがあるので要注意です。
さてこれを時間空間上のtの関数V(t)にしてあげましょう。

θ=2πfct{\theta=2\pi f_ct}

θ′=2πfcTcD=2πD{\theta'=2\pi f_cT_cD=2\pi D}

つまり

V(t)=v{2πD2π+1π∑n=1∞2(1−cos(2πDn))nsin(2πfcn+ϕ)}=v{D+1π∑n=1∞2(1−cos(2πDn))nsin(2πfcn+ϕ)}{V(t)=v\{\frac{2\pi D}{2\pi}+\frac{1}{\pi}\sum_{n=1}^\infty \frac{\sqrt{2(1-\cos(2\pi Dn))}}{n}\sin(2\pi f_cn+\phi)\}=v\{D+\frac{1}{\pi}\sum_{n=1}^\infty \frac{\sqrt{2(1-\cos(2\pi Dn))}}{n}\sin(2\pi f_cn+\phi)\}}

V(t)=v{D+1π∑n=1∞2(1−cos(2πDn))nsin(2πfcn+ϕ)}{V(t)=v\{D+\frac{1}{\pi}\sum_{n=1}^\infty \frac{\sqrt{2(1-\cos(2\pi Dn))}}{n}\sin(2\pi f_cn+\phi)\}}

ϕ=arctan(sin(2πDn)1−cos(2πDn)){\phi=\arctan(\frac{\sin(2\pi Dn)}{1-\cos(2\pi Dn)})}

位相差Φがわかりやすい形に整理できましたね。再度再度言いますが、位相成分の三角比が無限大に発散したり不定形になることがあるので要注意です。
そしてこのV(t)から第二項目以降を取り除いた直流項V0は

V0(D)=vD{V_0(D)=vD}

のよく見る形になりましたね。つまりフィルターで交流成分をカットオフすれば、元の直流電圧vをデューティ比Dで可変できるというわけですね。

三角比が発散したり不定形になったときの位相差

何度も位相の三角比が発散や不定形になると言いましたね。
例えばnθ'=2πのときは

ϕ=arctan(sin(2π)1−cos(2π))=arctan(00){\phi=\arctan(\frac{\sin(2\pi)}{1-\cos(2\pi)})=\arctan(\frac{0}{0})}

0/0は不定形なので、ロピタルの定理を使って分母分子を微分の上で数式を無理やりしばきます。

ddθsin(θ)ddθ(1−cos(θ))=cos(θ)sin(θ){\frac{\frac{d}{d\theta}\sin(\theta)}{\frac{d}{d\theta}(1-\cos(\theta))}=\frac{\cos(\theta)}{\sin(\theta)}}

つまり

ϕ=arctan(sin(2π)1−cos(2π))→arctan(cos(2π)sin(2π))=arctan(∞)=π2{\phi=\arctan(\frac{\sin(2\pi)}{1-\cos(2\pi)})\to \arctan(\frac{\cos(2\pi)}{\sin(2\pi)})=\arctan(\infty)=\frac{\pi}{2}}

極限を使わず手荒に計算しましたが、arctanの値域は(-2/π)から(2/π)なので無限大に飛ばすとこのような結果になります。

さらに整理(位相がわかりにくくなります)

先程、無限大に発散しちゃう問題がありましたので、、、整理しつつ表記を変えてみますね。

F(θ)=v{θ′2π+1π∑n=1∞1n(sin(nθ)−cos(nθ′)sin(nθ)+sin(nθ′)cos(nθ))}{F(\theta)=v\{\frac{\theta'}{2\pi}+\frac{1}{\pi}\sum_{n=1}^\infty \frac{1}{n}(\sin(n\theta)-\cos(n\theta')\sin(n\theta)+\sin(n\theta')\cos(n\theta))\}}

ここで三角関数の積の公式より

sin(x)cos(y)=12(sin(x+y)+sin(x−y)){\sin(x)\cos(y)=\frac{1}{2}(\sin(x+y)+\sin(x-y))}

またsinは奇関数なのでsin(-x)=-sin(x)が成り立つので

sin(x)cos(y)=12(sin(x+y)+sin(x−y))=12(sin(x+y)−sin(y−x)){\sin(x)\cos(y)=\frac{1}{2}(\sin(x+y)+\sin(x-y))=\frac{1}{2}(\sin(x+y)-\sin(y-x))}

となります。そして

−cos(nθ′)sin(nθ)=−12(sin(n(θ+θ′))+sin(n(θ−θ′))){-\cos(n\theta')\sin(n\theta)=-\frac{1}{2}(\sin(n(\theta+\theta'))+\sin(n(\theta-\theta')))}

sin(nθ′)cos(nθ)=12(sin(n(θ+θ′))−sin(n(θ−θ′))){\sin(n\theta')\cos(n\theta)=\frac{1}{2}(\sin(n(\theta+\theta'))-\sin(n(\theta-\theta')))}

つまり

−cos(nθ′)sin(nθ)+sin(nθ′)cos(nθ)=−sin(n(θ−θ′)){-\cos(n\theta')\sin(n\theta)+\sin(n\theta')\cos(n\theta)=-\sin(n(\theta-\theta'))}

なので

v{θ′2π+1π∑n=1∞1n(sin(nθ)−cos(nθ′)sin(nθ)+sin(nθ′)cos(nθ))}=v{θ′2π+1π∑n=1∞1n(sin(nθ)−sin(n(θ−θ′)))}{v\{\frac{\theta'}{2\pi}+\frac{1}{\pi}\sum_{n=1}^\infty \frac{1}{n}(\sin(n\theta)-\cos(n\theta')\sin(n\theta)+\sin(n\theta')\cos(n\theta))\}=v\{\frac{\theta'}{2\pi}+\frac{1}{\pi}\sum_{n=1}^\infty \frac{1}{n}(\sin(n\theta)-\sin(n(\theta-\theta')))\}}

F(θ)=v{θ′2π+1π∑n=1∞1n(sin(nθ)−sin(n(θ−θ′)))}{F(\theta)=v\{\frac{\theta'}{2\pi}+\frac{1}{\pi}\sum_{n=1}^\infty \frac{1}{n}(\sin(n\theta)-\sin(n(\theta-\theta')))\}}

となりましたとさ、ちゃんちゃん。これじゃ位相が分からないですね。

式の検証

念の為導出したF(θ)が合っているのかwolframalphaで検証しましょう。
といってもそのままの式では使えないので

θ′=π4≃0.785{\theta'=\frac{\pi}{4}\simeq 0.785}

v=1{v=1}

とおいて

18+1π∑n=1401n(sin(nθ)−sin(n(θ−π4))){\frac{1}{8}+\frac{1}{\pi}\sum_{n=1}^{40} \frac{1}{n}(\sin(n\theta)-\sin(n(\theta-\frac{\pi}{4})))}

40次近似で計算してみます。
出力波形
いい感じじゃないですか〜

2
rilyのアイコン画像
elchika、通知が多重で届いたりキャッシュがおかしいような…バグってませんかね?
ログインしてコメントを投稿する