나이키스트 주파수 (Nyquist Frequency)
센서 데이터를 사용할때 준수해야하는 부분... 진동측정을 할때 보통 3축 가속도계로 측정한 후 센싱값을 Fourier Transform해 진동데이터를 얻는다. 센서가 알아서 측정값을 FFT해주는 경우도 있으나, 그렇지 않은경우 데이터를 Matlab등 계산툴로 불러와 직접 FFT를 해야하는데 이때, FFT범위 주파수 대역대를 어떻게 설정해야할까? 그 기준을 잡아주는것이 Nyquist frequency이다.
GPT에게 FFT 코드를 짜달라하면 쭉쭉 만들어주는데 저기 빨간박스 체크된 Fs 부분이 주파수 대역에 관한 부분이다. 만약 저 부분을 마음대로 상수로 넣으면 그에 맞춰 FFT플롯이 나오게된다. 예를들어 5000을 넣으면 2500Hz까지. 4000을 넣으면 2000Hz까지.. 근데 이게 과연 맞는값일까?
센서는 어떤 연속적인 가속도변화를 모두 측정할 수 없다. 일정한 시간간격으로 샘플링을 하는데 이때 한 파장에서 적어도 2번이상 샘플링을 해야 정확한 데이터를 표현할 수 있다는것이다.
나이키스트 주파수를 잘 표현한 그림이다. 파장과 동일한 주파수로 샘플링을 할 시 A와 같이 원 데이터에 대한 표현력이 전혀 없는 일직선이 나온다. B처럼 적어도 원 데이터 주파수의 2배이상의 주파수로 샘플링을 해야 표현력이 생긴다.
즉, 위의 FFT 범위설정은 샘플링 주파수의 1/2 아래로만 볼 수 있다는 결론이 나오게된다. Fs에 맘대로 상수를 넣을수 있는게 아닌것이다.
손쉽게 구할 수 있는 아두이노 MPU-6050 센서이다. 3축 가속도 + 자이로 센서인데 값이 매우 저렴해 사용에 부담이 없다. 이 센서의 경우 정확한 스펙은 공개되어있지 않지만 sampling frequency가 약 1kH정도이다. (사용결과 경험적으로 최대 샘플링 주파수가 1kH로 추정됌. 확실한것은 아니다.) 즉, 이 센서로 측정한 가속도값을 FFT했을때 500Hz범위까지만 신뢰할 수 있다는것이다.
그렇다면 내가 쓰고있는 센싱 데이터 샘플링 주파수는 어떻게 알수있을까?
데이터를 기록한 엑셀 또는 csv파일을 열어보자. 보통 1열이 시간, 2열부터 가속도 등 측정값일것이다. 이 파일의 시작 시점(0초대)을 제외하고 1초~2초사이 몇개의 데이터가 기록되었는지 보면 됀다. 예를들어 1초~2초사이에 30개의 데이터가 기록되었다면 30Hz로 sampling이 되고있는것이고, 이 데이터를 FFT할 시 15Hz범위까지 신뢰할 수 있다는 의미이다.
만약 센서가 1kHz 스펙인데 엑셀엔 그보다 훨씬 낮은 주파수로 데이터가 기록된다면? 이땐 데이터를 불러오거나 기록하는 코드가 잘못되었을 가능성이 있다. 센서 스펙을 Maximum으로 사용할 수 있도록 코드를 구성해야한다.