파이썬은 푸리에 변환 않는다

푸리에 변환 (FFT)

  프랑스어 과학자 푸리에 어느 한 사이클 곡선이 아무리 불규칙하거나 점프, 사인 곡선 및 평활 한 세트의 중첩으로 표현 될 수 없음을 제안했다. 즉, 푸리에 변환이다 로 세분화 불규칙한 곡선 의 집합 부드러운 사인 곡선 인 방법.

  개체는 푸리에 신호를 주파수 도메인 (즉, 주파수 도메인)에 대한 시간 영역 신호 (즉, 시간 영역)을 변환하는 변환되어 변경 될 물건의 각도와 동일한 이해를 위해, 변환 도메인, 따라서,에 나쁜 시간 영역 처리 대신, 처리는 주파수 도메인에서의 상대적으로 간단 할 수있다 . 이러한 신호 처리는 크게 저장의 양을 감소시킬 수있다.

예를 들어 피아노를 연주

시간 도메인 함수가 있다고 가정 : Y = F (x)는, 그 중첩 된 사인 함수의 시리즈로 분해 될 수있는 푸리에 이론에 따라서는, 그 진폭 A, 주파수 ω의 초기 위상 또는 상이한 φ :

Y는 $$ $$ A_1sin (\ omega_1x + \ phi_1) + A_2sin (\ omega_2x + \ phi_2) + A_2sin (\ omega_2x + \ phi_2) + R =를

따라서, 푸리에 함수를 복수의 시간 영역에서 주파수 영역으로 접근도 각도의 간단한 중첩의 비교적 복잡한 함수를 변환하고, 변환 중 일부는 비교적 간단하다 문제를 다룬다.

푸리에 변환은 상관 함수의 변환

freqs np.fft.fft.fftfreq = (샘플 수, 샘플링주기)  얻어진 샘플 번호 푸리에 변환하여 얻어지는을 샘플링주기 분해 주파수 시리즈 어레이

np.fft.fft .fft (원래 시퀀스)  고속 푸리에 변환 후의 값의 원본 함수의 시퀀스는 복소 배열 수득 변환모드 복소 인수 담당자의 초기 단계의 복소 진폭으로 표시되는

np.fft.fft .ifft (복소 시퀀스)  상기 역 푸리에 변환을 통해 얻어진 복소 배열은 함수 값의 합성 배열 변환

케이스 : 고속 푸리에 이루어지는 복합 파 주파수 분해 웨이브 진폭 초기 위상 어레이의 배열을 얻기 위해, 변환, 주파수 영역에서 이미지를 그린다.

가져올 순이익으로 NumPy와
 수입 PLT의 같은 matplotlib.pyplot
 수입 FFT 등 numpy.fft 

X = np.linspace (-2 np.pi * 2 * np.pi 1000 ) 

, N = 1000 
, Y = np.zeros (x.size)
 위한 I  범위 (1, N + 1 ) 
    Y + = 4 * np.pi / (2 * I - 1) * np.sin ((I * 2 - 1) * X) 

complex_array = fft.fft (Y )
 인쇄 (complex_array.shape)   # (1000) 
의 인쇄 (complex_array.dtype)   #의 complex128의 
인쇄 (complex_array [0])   #(-2.1458390619955026e는-12 + 0j이다) 
y_new = fft.ifft (complex_array) 

plt.subplot ( 311 ) 
plt.grid (하여 lineStyle = ' : ' ) 
(X, Y는, 라벨 plt.plot = ' Y는 ' )   #은 Y가되고 합산 1,000 사인파 시퀀스 
plt.subplot을 (312 ) 
plt.plot (X, y_new 라벨 = ' y_new ' , 컬러 = ' OrangeRed에 ' )   # Y IFFT 변환 시퀀스이다 

#은 주파수 정렬 분해 표면파 달성 
freqs을 ([. 1] x.size, X의 - fft.fftfreq = X [0])
 #의 복합 모드의 진폭 (에너지 크기) 신호 
complex_array =fft.fft (Y) 
포로 = np.abs (complex_array) 

plt.subplot ( 313 ) 
plt.title ( ' 주파수 도메인 ' , 글꼴 크기 = 16 ) 
plt.xlabel ( " 빈도 " , 글꼴 크기 = 12 ) 
plt.ylabel ( ' 전원 ' , 글꼴 크기 = 12 ) 
plt.tick_params (labelsize = 10 ) 
plt.grid (이는 linestyle = ' : ' ) 
plt.plot (freqs [freqs > 0] 포로 [freqs> 0], C = ' OrangeRed에 ' 라벨 = ' 주파수 ') 
Plt.legend () 
plt.tight_layout () 
plt.show ()

푸리에 변환을 기반으로 주파수 영역 필터

잡음이 낮은 에너지 신호가 주파수 영역 필터링은 잡음을 푸리에 변환에 의해 달성 될 수있는 신호 에너지와 노이즈 중첩 된 신호이다.

잡음을 포함하는 주파수 스펙트럼에 FFT 잡음 신호를 함유함으로써, 저 에너지 노이즈 IFFT를 통해 고 - 에너지 신호를 떠난 후 고 에너지 스펙트럼을 남기고 제거된다.

케이스 (푸리에 변환에 기초하여 오디오 파일 변환으로 주파수 영역 필터링 노이즈를 제거 noiseed.wav 데이터를 설정된 주소 ).

  샘플링 수, 샘플링주기마다 샘플링 된 오디오 신호의 값 : 1, 오디오 파일, 기본 정보를 획득하는 오디오 파일을 판독한다. 오디오 타임 도메인 렌더링 : 시간 / 화상 변위

가져 오기 NP AS NumPy와
 가져 오기 NF AS numpy.fft
 가져 오기 WF AS scipy.io.wavfile
 가져 오기 PLT의 AS matplotlib.pyplot 

# 오디오 파일 읽기 
SAMPLE_RATE, noised_sigs = wf.read ( ' ./da_data/noised.wav ' )
 인쇄 (SAMPLE_RATE )   #의 SAMPLE_RATE : 샘플링 속도 44100 
인쇄 (noised_sigs.shape)     #의 noised_sigs 각 샘플링 포인트 변위 (220,500)에 대한 오디오 샘플들을 저장 
시간 = np.arange (noised_sigs.size) / SAMPLE_RATE 

plt.figure ( ' 필터 ' ) 
plt.subplot ( 221 ) 
plt.title ( ' 시간 도메인' , 글꼴 크기 = 16 ) 
plt.ylabel ( ' 신호 ' , 글꼴 크기 = 12 ) 
plt.tick_params (labelsize = 10 ) 
plt.grid (이는 linestyle = ' : ' ) 
plt.plot (시간 [: 178] noised_sigs [: 178 ], C = ' OrangeRed에 ' 라벨 = ' Noised ' ) 
plt.legend ()

 

  푸리에 변환에 기초하여 2 오디오 주파수 도메인 렌더링 오디오 주파수 도메인 정보를 획득하는 단계, 변환의 주파수 / 에너지 화상

#의 푸리에 주파수 영역 화상이 그려진 변환 
freqs = nf.fftfreq을 (times.size 타임즈 [1.] - 시간 [0]) 
complex_array = nf.fft (noised_sigs) 
포로 = np.abs (complex_array) 

plt.subplot ( 222 ) 
plt.title ( ' 주파수 도메인 ' , fontSize는 = 16 ) 
plt.ylabel ( ' 파워 ' , 12 = fontSize는이다 ) 
plt.tick_params (labelsize = 10 ) 
plt.grid (하여 lineStyle = ' : ' )
 # 급성장 좌표 페인트 
plt.semilogy (freqs [freqs> 0] 포로 [freqs> 0], C = ' LimeGreen" 레이블 = ' Noised ' ) 
plt.legend ()

  3 오디오 주파수 도메인 도면을 제거하는 저주파 소음의 주파수 / 에너지 화상

# 최대 주파수 에너지 값 상대 
fund_freq를 = freqs [pows.argmax ()]
 # 함수는 복수 지수 소거해야하는 사람들 찾을 곳 
noised_indices = np.where은 (freqs는! = Fund_freq)
 #의 복소 배열의 복사본의 복사, 오염을 방지 할 원시 데이터 
filter_complex_array = complex_array.copy () 
filter_complex_array [noised_indices] = 0 
filter_pows의 =의 np.abs (filter_complex_array) 

plt.subplot ( 224 ) 
plt.xlabel ( ' 주파수 ' , 12 = fontSize는 ) 
plt.ylabel ( ' 파워 ' , fontSize는 = 12이다 ) 
plt.tick_params (labelsize = 10 )
plt.grid (이는 linestyle = ' : ' ) 
plt.plot (freqs [freqs > = 0, filter_pows [freqs> = 0, C = ' dodgerblue ' 라벨 = " 필터 " ) 
plt.legend ()

  도 4는, 상기 역 푸리에에 기초하여 새로운 오디오 신호, 오디오 렌더링 시간 도메인 생성하는 변환 : 시간 / 변위 화상

filter_sigs = nf.ifft (filter_complex_array) .real 
plt.subplot ( 223 ) 
plt.xlabel ( ' 시간 ' , 글꼴 크기 = 12 ) 
plt.ylabel ( ' 신호 ' , 글꼴 크기 = 12 ) 
plt.tick_params (labelsize = 10 ) 
PLT. 그리드 (이는 linestyle = ' : ' ) 
plt.plot (시간 [: 178] filter_sigs [: 178], C = ' hotpink ' 라벨 = " 필터 " ) 
plt.legend ()

  5, 오디오 파일을 재생

# 오디오 파일이 생성된다 
wf.write ( ' ./da_data/filter.wav ' , SAMPLE_RATE, filter_sigs) 
()을 plt.show

 

추천

출처www.cnblogs.com/LXP-Never/p/11558302.html