본문으로 바로가기

MATLAB 문자연산, -Laplace, Fourier, Z-Trans

category Software/MATLAB 2010. 8. 27. 03:15
이제 다음주면, 각 대학들은 개학입니다. 저도 이번학기에 또 수업을 몇 개 진행하게 되었습니다. 항상 부족한 수업때문에 학생들에게 미안한 마음을 가질 때가 있습니다. 뭐 한가지 아이러니 한것은 정말 열심히 스스로의 생각에.. 정말 열심히 수업준비를 한 것은 학생들의 수업평가가 별로 안좋고... 뭔가 바쁜일에 지쳐가며 정작 수업준비는 약간 소흘히 한 것은 희한하게 수업평가가 좋은.... 음... 전.. 수업준비를 하면 안되는가봅니다..ㅠㅠ 하여간..

예전에 MATLAB의 문자연산에 관해 다루었었습니다. 간단히 소개[관련글]를 하고,  그후 특별히 미분의 기술 중 제가 필요에 의해 많이 사용하는 것에 대한 이야기[관련글]도 했었습니다.

이번엔 그저 다시 정리도 할겸.. 간단한 명령어 몇 개 소개할려고 합니다.


문자연산을 사용하기 위해 syms 명령으로 s,t,a,b,z를 선언하고, f1과 f2를 그냥 연습용으로 또 선언해 두었습니다.


미분과 적분한 결과입니다. 문자가 여러개 사용되었으니, t에 관해 미분/적분을 하라고 명령어 옵션에 't'를 넣어둔것이 보이실겁니다.


이번엔 극한문제 푸는 명령입니다. limit(f2, t, 0)은 f2함수에서 t를 0으로 보내는 극한을 풀어달라고 한것입니다.


거기서 하나 옵션이 더 붙을 수 있는데, 'left' 혹은 'right'를 넣어주면 좌극한, 혹은 우극한이 됩니다.


무한대로 보내는 극한 문제도 많죠.. 그건 inf 라는 글자로 명령을 주면 됩니다.^^


위의 세 명령은 선형변환의 대표 주자인 푸리에, z-변환, 라플라스변환을 수행하는 명령입니다. fourier(f1, t, s)는 f1함수를 t에 관해 푸리에 변환을 해달라는 이야기고, 그때 주파수영역의 변수는 s를 사용하라는 것입니다. ztrans나 laplace 역시 같은 의미의 옵션을 가집니다.^^

다음번엔 MuPAD에 대해 이야기를 해드릴께요. 텍스트환경에서 수식을 보는것이 좀 슬플때가 있죠. 그럴때 많이 사용하는 것이 MuPAD입니다. 꽤 재미있습니다.^^ 사실, 수식 표현이 예쁜건 울프럼알파[관련글]인데요. 그래도, 울프럼알파보다는 많은 기능을 가지고 있으니 한번 소개해 드리겠습니다... (시간은 약속해드리지 못한다는...ㅠㅠ)



댓글을 달아 주세요

  1. BlogIcon 라라윈 2010.08.27 06:34

    저도 개강이라....
    이제 곧 학교에 가면 수식과 프로그램과 친해져야겠군요.....,ㅜㅜ

  2. BlogIcon 핑구야 날자 2010.08.27 08:06

    ㅋㅋ 라라윈님도
    늘 어렵지만 흥미롭게 보고 있어요,,, 이해는 하나,,ㅋㅋ

  3. BlogIcon 탐진강 2010.08.28 13:01

    개강이라 더욱 바빠지겠네요.
    화이팅하세요

  4. BlogIcon boramina 2010.08.28 20:40

    학생들이 항상 약간 느슨한 걸 좋아하죠.^^

  5. BlogIcon 모피우스 2010.08.29 17:56

    저희는 개학햇는데... 대학은 아직이군요...

    개강 준비에 바쁘시겠습니다. 힘내세요.

    화이팅~~~

  6. ㅜㅜ 2010.10.17 20:54

    매트랩 2010을 쓰고 있는데요; syms가 undefined function or method라고 오류가 나요ㅜㅜ

    • BlogIcon PinkWink 2010.10.18 14:11 신고

      다른 문법적 오류가 아니라면... 그런데도.. syms에서 undefined function이라는 에러가 뜨면 symbolic 툴박스가 안깔렸을 수도 있습니다.

  7. 열심군 2011.06.02 00:04

    number = [3 8 2 8];
    len = length(number);

    % order : {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *, #}
    timeLow = [941 697 697 697 770 770 770 852 852 852 941 941];
    timeHigh = [1336 1209 1336 1477 1209 1336 1477 1209 1336 1477 1209 1477];

    % sampling frequency
    fs = 8000;
    ts = 1/ fs;
    indexSignal = fs / 2;
    indexDelay = fs / 5;
    indexTotal = indexSignal + indexDelay;

    for i = [1:1:len]
    unitLow = timeLow(number(i)+1) / fs;
    unitHigh = timeHigh(number(i)+1) / fs;

    for j = [1:1:indexTotal]
    if(j <= indexSignal)
    freqLow(((i-1) * indexTotal) + j) = sin(2*pi*unitLow*(j-1));
    freqHigh(((i-1) * indexTotal) + j) = sin(2*pi*unitHigh*(j-1));
    else freqLow(((i-1) * indexTotal) + j) = 0;
    freqHigh(((i-1) * indexTotal) + j) = 0;
    end
    end

    end

    % output file generating
    output = (freqLow + freqHigh) / 2;
    wavwrite(output, fs, 'dtmf.wav');

    이렇게 쳐서 실행을 하니...

    In wavwrite>PCM_Quantize at 293
    In wavwrite>write_wavedat at 309
    In wavwrite at 138

    위와 같이 나오는데 무슨 문제인지 질문드려도 되겠습니까?

    참고로 DTMF관련 내용입니다.

    부탁드리겠습니다 (__)

    • BlogIcon PinkWink 2011.06.02 09:21 신고

      이 코드를 그대로 돌렸을때, dtmf.wav가 생성되면서 음이 나오던데요^^
      메세지는 warning으로 wavwrite라는 명령어의 help문서를 확인해보시면, output이 소숫점을 가지고 있는 경우는 -1부터 1까지의 범위여야한다고 되어있더군요. 아... 비트가 32이하인 경우... 그래서 MATLAB이 범위에 어긋나는 데이터는 잘라(clip) 버렸다고 주의(warning)를 준듯 합니다.

  8. 열심군 2011.06.02 10:22

    답변감사드립니다!

  9. 향풀 2013.12.10 22:32

    ztrans 명령어에 대해 ztrans ( ) 괄호 안에 있는 문자들의 역할이 궁금합니다
    어떻게 사용하는건가요

    • BlogIcon PinkWink 2013.12.11 09:22 신고

      f1은 포스팅 본문 상단에 보면 정의되어 있습니다. z-변환하고 싶은 함수죠. 그 함수의 변수는 시간 t라는 걸 두번째로 알려주는 겁니다. 그리고 그 결과는 z변수로 받고 싶다는 뜻입니다.

  10. haribo 2014.11.10 21:34

    syms s t a b z
    라고 쓰고 엔터를 치면 아래와 같이 나와요 ㅠ
    ??? Undefined function or method 'syms' for input arguments of type 'char'
    MATLAB 7.12.0(R2011a) 을 쓰고 있어요 !