Python FFT 합성 파형 의 인 스 턴 스

Python numpy 모듈 에 있 는 FFT 함 수 를 사용 하여 직사각형 파 와 방 파 를 합성 하여 분 산 된 푸 리 엽 변환 에 대한 이 해 를 증가 합 니 다.
가 져 오기 모듈

import numpy as np
import matplotlib.pyplot as plt
각각 주기 적 인 방 파 와 삼각 파 프로그램 이 생 긴 다.

#   size       ,    1
def triangle_wave(size):
  x = np.arange(0, 1, 1.0/size)
  y = np.where(x<0.5, x, 0)
  y = np.where(x>=0.5, 1-x, y)
  return x, y
 
def square_wave(size):
  x = np.arange(0, 1, 1.0/size)
  y = np.where(x<0.5, 1.0, 0)
  return x, y
그 중에서 np.where 함수 의 두 번 째 값 은 if 이 고 세 번 째 값 은 else 입 니 다.
다음 프로그램 은 대응 하 는 스펙트럼 을 계산 할 수 있 습 니 다.샘플링 포 인 트 는 2 의 n 차 멱 으로 하 는 것 은 FFT 계산 에 편리 하도록 하 는 것 입 니 다.

fft_size = 256
 
#        FFT
x, y = triangle_wave(fft_size)
fy = np.fft.fft(y) / fft_size
다음은 계 산 된 스펙트럼 을 시각 화하 고 주파수 에 대응 하 는 강 도 는 공사 에서 자주 사용 하 는 데시벨 dp 로 표시 합 니 다.

#       FFT  20    ,             0,    
# log     ,    , np.clip           ,      
plt.figure()
plt.plot(np.clip(20*np.log10(np.abs(fy[:20])), -120, 120), "o")
plt.xlabel("frequency bin")
plt.ylabel("power(dB)")
plt.title("FFT result of triangle wave")
다음은 사인 과 코사인 함수 로 신 호 를 합성 한다.

#  FFT     freqs   n     ,      ,  loops      
def fft_combine(freqs, n, loops=1):
  length = len(freqs) * loops
  data = np.zeros(length)
  index = loops * np.arange(0, length, 1.0) / length * (2 * np.pi)
  for k, p in enumerate(freqs[:n]):
    if k != 0: p *= 2 #         ,      *2
    data += np.real(p) * np.cos(k*index) #            
    data -= np.imag(p) * np.sin(k*index) #              
  return index, data
그 중에서 index 는 스펙트럼 공간의 샘플링 점 을 대표 한다.
합성 신 호 를 그 려 서 x 좌 표 는 기본 정수 로 표시 하면 됩 니 다.

#                     ,      x   
plt.figure()
plt.plot(y, label="original triangle", linewidth=2)
for i in [0,1,3,5,7,9]:
  index, data = fft_combine(fy, i+1, 2) #            
  plt.plot(data, label = "N=%s" % i)
plt.legend()
plt.title("partial Fourier series of triangle wave")
plt.show()
이 파 이 썬 FFT 합성 파형 의 인 스 턴 스 는 바로 소 편 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 많은 응원 부 탁 드 리 겠 습 니 다.

좋은 웹페이지 즐겨찾기