이산 부립엽 변환의 실현
14556 단어 부립엽 변환역이산 부립엽 변환Python이산 부립엽 변환
개시하다
이번에python으로 적당한 합성파를 생성하여 이산부립엽 변환과 역이산부립엽 변환을 진행하였다.
첫 투고라 내용이 보기 싫겠지만 저도 이 자리를 빌려 자료 만드는 연습을 해보고 싶어요.
차리다
이번 도입은 다음과 같이 이용한다.%matplotlib inline
import functools
import matplotlib.pyplot as plt
import cmath
import random
import numpy as np
Sin 웨이브의 생성
먼저 기본적인 Sin Power를 만듭니다.
이번x은 0.1분초의 속도로 0에서 2π로 변화np.sin(x)에 대응하는y의 값을 구한다.
다음의 코드와 실행 결과를 보여 주십시오.# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y1 = np.sin(x)
plt.plot(x, y1)
실행 결과는 이렇다
주파수
주파수(ω), 위상(b), 진폭(a)이 변한 후의 신파는 이런 느낌이다
${\displaystyle y = a×\sin{(ωx + b)}}$
코드로 보는 공식도 그대로 있어 이해하기 쉽다.# 振幅
a = 2
# 位相
b = cmath.pi
# 周波数
o = 2
# sin波
y2 = a * np.sin(o * x + b)
plt.plot(x, y2)
마찬가지로 실행 결과 진폭 2Hz의 주파수에서 위상 편이π를 하기 때문에 OK
합성파의 생성
합성파는 간단하게 조합할 수 있다.이번에는 먼저 만든 y1과 y2의 합성파를 만들었다.y = y1+y2
plt.plot(x, y)
매트릭스 연산도 빠르게 진행되기 때문에 더 복잡한 합성파를 만드는 것을 추천합니다.
아래의 파형은 y1+y2와 같다.(본질이 아니면 건너뛰어도 된다)X = x.reshape(1, -1)
O = np.array([1, 2]).reshape(-1, 1)
B = np.array([0, cmath.pi]).reshape(-1, 1)
A = np.array([1, 2]).reshape(-1, 1)
y = np.sum(A * np.sin(O * X + B), axis=0)
plt.plot(x, y)
같은 실행 결과(완전히 합성파로 변함)
DFT 설치
비키리산 부립엽 변환
https://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
아무튼 그런 공식입니다.
${\displaystyle F(t)=\sum_{x=0}^{N-1} f(x) e^{-i\frac{2\pi t x}{N}}\quad\quad }$
포문을 간단하게 쓰면 이런 느낌이에요.def dft_(f):
n = len(f)
Y = []
for x in range(n):
y = 0j
for t in range(n):
a = 2 * cmath.pi * t * x / n
y += f[t] * cmath.e**(-1j * a)
Y.append(y)
return Y
그런데 포문을 쓰는 게 촌스러워서 이런 느낌으로 쓰면 잘 나오나요?def dft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(-1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1)
변환, 변환 후 실부와 허부로 나누어 각각 가시화.fy = dft(y)
plt.plot(fy.real)
plt.plot(fy.imag)
실행 결과는 이렇다
역이산 부립엽 변환
같은wiki의 역이산 부립엽 변환
${\displaystyle f(x)={\frac {1}{N}}\sum _{{t=0}}^{{N-1}}F(t)e^{{i{\frac {2\pi xt}{N}}}}\quad\quad}$
부립엽과 변환이 많지 않습니다. ${-i}는 ${i}로 바뀌었고, 마지막에는 ${N} 달러만 나누었습니다.
그러니까 다음 코드.def idft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1) / n
실행 결과
덤
numby는 빠른 부립엽 변환과 반변환이 있습니다.
이번에 만든 dft 변환 결과 numby의 ifft가 먹었다.
똑바로 움직여라.ω・)byd = np.fft.ifft(fy)
plt.plot(yd.real)
총결산
적당한 합성파를 만들어 이산 부립엽 변환과 역변환을 실현하다.
이산 부립엽의 변환이 생각보다 간단하다는 것을 발견했다.
최후
첫 투고 실험도 겸하고 있으니 내용이 너무 과한 건 용서해 주세요...(´/ω・‘)
Reference
이 문제에 관하여(이산 부립엽 변환의 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/9650ff14af54dd147a39
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번 도입은 다음과 같이 이용한다.
%matplotlib inline
import functools
import matplotlib.pyplot as plt
import cmath
import random
import numpy as np
Sin 웨이브의 생성
먼저 기본적인 Sin Power를 만듭니다.
이번x은 0.1분초의 속도로 0에서 2π로 변화np.sin(x)에 대응하는y의 값을 구한다.
다음의 코드와 실행 결과를 보여 주십시오.# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y1 = np.sin(x)
plt.plot(x, y1)
실행 결과는 이렇다
주파수
주파수(ω), 위상(b), 진폭(a)이 변한 후의 신파는 이런 느낌이다
${\displaystyle y = a×\sin{(ωx + b)}}$
코드로 보는 공식도 그대로 있어 이해하기 쉽다.# 振幅
a = 2
# 位相
b = cmath.pi
# 周波数
o = 2
# sin波
y2 = a * np.sin(o * x + b)
plt.plot(x, y2)
마찬가지로 실행 결과 진폭 2Hz의 주파수에서 위상 편이π를 하기 때문에 OK
합성파의 생성
합성파는 간단하게 조합할 수 있다.이번에는 먼저 만든 y1과 y2의 합성파를 만들었다.y = y1+y2
plt.plot(x, y)
매트릭스 연산도 빠르게 진행되기 때문에 더 복잡한 합성파를 만드는 것을 추천합니다.
아래의 파형은 y1+y2와 같다.(본질이 아니면 건너뛰어도 된다)X = x.reshape(1, -1)
O = np.array([1, 2]).reshape(-1, 1)
B = np.array([0, cmath.pi]).reshape(-1, 1)
A = np.array([1, 2]).reshape(-1, 1)
y = np.sum(A * np.sin(O * X + B), axis=0)
plt.plot(x, y)
같은 실행 결과(완전히 합성파로 변함)
DFT 설치
비키리산 부립엽 변환
https://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
아무튼 그런 공식입니다.
${\displaystyle F(t)=\sum_{x=0}^{N-1} f(x) e^{-i\frac{2\pi t x}{N}}\quad\quad }$
포문을 간단하게 쓰면 이런 느낌이에요.def dft_(f):
n = len(f)
Y = []
for x in range(n):
y = 0j
for t in range(n):
a = 2 * cmath.pi * t * x / n
y += f[t] * cmath.e**(-1j * a)
Y.append(y)
return Y
그런데 포문을 쓰는 게 촌스러워서 이런 느낌으로 쓰면 잘 나오나요?def dft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(-1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1)
변환, 변환 후 실부와 허부로 나누어 각각 가시화.fy = dft(y)
plt.plot(fy.real)
plt.plot(fy.imag)
실행 결과는 이렇다
역이산 부립엽 변환
같은wiki의 역이산 부립엽 변환
${\displaystyle f(x)={\frac {1}{N}}\sum _{{t=0}}^{{N-1}}F(t)e^{{i{\frac {2\pi xt}{N}}}}\quad\quad}$
부립엽과 변환이 많지 않습니다. ${-i}는 ${i}로 바뀌었고, 마지막에는 ${N} 달러만 나누었습니다.
그러니까 다음 코드.def idft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1) / n
실행 결과
덤
numby는 빠른 부립엽 변환과 반변환이 있습니다.
이번에 만든 dft 변환 결과 numby의 ifft가 먹었다.
똑바로 움직여라.ω・)byd = np.fft.ifft(fy)
plt.plot(yd.real)
총결산
적당한 합성파를 만들어 이산 부립엽 변환과 역변환을 실현하다.
이산 부립엽의 변환이 생각보다 간단하다는 것을 발견했다.
최후
첫 투고 실험도 겸하고 있으니 내용이 너무 과한 건 용서해 주세요...(´/ω・‘)
Reference
이 문제에 관하여(이산 부립엽 변환의 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/9650ff14af54dd147a39
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# ステップ
s = 0.1
# 横軸(0~2πまで)
x = np.arange(0, 2 * cmath.pi, s)
y1 = np.sin(x)
plt.plot(x, y1)
주파수(ω), 위상(b), 진폭(a)이 변한 후의 신파는 이런 느낌이다
${\displaystyle y = a×\sin{(ωx + b)}}$
코드로 보는 공식도 그대로 있어 이해하기 쉽다.
# 振幅
a = 2
# 位相
b = cmath.pi
# 周波数
o = 2
# sin波
y2 = a * np.sin(o * x + b)
plt.plot(x, y2)
마찬가지로 실행 결과 진폭 2Hz의 주파수에서 위상 편이π를 하기 때문에 OK
합성파의 생성
합성파는 간단하게 조합할 수 있다.이번에는 먼저 만든 y1과 y2의 합성파를 만들었다.y = y1+y2
plt.plot(x, y)
매트릭스 연산도 빠르게 진행되기 때문에 더 복잡한 합성파를 만드는 것을 추천합니다.
아래의 파형은 y1+y2와 같다.(본질이 아니면 건너뛰어도 된다)X = x.reshape(1, -1)
O = np.array([1, 2]).reshape(-1, 1)
B = np.array([0, cmath.pi]).reshape(-1, 1)
A = np.array([1, 2]).reshape(-1, 1)
y = np.sum(A * np.sin(O * X + B), axis=0)
plt.plot(x, y)
같은 실행 결과(완전히 합성파로 변함)
DFT 설치
비키리산 부립엽 변환
https://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
아무튼 그런 공식입니다.
${\displaystyle F(t)=\sum_{x=0}^{N-1} f(x) e^{-i\frac{2\pi t x}{N}}\quad\quad }$
포문을 간단하게 쓰면 이런 느낌이에요.def dft_(f):
n = len(f)
Y = []
for x in range(n):
y = 0j
for t in range(n):
a = 2 * cmath.pi * t * x / n
y += f[t] * cmath.e**(-1j * a)
Y.append(y)
return Y
그런데 포문을 쓰는 게 촌스러워서 이런 느낌으로 쓰면 잘 나오나요?def dft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(-1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1)
변환, 변환 후 실부와 허부로 나누어 각각 가시화.fy = dft(y)
plt.plot(fy.real)
plt.plot(fy.imag)
실행 결과는 이렇다
역이산 부립엽 변환
같은wiki의 역이산 부립엽 변환
${\displaystyle f(x)={\frac {1}{N}}\sum _{{t=0}}^{{N-1}}F(t)e^{{i{\frac {2\pi xt}{N}}}}\quad\quad}$
부립엽과 변환이 많지 않습니다. ${-i}는 ${i}로 바뀌었고, 마지막에는 ${N} 달러만 나누었습니다.
그러니까 다음 코드.def idft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1) / n
실행 결과
덤
numby는 빠른 부립엽 변환과 반변환이 있습니다.
이번에 만든 dft 변환 결과 numby의 ifft가 먹었다.
똑바로 움직여라.ω・)byd = np.fft.ifft(fy)
plt.plot(yd.real)
총결산
적당한 합성파를 만들어 이산 부립엽 변환과 역변환을 실현하다.
이산 부립엽의 변환이 생각보다 간단하다는 것을 발견했다.
최후
첫 투고 실험도 겸하고 있으니 내용이 너무 과한 건 용서해 주세요...(´/ω・‘)
Reference
이 문제에 관하여(이산 부립엽 변환의 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/9650ff14af54dd147a39
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
y = y1+y2
plt.plot(x, y)
X = x.reshape(1, -1)
O = np.array([1, 2]).reshape(-1, 1)
B = np.array([0, cmath.pi]).reshape(-1, 1)
A = np.array([1, 2]).reshape(-1, 1)
y = np.sum(A * np.sin(O * X + B), axis=0)
plt.plot(x, y)
비키리산 부립엽 변환
https://ja.wikipedia.org/wiki/%E9%9B%A2%E6%95%A3%E3%83%95%E3%83%BC%E3%83%AA%E3%82%A8%E5%A4%89%E6%8F%9B
아무튼 그런 공식입니다.
${\displaystyle F(t)=\sum_{x=0}^{N-1} f(x) e^{-i\frac{2\pi t x}{N}}\quad\quad }$
포문을 간단하게 쓰면 이런 느낌이에요.
def dft_(f):
n = len(f)
Y = []
for x in range(n):
y = 0j
for t in range(n):
a = 2 * cmath.pi * t * x / n
y += f[t] * cmath.e**(-1j * a)
Y.append(y)
return Y
그런데 포문을 쓰는 게 촌스러워서 이런 느낌으로 쓰면 잘 나오나요?def dft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(-1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1)
변환, 변환 후 실부와 허부로 나누어 각각 가시화.fy = dft(y)
plt.plot(fy.real)
plt.plot(fy.imag)
실행 결과는 이렇다
역이산 부립엽 변환
같은wiki의 역이산 부립엽 변환
${\displaystyle f(x)={\frac {1}{N}}\sum _{{t=0}}^{{N-1}}F(t)e^{{i{\frac {2\pi xt}{N}}}}\quad\quad}$
부립엽과 변환이 많지 않습니다. ${-i}는 ${i}로 바뀌었고, 마지막에는 ${N} 달러만 나누었습니다.
그러니까 다음 코드.def idft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1) / n
실행 결과
덤
numby는 빠른 부립엽 변환과 반변환이 있습니다.
이번에 만든 dft 변환 결과 numby의 ifft가 먹었다.
똑바로 움직여라.ω・)byd = np.fft.ifft(fy)
plt.plot(yd.real)
총결산
적당한 합성파를 만들어 이산 부립엽 변환과 역변환을 실현하다.
이산 부립엽의 변환이 생각보다 간단하다는 것을 발견했다.
최후
첫 투고 실험도 겸하고 있으니 내용이 너무 과한 건 용서해 주세요...(´/ω・‘)
Reference
이 문제에 관하여(이산 부립엽 변환의 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/9650ff14af54dd147a39
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
def idft(f):
n = len(f)
A = np.arange(n)
M = cmath.e**(1j * A.reshape(1, -1) * A.reshape(-1, 1) * 2 * cmath.pi / n)
return np.sum(f * M, axis=1) / n
numby는 빠른 부립엽 변환과 반변환이 있습니다.
이번에 만든 dft 변환 결과 numby의 ifft가 먹었다.
똑바로 움직여라.ω・)b
yd = np.fft.ifft(fy)
plt.plot(yd.real)
총결산
적당한 합성파를 만들어 이산 부립엽 변환과 역변환을 실현하다.
이산 부립엽의 변환이 생각보다 간단하다는 것을 발견했다.
최후
첫 투고 실험도 겸하고 있으니 내용이 너무 과한 건 용서해 주세요...(´/ω・‘)
Reference
이 문제에 관하여(이산 부립엽 변환의 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sai-sui/items/9650ff14af54dd147a39
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
첫 투고 실험도 겸하고 있으니 내용이 너무 과한 건 용서해 주세요...(´/ω・‘)
Reference
이 문제에 관하여(이산 부립엽 변환의 실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sai-sui/items/9650ff14af54dd147a39텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)