3相全波整流回路と高調波について

# はじめに
ダイオードやサイリスタを用いた他励式の3相全波整流回路やインバータ(6パルス式)では、直流側で6n次の高調波が生成され、交流側では6n±1次の高調波が生成されると言われている。そこで、今回は、ダイオードを用いた整流回路において、交流側と直流側で発生しうる波形をフーリエ変換することにより、含まれる高調波について分析することを目的とする。

# 交流側
## 波形

交流側の波形は6パルスなので以下のようになると考えられる。

(理由としては、直流電流波形は直流リアクトルでほぼ一定に平滑化されているため、必然的にそれの元となる交流電流は、以下のようにパルス波となる)

``` python 3zen_AC.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math

n=100
t_max=1
#t=np.linspace(0,t_max,n)

X=[]
t=[]
f=1
T=1/f
m=int(t_max/T)
for i in range(m):
  # T_1=t[i]%T
  # print(T_1)
  T_2= i*T
  for k in range(6):
    T_1= k*T/6
    if k==0:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(1/2)
    elif k==1:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(2/2)
    elif k==2:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(1/2)
    elif k==3:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(-1/2)
    elif k==4:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(-2/2)
    else :
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(-1/2)

#交流側の波形
plt.plot(t,X)
plt.savefig("3相全波整流_交流側.png")
plt.show()
```
このプログラムを実行すると以下のような6パルスの波形が出力される。

![3相全波整流_交流側.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/e7c28094-e10d-62ab-a2ad-c7994fced3da.png)


## フーリエ変換を用いた高調波の次数分析
交流側のパルス波形をフーリエ変換するプログラムを作成する。
``` python 3zen_AC_FFT.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math

n=100
t_max=1
#t=np.linspace(0,t_max,n)

X=[]
t=[]
f=1
T=1/f
m=int(t_max/T)
for i in range(m):
  # T_1=t[i]%T
  # print(T_1)
  T_2= i*T
  for k in range(6):
    T_1= k*T/6
    if k==0:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(1/2)
    elif k==1:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(2/2)
    elif k==2:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(1/2)
    elif k==3:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(-1/2)
    elif k==4:
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(-2/2)
    else :
      for p in range(n):
        t.append(T_1+T_2+(p/n)*T/6)
        X.append(-1/2)

#交流側の波形
## plt.plot(t,X)
## plt.savefig("3相全波整流_交流側.png")
## plt.show()

N=len(t)

F = np.fft.fft(X)                       # フーリエ変換
freq = np.fft.fftfreq(N,d=t_max/len(t)) # 周波数スケール

# フーリエ変換の結果を正規化
F = F / (N / 2)

# 振幅スペクトル
Amp = np.abs(F)


plt.plot(freq[1:20], Amp[1:20]) # A-f グラフのプロット
plt.savefig("3相全波整流_交流側_フーリエ解析.png")
plt.show()
``` 
![3相全波整流_交流側_フーリエ解析.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/f3dbbb0c-9e3e-f02d-fff2-be6a8e438bed.png)

このグラフより、交流側のパルス波形には第5高調波と第7高調波が含まれているということが分かる。

# 直流側
## 波形
整流後の直流波形を描写するプログラムは以下のようになる。

``` python 3zen_DC.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math 

n=1000

out = np.zeros((n))

A=(2)**0.5*1.0
f=50
omega = 2*math.pi*f
t= np.linspace(0,2*1/f,n)
#三相単相電圧
sin_a=A*np.sin(omega*t)
sin_b=A*np.sin(omega*t-2*math.pi/3)
sin_c=A*np.sin(omega*t-4*math.pi/3)
#ダイオードの役割
for i in range(n):
  out[i]=max(sin_a[i] ,sin_b[i] ,sin_c[i] )-min(sin_a[i] ,sin_b[i] ,sin_c[i] )

plt.plot(omega*t,sin_a)
plt.plot(omega*t,sin_b)
plt.plot(omega*t,sin_c)
plt.plot(omega*t,out)
plt.xlabel("ωt")
plt.ylabel("電圧")

plt.savefig("全波整流回路.png")
plt.show()
```
これを実行すると以下のようなグラフが出力される。

ただし、赤線が整流後の直流波形である。

![全波整流回路.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/125f145d-97e6-0840-0460-869d3e3df75a.png)

## フーリエ変換を用いた高調波の次数分析

次に、整流後の直流波形をフーリエ変換するプログラムを作成する。

``` python 3zen_DC_fft.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math 

n=1000
N=1024
out = np.zeros((n))

A=(2)**0.5*1.0
f=50
omega = 2*math.pi*f
t= np.linspace(0,2*1/f,n)
#三相単相電圧
sin_a=A*np.sin(omega*t)
sin_b=A*np.sin(omega*t-2*math.pi/3)
sin_c=A*np.sin(omega*t-4*math.pi/3)
#ダイオードの役割
for i in range(n):
  out[i]=max(sin_a[i] ,sin_b[i] ,sin_c[i] )-min(sin_a[i] ,sin_b[i] ,sin_c[i] )


# 全波整流波形の図示（フーリエ変換を行う上では不要なのでコメントアウトしている）

# plt.plot(omega*t,sin_a)
# plt.plot(omega*t,sin_b)
# plt.plot(omega*t,sin_c)
# plt.plot(omega*t,out)
# plt.xlabel("ωt")
# plt.ylabel("電圧")

# plt.savefig("全波整流回路.png")
# plt.show()

#以下、発生しうる高調波の影響について調査するためにフーリエ変換を行う。

F = np.fft.fft(out)                       # フーリエ変換
freq = np.fft.fftfreq(N, d=2*1/(f*n)) # 周波数スケール

# フーリエ変換の結果を正規化
F = F / (N / 2)

# 振幅スペクトル
Amp = np.abs(F)

### 全波整流のスペクトル ###
plt.plot(freq[1:int(N/2)], Amp[1:int(N/2)]) # A-f グラフのプロット

#上のNはフーリエ変換のサンプリング数だが下のNはただの自然数であることに注意！！

# 直流側では6N次の高調波が発生するはず 黒点が6N次の目印とする

N= np.arange(1,10,1)

plt.scatter(f*(6*N),0*N,color="black",label="6N次")

plt.legend()
plt.xscale("log") # 横軸を対数軸にセット
plt.xlabel("周波数/Hz")
plt.ylabel("振幅スペクトル")
plt.savefig("全波整流回路_フーリエ解析による高調波次数の解析_直流側.png")
plt.show()
``` 

![全波整流回路_フーリエ解析による高調波次数の解析_直流側.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/ee5ca927-612b-8516-8e1b-ef68f4fbe759.png)

# まとめ

今回は、他励式3相全波整流回路（6パルス整流回路）において交流側と直流側で発生する高調波の次数について調査した。その結果交流側では、6n±1次の高調波が発生していた。一方で直流側では、6n次の高調波が発生した。したがって、他励式の整流器やインバータを用いるときは、直流側と交流側に適切な次数の高調波除去フィルターを用いることが望ましいと考えられる。