'Spectrogram'에 해당되는 글 2건

  1. 2011.04.02 STFT 를 해볼까요??? (using MATLAB) (16)
  2. 2011.03.29 STFT (Short-Time Fourier Transform) 의 기본개념 (2) (7)


STFT 의 세번째 포스팅이네요 ~ ㅋㅋ

앞선 2개의 포스팅에서 STFT 가 왜 생겨나게 됐는지, 기존의 FT 방법들과의 차이점이 무

 

엇인지에 대해

간략하게 알아보았지요? ㅋㅋ

오늘은 1번 포스팅에서 다루었던 신호를 직접 STFT 해봄으로써

Matlab 을 이용해서 어떻게 STFT 를 하는지에 대해 알아보도록 하겠습니다

Matlab에서 STFT 를 지원해주는 명령어는 spectrogram 입니다 

함수이름이 참 직관적이죠? ㅋㅋ 앞쪽 포스팅을 보신분들은 무슨 말일지 아실듯

결국 우리가 얻어내야 하는 이미지가 이 spectrogram 인 것입니다 ㅋㅋ

1차 포스팅에서는 주파수가 7, 14, 21, 28Hz 가 5초에 한번씩 변하게 했었는데요

이번에는 STFT 가 갖는 장점을 눈에 볼수 있도록, 순서를 바꾸어서

4초가 지날때마다 14, 7, 28, 21 Hz 로 변하도록 신호를 만들었어요 ㅋ

 


요부분은 뭐 다들 잘 아시겠지용? ㅋㅋ

다 하고나서 코드 전문과 자료를 함께 첨부할테니 잘 안보여도 그냥 그랬구나하고 지금은 넘어가주세요 ~ ㅋㅋ

다음으로 이신호를 FFT 해봐야겠지용? ㅋㅋ

저는 귀찮아서 요론식으로 한번에 뿌려버렸어요~

여러분들은 코드를 요로케 짜시면 안대겠지요? ㅋㅋ

N = 11;
ft = fft(x,2^N);
psd = abs(ft);

요론식으로 알아보기 쉽도록 ㅋㅋ

여튼 지금은 귀찮으니까 패스~~ 2048포인트로 FFT 했구용~

제가만든 신호 주파수는 100Hz , 위에서 알수있지요??

FFT 를 모르시는분들은 댓글달아주세요~ ㅋ 기본중에 기본이지만 요청이 들어오면 그것도 간단히 포스팅 할께요






요론식으로 아주 간지나게 나오네요??

숫자가 잘 안보이실지 모르겠지만, 7 14, 21, 28Hz 가 순서대로 표현되네요 ㅋ

여기서 우리는 이렇게 생각할수 있겠죠

하지만, 우리는 14, 7, 28, 21 Hz 를 순차적으로 넣어준건데, 여기서는 그냥 이러한 성분들이 들어있다고만 보여주네요

아이 짱난다. ㅋㅋ 그래서 STFT 를 해봐야겟지요?

자 그럼 Command 창에

>>doc spectrogram

을 쳐서 어떤형태의 입력을 넣어줘야 어떤형태의 출력을 뽑아주는지 알아야겠지요?


와 간지나는 Matlab. ㅋㅋ

이제 저것들이 뭘 의미하는지 알아보지요 ㅋㅋ

1. S : Spectrogram 의 S 를 따다 쓴 것이 아닌가 라는 저만의 생각 ㅋㅋ 여튼 STFT 한 결과를 여기에 저장하겠구나~~
2. x : 입력 Sinal 이죠. ㅋ 요 신호를 STFT 해주겠구나~~~
3. window : 구간을 정해가며 샘플을 뽑아다가 FFT 하는것을 반복할테니까 그 구간을 결정한 window 를 집어 
                  넣어 줘야겠구나~~~~~~~~~ (Window 개념을 모르시는분은 공부하세요!!)
4. noverlap : window 를 취해가면서 샘플을 선택하는데 Overlab 되어지는 샘플갯수를 입력하는 란이에요
                   빡시게 Overlab 할수록 시간축 해상도가 올라가겠지요?
5. F : FFT 를 몇포인트짜리로 돌릴것이냐? 이거에요 ㅋㅋ 높일수록 주파수 해상도가 올라가겠죠??
6. fs : 입력신호의 Sampling Rate 를 넣어주라는 소립니다. 넣어줄 경우에 주파수와 시간 정보를 함수내에서 직접
         계산해서 실제 정보대로 만들어 주겠단 소리에요.
7. 출력단의 F, T : 설명 안해도 되겠죠? ㅋㅋ

아주 나이스 합니다 ㅋㅋ

그럼 위 신호를 STFT 를 해보기 위해서 코드를 작성해 보지요


오 간단하다 ㅋㅋ

Set Parameter 에서 필요한 정보를 모두 제공해 주었지요? ㅋ

저는 주파수 해상도를 높인 대신에, 시간축 해상도를 낮췄어요 ㅋ

어차피 4초에 한번씩 변하는 신호였으니까 저정도로 잡아도 충분히 변화를 볼수 있고

주파수 해상도를 높인 것은, 여러분들에게 좀더 깔끔한 라인 스팩트럼을 보여드리고 싶어서입니다


오옷~

시간에 따라 변하는 해당 주파수가 붉은색으로 표시되는군요.

해단 주파수의 Power 가 높기때문에 붉은색으로 보이는것이에요

하지만!! 시간축 해상도를 2초 정도로 잡아놓아서 4초 근방에서 변하는 신호가 굉장히 뭉개져서 나오네요

그렇다면! 시간축 해상도를 좀 높여볼깝숑??


같은 코드에 R = 40 , 즉 윈도우의 길이로 40샘플을 선택했더니 시간축 해상도는 올랐는데

주파수 영역이 뭉개져서 정확한 주파수를 찾기가 힘들군요 ㅋㅋ

자 여기서 느끼셔야 할것은, 아... 시간과 주파수영역의 해상도가 상호 배타적이구나.

윈도우 길이와 FFT 사이즈를 잘 결정해서 최소한의 연산량으로 내가 원하는 정보를 알아 내야 겠구나!!

라고 생각하여야 공학을 하는 사람이겠지요? (너나 잘하세요라고 생각하시는거 다 알고있습니다 ㅋㅋㅋ)

이런 Calibration 과정은 여러분들이 직접 해보시기 바랍니다.

여기서 멈추면 서운하죠??

위의 스팩트로그램을 3D 형태로 뿌렸습니다

Mesh-Graph 라고 불리우죠? ㅋㅋ 오른쪽은 그 영상을 위에서 내려다본 투영 영상이에요

Contour 라고 합니다.

이 그래프에 관한 코드는 첨부해드린 m - file 에서 확인하시기 바랍니다 ㅋ

저도 얼릉하고 공부해야되서 ㅋㅋㅋ

시간에 따라서 신호의 주파수가 어떻게 변했는지를 단편적으로 보여주는 쉬운 예 였습니다.

제가 STFT 를 공부할때 정리했던 정리 파일과, 위 코드가 포함된 m-file 을 첨부할테니

필요하신분 참고하시구요

잘못된점이나 의문사항 있으면 댓글로 Feedback 해주시기 바랍니다 ~ ㅋㅋ

다음 포스팅에서는

지금까지 포스팅한 STFT 를 이용해서

아이유 '좋은날' 에 나오는 3단 부스터 부분 있지요??

그부분의 음계를 공학적으로 유추해서 가정해놓고, 악보를 찾아서 실제로 비교해 보아

STFT 를 잘 Calibration 했을때 얼마만큼의 정확도를 보여줄수 있는지를 알아보는

간단한 개별 실험을 해서 올려드리도록 하겠습니다~

그럴러면 Matlab 을 이용해서 MR 제거버젼 파일을 뽑아내야 하는데 ㅋㅋ

그건 따로 포스팅하고 초점은 STFT 에 맞추도록 하겠습니당. ㅋㅋㅋ

여러분들과 관심 있으시면 한번 해보세요~

긴글 읽어주셔서 감사하구요~ 다음 포스팅에서 뵙겠습니다 ~ ㅋ


 

신고
Posted by J.Bear

일본에서 날라온 방사능에 제 몸이 오염되어서 정말로 힘이 듭니다 ㅠㅜ

그냥 기절해 있는것 같아요.

저는 강인한 남자이기 때문에 절대로 감기!!! 따위는 걸리지 않습니다. ㅋㅋㅋ

지난 포스팅에서는 어떻게 시간이 변함에 따라 주파수가 변해가는 신호가 있을때

어떻게 구별하면 좋을까? 라는 질문을 던지고 FFT 의 시간적인 한계에 대해서 말씀드렸었지요 ㅋ

그 해결책이 STFT 라는 것 까지 말씀드렸구요 ㅋ

그래서 오늘은 STFT 의 개념에 대해서 바로 논해보도록 하겠습니다. ㅋㅋㅋ

DSP 수업시간이 생각나시겠지만, 최대한 재미있고 쉽게 풀어나가볼께요 ㅋ

STFT 는 시간에 따라 주파수 성분이 변하는 신호의 time - frequency  정보를 어떻게 효율적으로 분석할수 있을까?

하는 개념에서 나오게 된것입니다.

일단 'Spectrogram' 이 무엇인지 아셔야 할것 같습니다. ㅋ 그래야 생소한 개념인 시간-주파수 개념을 이해할수 있어요 ㅋㅋ


        <Figure 1. Spectrogram>

 

<Figure 2. MeshGrid>

이런식으로 나오는 그래프가 Spectrogram 이에요 ㅋㅋ

아래쪽에 보이는 Figure 2 는 Spectrogram 에서 얻은 정보를 MeshGrid 에 표현해 본 것입니다 ㅋ

이렇게 뿌리는 부분에 대해서는 차차 공부해보도록 해요 ㅋㅋ

1. Sampling 된 신호가 막연하게 길지만, 주기적이지 않을때 DFT 를 하기 위해서는 긴 시간을 기다리게 되는 경우
    가  발생한다.
2. 이렇게 오랜 시간을 기다려 spectrum 을 얻었다 하여도, 시간적인 변화의 많은 부분이, 계산된 spectrum 에
    나타나지 않는 한계를 갖는다.
3. 그래서, spectrum 성분이 변하지 않는 짧은 악절의 연속을 분석한다.
4. 이 개념을 공식화 하기 위해서, X[n] 매우 긴 신호라고 가정한다.

이런 순서로 STFT 가 나오게 된 것이지용 ㅋㅋ

한마디로 DFT 를 하는데, 원하는 윈도우를 정해서 적당히 옮겨가면서 계속 DFT 를 해서 시간영역에 따른 주파수 정보를 얻어내겠다 라는 것입니다.

어쩔수 없이 수식이 들어가야 하겠네요 ㅠㅠ

제가 공부하면서 정리해논 노트를 한번 짤라서 붙어넣어볼께요~


잘 보이시나용? ㅋ

글씨가 악필이라서 죄송합니다 ㅋㅋㅋㅋ

위에도 언급이 되어있지만, 시간에 대해서 계산된 스팩트럼들의 합이 STFT 인데 이것을 2차원적으로 표현하기에 무기가 있죠 ㅋㅋ.

그래서 Spectrogram 이라는 것이 나오게 되었어요 ㅋㅋ

아... 또 글이 엄청 길이지넴 ...

아직 이 글을 읽으시는 분들이 없지만, 분명히 읽는 분이 생기신다면,

이따위것 말고, 그러니까 이걸 어떻게 하는지 코드나 올려주라!! 하시는 분들이 대다수겠지요? ㅋㅋ

하지만 저도 해야할 연구가 남았기에 ~ ㅋㅋ

오늘 포스팅은 여기까지 ~ ㅋㅋ

다음번 포스팅에서는 그래서 Matlab 으로 어떻게 STFT 를 하는지,

그 결과 배열이 각각 어떤것을 의미하는지, 위의 Spectrogram, MeshGrid 는 어떻게 그리는지에 대해 설명하고

m-file 을 올려드리도록 할께용 ~ ㅋㅋㅋ

제가 공부하면서 정리해 놓은 PDF 파일도 함께~ ㅋㅋ

그럼 다음 포스팅에서 뵈요~

신고
Posted by J.Bear