in,cos/가산정리에 기초한 방법 & IIR 필터의 방법/Python/의미가 없을 때
15123 단어 산술
sin(0 Δθ), sin(1 Δθ), sin(2 Δθ), sin(3 Δθ), ...... 이렇게 순서대로sin을 요구합니다.동시에 코스도 요구한다.
자원이 부족한 마이크로컴퓨터가 양상진동기 등을 구성할 때 사용하는 방법으로, PC로 계산할 의미가 없다.절차의 확인일 뿐입니다.
덧셈의 정리에 근거한 방법
계산 순서는 다음과 같다.
sin(0)
,cos(0)
,sin(Δθ)
,cos(Δθ)
,sin(0 Δθ)
이 네 개만 합쳐서 무엇으로 미리 계산합니까?cos
는 이미 계산이 끝났다.sin(1 Δθ)
도 마찬가지다.cos
도 계산했다.sin(2 Δθ)
도 마찬가지다.sin(Δθ + Δθ)
는sin(Δθ) cos(Δθ) + cos (Δθ) sin(Δθ)
이기 때문에 가법정리를 통해 표시할 수 있다cos
.각 요소는 모두 계산해 보았고 곱셈과 덧셈만 계산했다.sin(3 Δθ)
도 마찬가지다.sin(2 Δθ + Δθ)
는sin(2 Δθ) cos(Δθ) + cos (2 Δθ) sin(Δθ)
이기 때문에 가법정리를 통해 표시할 수 있다cos
.각 요소는 모두 계산해 보았고 곱셈과 덧셈만 계산했다.sin
도 마찬가지다.이하 마찬가지로 곱셈, 덧셈cos
만 순서대로 구한다sqrt(sin^2 + cos^2)
.1
으로 나누어 진폭sin
을 강제로 사용한다.즉 cos
에 1/(sqrt(sin^2 + cos^2))
를 곱해 얻은 것1/sqrt(x)
을 곱한 것이다.그러나
1
의 계산 자체는 시간이 필요하다.그러나 진폭이탈1/sqrt(x)
해도 큰 편차가 없을 것으로 보인다.따라서 x=1
를 중심으로 테일러가 전개1.5 - 0.5 * x
해 (見る/隠す) ソースコード (.py) と実行結果
부터 2항까지 진폭을 교정한다.a = 2 cos(Δθ)
import math
import matplotlib.pyplot as plt
def SinCos(Δθ):
Δθ = Δθ
sin0 = math.sin(0)
cos0 = math.cos(0)
sinΔθ = math.sin(Δθ)
cosΔθ = math.cos(Δθ)
sin = [None, sin0]
cos = [None, cos0]
def sincos():
sin[0] = sin[1]
cos[0] = cos[1]
sin[1] = sin[0] * cosΔθ + cos[0] * sinΔθ
cos[1] = cos[0] * cosΔθ - sin[0] * sinΔθ
adj = 1.5 - 0.5 * (sin[0]**2 + cos[0]**2)
return sin[0] * adj, cos[0] * adj
return sincos
########
# test #
########
Δθ = math.pi/8
sin_cos = SinCos(Δθ) # 初期値をセットした状態でクロージャを開いて、
θList = []
sinList = []
cosList = []
for i in range(50):
sin, cos = sin_cos() # 外に出した函数を実行し続ける。実行するたびに sin、cos の値が更新される。
θList.append(i * Δθ)
sinList.append(sin)
cosList.append(cos)
#print("θ: %.2f, sin: %.6f, cos: %.6f, amp: %.16f" % (i*Δθ, sin, cos, math.sqrt(sin**2 + cos**2)))
plt.plot(θList,sinList,
θList,cosList)
plt.xlabel("radian")
plt.ylabel("amplitude")
plt.grid(color="lightblue")
plt.show()
실행 결과:IIR 필터를 사용하는 방법
다만 기사에 소개된 계산 공식을 파이톤으로 재현했다.무슨 말인지 전혀 모르겠지만 아주 간단합니다.덧셈의 정리에 따른 방법과 달리 진폭은 1에서 벗어나지 않는다고 한다.
계산 순서는 다음과 같다.
c = -cos(Δθ)
,s = sin(Δθ)
,u[n] = a * u[n-1] - u[n-2]
이 세 개만 합쳐서 어떤 함수로 미리 계산해야 하는지.고려
n
의 점화식.0, 1, 2, ......
네u[0] = 0
.초기값은 u[1] = 1
및 sin
입니다.cos
와 u[n]
는 각각 sin(n Δθ) = s * u[n]
를 통해 이 점화식cos(n Δθ) = u[n+1] + c * u[n]
에서 얻었다.n
네0, 1, 2, ......
.(見る/隠す) ソースコード (.py) と実行結果
import math
import matplotlib.pyplot as plt
def SinCos(Δθ):
A = 2 * math.cos(Δθ)
C = -math.cos(Δθ)
S = math.sin(Δθ)
u = [0, 1]
def sincos():
sin = S * u[0]
cos = u[1] + C * u[0]
u[0], u[1] = u[1], A * u[1] - u[0]
return sin, cos
return sincos
########
# test #
########
Δθ = math.pi/8
sin_cos = SinCos(Δθ) # 初期値をセットした状態でクロージャを開いて、
θList = []
sinList = []
cosList = []
for i in range(50):
sin, cos = sin_cos() # 外に出した函数を実行し続ける。実行するたびに sin、cos の値が更新される。
θList.append(i * Δθ)
sinList.append(sin)
cosList.append(cos)
#print("θ: %.2f, sin: %.6f, cos: %.6f, amp: %.16f" % (i*Δθ, sin, cos, math.sqrt(sin**2 + cos**2)))
plt.plot(θList,sinList,
θList,cosList)
plt.xlabel("radian")
plt.ylabel("amplitude")
plt.grid(color="lightblue")
plt.show()
실행 결과:관련: http://ti-nspire.hatenablog.com/archive/category/sin%E3%80%81cos%20%E3%81%AE%E5%86%8D%E5%B8%B0%E7%9A%84%E8%A8%88%E7%AE%97%E6%B3%95
Reference
이 문제에 관하여(in,cos/가산정리에 기초한 방법 & IIR 필터의 방법/Python/의미가 없을 때), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cyq04000/items/b4052770d0f54f4ebf1c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)