Pythhon: 이산 부립엽 변환(설치 코드 및 테스트)
이산 부립엽 변환
참조²wiki
이산 부립엽 변환 방정식
${\displaystyle F(t)=\sum_{x=0}^{N-1} f(x) e^{-i\frac{2\pi t x}{N}}\quad\quad }$
역이산 부립엽 변환 방정식
${f(x)={\displaystyle\frac {1}{N}}\sum _{{t=0}}^{{N-1}}F(t)e^{{i{\frac {2\pi xt}{N}}}}\quad\quad}$
설치된 dft 코드
dft.pyimport cmath
import numpy as np
def dft(f):
N = len(f)
A = np.arange(N)
T = A.reshape(1, -1)
X = A.reshape(-1, 1)
# 行列演算形式になっているがwikiの数式そのまま
M = f * cmath.e**(-1j * 2 * cmath.pi * T * X / N)
return np.sum(M, axis=1)
def idft(f):
N = len(f)
A = np.arange(N)
X = A.reshape(1, -1)
T = A.reshape(-1, 1)
# 同上
M = f * cmath.e**(1j * 2 * cmath.pi * X * T / N)
return np.sum(M, axis=1) / N
def dft_matrix(f):
N = len(f)
A = np.arange(N)
T = A.reshape(1, -1)
X = A.reshape(-1, 1)
return cmath.e**(-1j * 2 * cmath.pi * T * X / N)
테스트
실장 코드를 기준으로 테스트를 진행하다.%matplotlib inline
import dft
import numpy as np
import cmath
import matplotlib.pyplot as plt
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y = np.sin(x) + 2 * np.sin(2 * x + cmath.pi)
fy = dft.dft(y)
yd = dft.idft(fy)
print('元波形')
plt.plot(x, y)
plt.show()
print('変換後:実部')
plt.plot(fy.real)
plt.show()
print('変換後:虚部')
plt.plot(fy.imag)
plt.show()
print('逆変換後')
plt.plot(yd.real)
plt.show()
변환과 역변환을 확인합니다.
추기
x, t의 적 부분은 NxN 모드가 있어 다음 행렬 연산에서 단숨에 진행할 수 있다.A = np.arange(4)
A.reshape(1, -1) * A.reshape(-1, 1)
실행 결과array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
추기
자세히 보니 공간 시스템을 매트릭스로 자주 바꾸는 것 같아서 해봤어요.
역변환 행렬의 제작 방법은 매우 이상하기 때문에 마지막에 N으로 나누는 부분은 조정이 필요하다.
A:가능하면앞으로는"변환행렬의이산부립엽변환"같은글을 쓰려고합니다.(ノ・ω・)승낙%matplotlib inline
import dft
import numpy as np
import cmath
import matplotlib.pyplot as plt
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y = np.sin(x) + 2 * np.sin(2 * x + cmath.pi)
# 変換行列
M = dft_matrix(y)
# 波形 ⇒ M ⇒ 周波数表現
fy = np.dot(M, y)
# 周波数表現 ⇒ -M ⇒ 波形
yd = np.dot(-M, fy) / len(fy)
print('元波形')
plt.plot(x, y)
plt.show()
print('変換後:実部')
plt.plot(fy.real)
plt.show()
print('変換後:虚部')
plt.plot(fy.imag)
plt.show()
print('逆変換後')
plt.plot(yd.real)
plt.show()
Reference
이 문제에 관하여(Pythhon: 이산 부립엽 변환(설치 코드 및 테스트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/814117940c1d1b2b1785
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
dft.py
import cmath
import numpy as np
def dft(f):
N = len(f)
A = np.arange(N)
T = A.reshape(1, -1)
X = A.reshape(-1, 1)
# 行列演算形式になっているがwikiの数式そのまま
M = f * cmath.e**(-1j * 2 * cmath.pi * T * X / N)
return np.sum(M, axis=1)
def idft(f):
N = len(f)
A = np.arange(N)
X = A.reshape(1, -1)
T = A.reshape(-1, 1)
# 同上
M = f * cmath.e**(1j * 2 * cmath.pi * X * T / N)
return np.sum(M, axis=1) / N
def dft_matrix(f):
N = len(f)
A = np.arange(N)
T = A.reshape(1, -1)
X = A.reshape(-1, 1)
return cmath.e**(-1j * 2 * cmath.pi * T * X / N)
테스트
실장 코드를 기준으로 테스트를 진행하다.%matplotlib inline
import dft
import numpy as np
import cmath
import matplotlib.pyplot as plt
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y = np.sin(x) + 2 * np.sin(2 * x + cmath.pi)
fy = dft.dft(y)
yd = dft.idft(fy)
print('元波形')
plt.plot(x, y)
plt.show()
print('変換後:実部')
plt.plot(fy.real)
plt.show()
print('変換後:虚部')
plt.plot(fy.imag)
plt.show()
print('逆変換後')
plt.plot(yd.real)
plt.show()
변환과 역변환을 확인합니다.
추기
x, t의 적 부분은 NxN 모드가 있어 다음 행렬 연산에서 단숨에 진행할 수 있다.A = np.arange(4)
A.reshape(1, -1) * A.reshape(-1, 1)
실행 결과array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
추기
자세히 보니 공간 시스템을 매트릭스로 자주 바꾸는 것 같아서 해봤어요.
역변환 행렬의 제작 방법은 매우 이상하기 때문에 마지막에 N으로 나누는 부분은 조정이 필요하다.
A:가능하면앞으로는"변환행렬의이산부립엽변환"같은글을 쓰려고합니다.(ノ・ω・)승낙%matplotlib inline
import dft
import numpy as np
import cmath
import matplotlib.pyplot as plt
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y = np.sin(x) + 2 * np.sin(2 * x + cmath.pi)
# 変換行列
M = dft_matrix(y)
# 波形 ⇒ M ⇒ 周波数表現
fy = np.dot(M, y)
# 周波数表現 ⇒ -M ⇒ 波形
yd = np.dot(-M, fy) / len(fy)
print('元波形')
plt.plot(x, y)
plt.show()
print('変換後:実部')
plt.plot(fy.real)
plt.show()
print('変換後:虚部')
plt.plot(fy.imag)
plt.show()
print('逆変換後')
plt.plot(yd.real)
plt.show()
Reference
이 문제에 관하여(Pythhon: 이산 부립엽 변환(설치 코드 및 테스트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/814117940c1d1b2b1785
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
%matplotlib inline
import dft
import numpy as np
import cmath
import matplotlib.pyplot as plt
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y = np.sin(x) + 2 * np.sin(2 * x + cmath.pi)
fy = dft.dft(y)
yd = dft.idft(fy)
print('元波形')
plt.plot(x, y)
plt.show()
print('変換後:実部')
plt.plot(fy.real)
plt.show()
print('変換後:虚部')
plt.plot(fy.imag)
plt.show()
print('逆変換後')
plt.plot(yd.real)
plt.show()
x, t의 적 부분은 NxN 모드가 있어 다음 행렬 연산에서 단숨에 진행할 수 있다.
A = np.arange(4)
A.reshape(1, -1) * A.reshape(-1, 1)
실행 결과array([[0, 0, 0, 0],
[0, 1, 2, 3],
[0, 2, 4, 6],
[0, 3, 6, 9]])
추기
자세히 보니 공간 시스템을 매트릭스로 자주 바꾸는 것 같아서 해봤어요.
역변환 행렬의 제작 방법은 매우 이상하기 때문에 마지막에 N으로 나누는 부분은 조정이 필요하다.
A:가능하면앞으로는"변환행렬의이산부립엽변환"같은글을 쓰려고합니다.(ノ・ω・)승낙%matplotlib inline
import dft
import numpy as np
import cmath
import matplotlib.pyplot as plt
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y = np.sin(x) + 2 * np.sin(2 * x + cmath.pi)
# 変換行列
M = dft_matrix(y)
# 波形 ⇒ M ⇒ 周波数表現
fy = np.dot(M, y)
# 周波数表現 ⇒ -M ⇒ 波形
yd = np.dot(-M, fy) / len(fy)
print('元波形')
plt.plot(x, y)
plt.show()
print('変換後:実部')
plt.plot(fy.real)
plt.show()
print('変換後:虚部')
plt.plot(fy.imag)
plt.show()
print('逆変換後')
plt.plot(yd.real)
plt.show()
Reference
이 문제에 관하여(Pythhon: 이산 부립엽 변환(설치 코드 및 테스트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/814117940c1d1b2b1785
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
%matplotlib inline
import dft
import numpy as np
import cmath
import matplotlib.pyplot as plt
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y = np.sin(x) + 2 * np.sin(2 * x + cmath.pi)
# 変換行列
M = dft_matrix(y)
# 波形 ⇒ M ⇒ 周波数表現
fy = np.dot(M, y)
# 周波数表現 ⇒ -M ⇒ 波形
yd = np.dot(-M, fy) / len(fy)
print('元波形')
plt.plot(x, y)
plt.show()
print('変換後:実部')
plt.plot(fy.real)
plt.show()
print('変換後:虚部')
plt.plot(fy.imag)
plt.show()
print('逆変換後')
plt.plot(yd.real)
plt.show()
Reference
이 문제에 관하여(Pythhon: 이산 부립엽 변환(설치 코드 및 테스트)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sai-sui/items/814117940c1d1b2b1785텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)