'meshgrid'에 해당되는 글 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

댓글을 달아 주세요

  1. 2011.05.16 17:38  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  2. 아리마 2011.05.26 12:05  댓글주소  수정/삭제  댓글쓰기

    안녕하세요 ㅎㅎ
    너무 이해가 잘되게 포스팅 해주셔서.
    FFT 도 염치없지만
    포스팅 부탁드려요 ^_^;;

  3. Edmund 2011.08.11 15:54  댓글주소  수정/삭제  댓글쓰기

    너무 대단하세요. 많은 도움 받고 갑니다. 감사합니다^^

  4. 2011.12.04 16:22  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  5. 2012.02.06 20:55  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  6. J.Bear 2012.02.06 22:17 신고  댓글주소  수정/삭제  댓글쓰기

    NFFT 는 데이터 포인트 수가 맞습니다.

    궁금해하시는 점에 대해 직관적으로 대답해 드리겠습니다.

    데이터 길이보다 짧은 포인트수의 FFT 를 할 경우, 포인트 수만큼의 데이터 수로만 FFT 를 하게 됩니다.

    5만개의 데이터가 있는데 1024 포인트 FFT 를 한다면 앞쪽의 1024 개의 데이터만 가지고 주파수 분석을 하는 것이지요.

    반대로 데이터 수가 1000개인데 1024 포인트 FFT 를 한다면 나머지 24개의 데이터는 0 으로 채워서 FFT 합니다.

    이것을 Zero Padding 이라고 부르지요.

    꼭 2의 n 승으로 계산하는 것은 FFT 의 특성입니다.

    Butterfly 라고 불리우는 Bit Reverse 연산을 하기 위해서는 2의 n승개여야 하거든요

    4의 n 승 개로 하는 방법도 있습니다.

    이는 Radix 4 FFT 라고 불리우고요. Split FFT 등 다른 여러 방법이 있는데 FFT 에 대해 자세한 것은

    훗날 포스팅 하도록 하겠습니다.

    음성 신호와 같이 높은 샘플링율을 갖아 데이터 길이 매우 긴 신호의 경우에 주파수 분포를 보고 싶으시면

    다운 샘플링을 해서 분석하여 보던지 혹은 STFT 로 시간축에 따라 어떻게 주파수 분포가 변해가는 지를 보아야합니다.

    걍 2^10 이렇게 돌리면 데이터의 앞쪽에 위치하는 신호가 어떤 주파수 분포를 갖는지밖에 알수 없어요

    이해가 되셨기를

  7. 김덕현 2012.02.24 20:09  댓글주소  수정/삭제  댓글쓰기

    안녕하세요^^ 큰도움 되었습니다. 제가 FFT를 처음해봐서 잘몰라서 그러는데요. 4초마다 주파수가 변하자나요? 주파수영역대로 바꾸는 것 까진 이해되는데요. Amplitude는 뭘 의미하는 거죠?? 시간영역대에서는 4가 최대인데 주파수 영역에서는 800까지 올라가네요?? 초보라서 죄송 ...

  8. 지나가던1인 2012.05.12 01:19  댓글주소  수정/삭제  댓글쓰기

    지나가던 공학도인데 많은 도움 받고 갑니다 정말 감사합니다;ㅁ ;

  9. 공학도.. 2013.03.15 10:32  댓글주소  수정/삭제  댓글쓰기

    감사합니다.
    spectrogram을 몰라서 찾아보고 있었는데 자세하게 설명해 주셨네요.. !!

    아직 window 부분을 몰라서 더 알아봐야할 거같습니다...

    운영자 분과 같이 공학도를 위한 블로그를 해보고싶네요 !! 대단해요 !!

    • J.Bear 2013.03.15 21:14 신고  댓글주소  수정/삭제

      요즘은 너무 바쁜관계로 손도 못대고 있었습니다 ㅋㅋ

      적응필터 공부하던때가 언젠데 근 반년을 손놓고 업데이트를 안했군요 ㅋㅋ

      댓글이 달려서 들어와보니 ㅋㅋ

      아이유 삼단부스터 쓸때 썻던 글이네요 ㅋㅋㅋ

  10. 궁금해요 2013.09.04 12:44  댓글주소  수정/삭제  댓글쓰기

    두번째 그림에서 plot에 peak 값을 어떻게 저렇게 표시해요?
    X좌표, Y좌표 이렇게 상자안에 표시되어있던데 어떻게 하는건가요?

  11. 2014.02.09 16:14  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  12. 어려워요ㅠ 2014.04.29 10:20  댓글주소  수정/삭제  댓글쓰기

    저도 위에분과 같은 내용이 궁금해서 검색했는데 비밀댓글이네요ㅠ

    저는 time-frequency그래프에서 주파수가 peak를 찍을때 해당되는 간값을 얻을려고 알아ㅏ보고 있는 중인데 도저히 모르겠네요ㅠ.
    findpeaks 함수를 사용하면 될거 같은데 잘 모르겠어요.
    time-frequency가 배열로 저장이 되는건가요? 그래서 그 배열에서 frequency가 최고치인 위치를 찾으면 되는건가요.

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

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

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

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

어떻게 구별하면 좋을까? 라는 질문을 던지고 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

댓글을 달아 주세요

  1. 공대생 2011.08.22 16:24  댓글주소  수정/삭제  댓글쓰기

    저도 공대 대학원생인데요. 정말 큰 도움이 되는 내용 잘 보구 감사합니다. 앞으로도 좋은 내용 잘 부탁 드립니다 ^^

  2. 풍력공학석사1학기생 2013.01.08 18:23  댓글주소  수정/삭제  댓글쓰기

    실례가 되지 않으신다면 저 위에 나온 노트에 피겨된거 책 출처좀 알 수 있을까욤? ^^;;;
    SFTF랑.. 웨이블렛 공부해야 하는데..ㅠㅠ 마땅한 책이 없네요;;

    • J.Bear 2013.01.09 22:23 신고  댓글주소  수정/삭제

      STFT 는 웬만한 DSP 책에 모두 나와있구용
      WT 는 진한도서의 알기쉬운 웨이브렛 변환이 제가 봤던 책입니다

      처음에 개념잡기에는 갠춘한듯 싶어용 ㅋㅋ
      근데 WT 는 저도 공부 하다 말아서요~ 공부하셔서 나중에 좀 알려주세요 ㅋ

    • 풍력공학석사1학기생 2013.01.19 15:31  댓글주소  수정/삭제

      답변 감사합니다 ^^;;
      그나저나.. 조석을 STFT변환했는데.. 아직 공부단계다 보니...
      어떻게 접근해서 해석해얄지 감이잘 않오네요 ㅠㅠ..;;

      실례가 되지 않으시다면 도움좀 청해도 될까요?

    • J.Bear 2013.01.21 20:51 신고  댓글주소  수정/삭제

      제가 할 수 있는 부분이면 도움을 드리도록하겠습니다~

  3. 2013.01.22 21:00  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다

  4. 공대학생 2015.02.05 01:18  댓글주소  수정/삭제  댓글쓰기

    너무 감사합니다 ^^ 수업때 배우지 않고 프로젝트를 받아 개념도 아예몰라서 난감했는데 정말 감사해요 ㅎㅎ