이산 부립엽 변환의 실현
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.)