본문으로 이동

파이썬:푸리에 분석

학교의 모든 지식. SMwiki
Sam (토론 | 기여)님의 2025년 5월 20일 (화) 09:07 판 (새 문서: == 개요 == = 고속 푸리에 분석 = 다음과 같이 x와 y, 간격 데이터를 적절히 정리해주면 된다.<syntaxhighlight lang="python3"> # 데이터 처리. x_vals = df[x].values # x 컬럼(시간 또는 인덱스) signal_data = df[y].values # 선택된 y 컬럼의 데이터 (numpy 배열) try: T = float(T) # 숫자만 받아들일 수 있다. except: # 입력값이 없는 경우. # 자동으로 간격 계산 (균등하다고 가정) x_diff = np.d...)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

고속 푸리에 분석

[편집 | 원본 편집]

다음과 같이 x와 y, 간격 데이터를 적절히 정리해주면 된다.

# 데이터 처리.
x_vals = df[x].values  # x 컬럼(시간 또는 인덱스)
signal_data = df[y].values  # 선택된 y 컬럼의 데이터 (numpy 배열)
try:
    T = float(T)  # 숫자만 받아들일 수 있다.
except:  # 입력값이 없는 경우.
    # 자동으로 간격 계산 (균등하다고 가정)
    x_diff = np.diff(x_vals)
    if np.allclose(x_diff, x_diff[0]):  # 거의 동일한 간격이면
        T = x_diff[0]
    else:
        T = np.mean(x_diff)
N = len(signal_data)  # 데이터 포인트 개수

# 푸리에 변환 계산
fft_result = np.fft.fft(signal_data)
freqs = np.fft.fftfreq(N, d=T)
fft_freqs = freqs[:N // 2]
fft_magnitude = np.abs(fft_result[:N // 2])

# plotly 그래프를 위해 데이터프레임 생성
fft_df = pd.DataFrame({'Frequency_Index': fft_freqs, 'Magnitude': fft_magnitude})  # 'Frequency_Index'로 이름 변경

# 그래프 생성 (plotly line plot)
plot_title = f'{y} 컬럼 푸리에 변환 결과 (샘플링 주기: {T:.4f})' if T > 0 else f'{y} 컬럼 푸리에 변환 결과'
fig = px.line(fft_df, x='Frequency_Index', y='Magnitude',
              title=plot_title,
              labels={'Frequency_Index': 'Frequency (Relative or Index)', 'Magnitude': 'Magnitude'})

# 그래프 레이아웃 조정 (선택 사항)
fig.update_layout(xaxis_title="주파수 (상대값 또는 인덱스)",
                  yaxis_title="크기 (Magnitude)")

# 그래프를 HTML div로 변환
plot_div = plot(fig, output_type='div')
context['plot_div'] = plot_div