Chapter 3

파동과 주기

반복되는 움직임을 그래프로 읽기
핵심 질문

출렁이는 그래프에서 진폭과 주기는 어디에 보일까?

파동과 주기

핵심 질문

반복되는 움직임을 어떻게 수식과 그래프로 표현할 수 있을까?

교과서 설명

파동은 같은 모양이 반복되는 변화다. 가장 기본적인 파동은 사인파다.

진폭으로 위아래 크기를 정한다. 는 얼마나 자주 반복되는지를 정하고, 는 시작 위치를 밀어 준다.

는 한 칸 움직일 때 각도가 얼마나 빨리 변하는지를 뜻한다. 이 자료처럼 인 반복 속도로 잡으면 주기 는 다음처럼 계산된다.

또 다른 표기법으로는 를 “단위 시간 또는 단위 길이마다 몇 번 반복되는가”를 나타내는 주파수로 두고 이렇게 쓴다.

여기서 는 한 번 반복할 때 한 바퀴 만큼 돈다는 뜻을 포함한다.

주기 와 주파수 는 서로 거꾸로 움직인다.

1초에 2번 반복되면 이고, 한 번 반복하는 데 걸리는 시간은 초다.

나중에 DFT에서 나오는 는 Hz 같은 실제 단위의 주파수 그 자체가 아니라, 길이 인 샘플 묶음 안에서 기본 파동이 몇 바퀴 도는지를 세는 번호다.

실제 신호는 기본 파동 하나만으로 끝나지 않는 경우가 많다. 여러 파동을 더하면 더 복잡한 모양이 만들어진다. 이것을 중첩, 또는 superposition이라고 부른다.

예를 들어 샘플 번호 과 전체 샘플 개수 을 쓰면 다음처럼 두 파동을 더한 신호를 만들 수 있다.

앞의 항은 한 바퀴 도는 코사인 파동이고, 뒤의 항은 두 바퀴 도는 사인 파동이다. DFT는 이런 복잡한 신호 안에서 어떤 기본 파동들이 섞였는지 주파수별로 점수를 매긴다.

파동식을 유도하는 과정

파동 에서 주기는 “입력을 얼마나 늘리면 같은 값으로 돌아오는가”라는 질문으로 유도할 수 있다. 주기를 라고 하면 모든 에 대해 다음이 같아야 한다.

사인 함수는 각도가 만큼 늘어나면 같은 값이 된다. 따라서

이고, 양쪽에서 를 지우면

가 된다. 즉 양수 가 클수록 한 바퀴를 더 빨리 돌아서 주기가 짧아진다. 일반적으로는 방향을 제외한 반복 속도를 보므로 라고 쓰면 더 엄밀하다.

DFT에서는 연속 변수 대신 샘플 번호 을 쓴다. 길이 인 배열 안에서 정확히 번 반복되는 기본 파동은 다음처럼 쓸 수 있다.

실제 배열 번호는 까지만 있다. 다만 한 칸 더 간 가상 위치 을 생각하면 각도는 가 되어 시작 방향으로 돌아온다. 그래서 는 “샘플 묶음 하나를 지나는 동안 몇 바퀴 도는가”를 나타낸다. 이 관점은 뒤에서 DFT의 주파수 번호 와 바로 연결된다.

이산 파동에서는 몇 칸 뒤에 같은 값으로 돌아오는지도 수식으로 볼 수 있다. 칸 뒤에 같은 각도가 되려면 증가한 각도

의 정수배여야 한다. 즉 이 정수이면 된다. 그래서 가 클수록 보통 더 빨리 반복되지만, 정확한 반복 칸수는 가 공약수를 가지는지에도 영향을 받는다.

직관 비유

그네를 밀면 앞뒤로 반복해서 움직인다. 그네가 가장 멀리 가는 높이는 진폭이고, 한 번 왕복하는 데 걸리는 길이가 주기다.

예제

다음 두 함수는 모양은 비슷하지만 반복 속도가 다르다.

는 같은 구간 안에서 더 많이 출렁인다.

위상 는 그래프를 시작 위치에서 밀어 준다.

같은 파동이라도 시작점이 다르면 그래프가 옆으로 이동해 보인다.

손풀이 체크

  1. 의 주파수 와 주기 는?

    답 보기

    f=1f=1, T=1T=1

  2. 보다 같은 구간에서 몇 배 자주 반복될까?

    답 보기

    2배

  3. 주기가 이면 주파수 는?

    답 보기

    f=4f=4

다음으로 이어지는 생각

정확히 말하면, 복잡한 신호를 여러 기본 파동의 합으로 읽는 관점은 DFT와 푸리에 해석의 생각이다. FFT는 그 DFT 계산을 빠르게 하는 알고리즘이다. 먼저 그래프를 읽는 법을 정확히 알아야 한다.

이번 장에서 기억할 3문장

  1. 진폭은 파동의 위아래 크기이고, 주기는 한 번 반복되는 길이다.
  2. 주파수는 같은 시간이나 구간 안에서 몇 번 반복되는지를 나타낸다.
  3. DFT의 k는 실제 Hz가 아니라 샘플 묶음 안의 회전 번호로 먼저 이해한다.

C++ Practice

C++로 확인하기

진폭 AA, 반복 속도 ω\omega, 시작 위치 ϕ\phiAsin(ωx+ϕ)A\sin(\omega x+\phi) 값을 어떻게 바꾸는지 확인하기

#include <cmath>
#include <iomanip>
#include <iostream>

using namespace std;

double wave(double x, double amplitude, double omega, double phase) {
    return amplitude * sin(omega * x + phase);
}

int main() {
    const double pi = acos(-1.0);
    double amplitude = 2.0;
    double omega = 2.0;
    double phase = pi / 2.0;

    cout << fixed << setprecision(3);
    for (int step = 0; step <= 4; ++step) {
        double x = step * pi / 4.0;
        cout << "x=" << x << " y=" << wave(x, amplitude, omega, phase) << "\n";
    }
}

연습: AA, ω\omega, ϕ\phi 값을 바꾸고 출력값의 변화를 비교해 보자.