표준 코드에 대해 조사하기1. 아스키코드 (ASCII : American Standard Code for Information)원래 2진 코드가 10진수 0에서 9까지를 표시하는데 사용되는 것 외에 아주 큰 수의 2진 코드는 알파벳과 숫자를 표시하는데도 사용되어 진다. 이와 같은 특성을 갖는 코드를 알파뉴메릭이라고 한다. 이러한 코드 중에 미국 정보변환표준 코드인 ASCII코드가 가장 널리 사용되고 있다. 이 코드는 7bit 코드로(7개의 bit에 8번째에 parity bit를 첨가해서 사용한다) 알파벳의 대문자와 소문자, 특수문자(*,+,=), 30개 이상의 코멘드(command)와 제어동작(메시지의 시작과 끝, 캐리지 리턴, 줄바꿈 등)을 표시할 수 있다.7bit를 사용하기 때문에 27=128개의 코드 조합이 가능하므로 알파벳 대문자와 소문자, 숫자, 특수문자, 제어신호용 숫자 등을 표시할 수 있다. 여기서 각 문자를 7bit의 2진 디지트로 쓰게 되기 때문에 2개의 16진 디지트를 사용해서 7bit코드를 표시하는 16진 형태의 사용방법이 훨씬 쉽다. 다시 말하면 알파뉴메릭 데이터는 8bit word(혹은 byte), 혹은 2디지트의 16진 word로 저장되어질 수 있다. 컴퓨터 기억장치에서 취급되는 알파뉴메릭 문자는 2개의 16진 디지트로 표시되어진다. 하한(lowest)의 4bit는 디지트 0에서 9까지의 BCD코드 형태로 선택되는 것이 적당하다. 잘라진 상한(higher)의 4bit는 컴퓨터에서 10진 디지트를 표시하는 BCD 형태로만 저장되어진다.만약 표준 워드 길이가 8bit로 표시된다면 컴퓨터는 한 개의 워드에서 4bit BCD 디지트 2개를 묶어서 내부적으로 10진수를 취급할 수 있다. 이런 동작을 Packing이라고 부르며 각 word는 보통 단일 값 이상으로 취급되어진다. 아래의 표에는 10진수와 알파벳 문자, 특수문자 등에 대한 16진수, 8진수, 2진수의 ASCII 코드값이 나타나 있다.2. UNICODE유니코드는 국제 표준화 기구는 아니지만 컴퓨터 관련 업계를 중심으로 다국어 언어를 효율적으로 처리하기 위하여 1989년 컨소시엄 형태로 서립된 회사이다. 유니코드 1.0은 1991년 말에 발표되었는데, 여기서 한글 코드는 KSC 5601-1987 완성형 코드만을 포함시켰기 때문에 다소 불편하였으나 1995년에 발표된 유니완성형이라고 불리는 유니코드 2.0에서는 1.0과는 다르게 일정한 조합 규칙을 반영하고 있어서 사용하기에 편리한 장점이 있다. 현재는 유니코드 2.1이 최종 버전으로 발표되었으며 한국에서는 유니코드 2.0이 발표되자마자 KSC5700이라는 이름으로 유니코드 2.0을 국가 표준 코드로 채택하였다.우선 유니코드는 기존의 ASCII코드, KS완성형, 조합형(상용, 표준) 코드와는 근본적으로 다른 코드 체계를 갖고 있다. 단지 물리적으로 코드를 배정했다는 차원에서는 비슷하지만 언어학, 디자인, 공학, 서체 등등 제반 학문적인 원리를 바탕으로 코드를 배정했기 때문에 이런 원리를 이해해야만 유니코드에서 한글 처리 원리를 이해할 수 있다. 실제로 유니코드에서 사용한 원리는 여러 가지가 있지만 한글 처리에 관계된 중요한 부분만 간추리면 다음과 같다.16비트 크기라는 것은 한 문자를 표현하기 위해 16비트(2바이트) 크기를 사용한다는 것이다.의미적인 지식을 요구하는 파싱(parsing), 정렬(sorting), 기타 알고리즘에서 사용되는 의미론적 지식을 수용한다.글쓰기 방향과 관계된 논리적 순서는 왼쪽에서 오른쪽, 오른쪽에서 왼쪽으로, 위쪽에서 아래쪽으로 사용할 때 별도의 해석 정보를 줄 수 있다.단일화는 같은 문자를 한 번만 지정하는 원리로 한국, 중국, 일본, 대만 등에서 주로 사용하는 한자는 형태는 같을지라도 음이 다르거나 각각 처리하는 방식이 다르기 때문에 통일시키는 것이다.동등 연속은 한 예로 유니완성형 '각 (oxac01)'자는 유니조합형으로 풀어쓴 ‘ㄱ(ox1100)'+'ㅏ(ox1161)'+'ㄱ(ox11a8)'과 같이 해석한다는 뜻이다.코드 배정은 크게 8개의 영역으로 나뉘어져 있다. 또한 8개 영역은 각각 일반문자영역(General Scripts), 심볼영역(Symbols), CJK 음성 및 심볼 영역(CJK Phonetics and Symbols), CJK 한자영역(CJK Ideographs), 한글 유니완성형 영역(Hangul), 대용영역(Surrogate), 사적사용영역(Private Use), 호환 및 특별영역(Compatibility) 등으로 부른다.마지막으로 한글의 경우 유니코드에서는 완성형(유니완성형)과 조합형(유니조합형) 두 가지 모두 처리할 수 있도록 되어 있는데, 현대 한글 11,172자는 완성형처럼 미리 조합했다는 뜻으로 완성형(유니완성형)이라고 하고, 초성 90자, 중성 66자, 종성 82자, 채움 2자 등 모두 240자의 자모로 조합할 수 있도록 했기 때문에 조합형(유니조합형)이라고도 부른다.
Unit 4. Sampling & Aliasing ID Name ProblemUnit 4. Sampling & Aliasing ID Name ResultsConvert telephone keypad tones to digital signal with various sampling rate: 8kHz, 4kHz, 2kHz and 1kHz.1. sampling rate : 8kHz2. sampling rate : 4kHz% 위의 코드에서 load('keytone1_4000Hz')으로 수정해 주면 된다.3. sampling rate : 2kHz% 위의 코드에서 load('keytone1_2000Hz')으로 수정해 주면 된다.4. sampling rate : 1kHz% 위의 코드에서 load('keytone1_1000Hz')으로 수정해 주면 된다.Transform digital signals to Fourier spectra.Plot digital signals and their Fourier spectra.1. sampling rate : 8kHz2. sampling rate : 4kHz3. sampling rate : 2kHz4. sampling rate : 1kHzMatlab에 있는 load라는 함수를 사용하여 4개의 주파수의 파일을 열어 time domain에서의 그래프와 frequency domain에서의 그래프를 plot시켜 비교해 볼 수 있었다. 각각의 주파수에 따른 그래프를 보게 되면 sampling rate가 작아질수록 그래프가 촘촘하지 못하고 듬성듬성해지는 것을 볼 수 있는데 이것으로부터 sampling rate가 낮아질수록 그래프의 밀도가 낮아지고, 원래의 signal 형태에서 점점 멀어지고 있다는 것을 알 수 있다.그리고 위의 코드에서는 내가 원하는 1개의 keytone을 선택하여 4개의 주파수(8,4,2,1kHz)에 대해 time domain과 frequency domain으로 나누어 plot을 띄웠지만 다른 keytone들에 대해서 조사하기에는 parameter들을 계속 바꾸어 주어야 하는 어려움이 있다. 그래서 다른 keytone들에 대해서 조사하기 편하게 하기 위해 아래와 같이 코드를 다시 작성해 보았다.위의 부분에서 key값은 내가 원하는 숫자나 문자를 입력해주면 되고, 원하는 주파수는 cont1에 그리고 원하는 domain은 cont2에 입력하여 아래의 코드가 실행되도록 한다.Load할 파일명들을 일일이 바꾸어주지 않아도 되도록 문자열을 합쳐주는 strcat을 이용하여 temp에 저장시켜 temp를 로드하도록 만들었다.Frequency가 y축에 대하여 대칭이므로 양의 주파수단의 값만을 가지고 아래와 같이 max 함수를 이용하여 max값을 찾는다. Max에 해당되는 주파수를 찾으면 max값 주위 일정 범위를 0으로 처리해 주었다.같은 시행을 2번 더 반복하여 Max2, Max3 값을 구한다.위의 코드를 실행한 결과값은 다음과 같다.Time DomainFrequency Domain8KHZ4KHZ2KHZ1KHzDescribe aliasing based on Fourier spectra위의 그래프에서 각각의 Max1,2,3에 대한 주파수 값을 찾아보면 다음과 같다.(이 값들의 위의 Matlab 코드에서 firstMax1, secondMax1, thirdMax1에 해당한다.)1st sig(Hz)2nd sig(Hz)3rd sig(Hz)8000Hz6069612044000Hz6069612042000Hz606967981000Hz60306204위의 표를 보게 되면 1번 버튼을 눌렀을 때 얻는 주파수는 60Hz, 696Hz, 1204Hz임을 알 수 있고, 1000Hz와 2000Hz로 sampling 되었을 때를 제외하고는 아래의 표와 거의 일치하는 것을 볼 수 있다.조금 더 자세히 살펴보면 8000Hz와 4000Hz일 경우에는 두 주파수 값이 697Hz와 1209Hz에 거의 근사함을 알 수 있다. Maximum 오차가 5Hz일 정도로 정확한 주파수를 찾아내어 Aliasing없이 sampling된 것을 확인할 수 있다. 하지만 2000Hz인 경우에는 하나의 주파수는 Aliasing 없이 sampling되었으나 1209Hz 신호는 Aliasing이 발생하여 원래의 주파수가 아닌 다른 주파수로 변환된 것을 볼 수 있다. 마찬가지로 1000Hz sampling의 경우에는 두 개의 주파수가 모두 Aliasing이 발생하여 원래의 주파수가 아닌 다른 주파수로 변환된 것을 확인할 수 있다.What number is the provided keytone? (find automatically)1. keytone_what키톤을 로드한 후 위에서 작성한 코드의 과정을 거친 후, 아래 if문을 통해 max 주파수 값들이 어디에 해당되는지를 찾아 어떤 숫자인지를 자동적으로 찾도록 한다.이 과정을 수행하게 되면 Max값들의 주파수 값을 확인해 볼 수 있을 뿐 아니라 command 창에 keytone_what이 어떤 숫자인지 출력된다.2. keytone_is같은 방식으로 키톤을 로드한 후 위에서 작성한 코드의 과정을 거친 후, if문을 통해 max 주파수 값들이 어디에 해당되는지를 찾아 어떤 숫자인지를 자동적으로 찾도록 한다.3. keytone_it같은 방식으로 키톤을 로드한 후 위에서 작성한 코드의 과정을 거친 후, if문을 통해 max 주파수 값들이 어디에 해당되는지를 찾아 어떤 숫자인지를 자동적으로 찾도록 한다.What is the small peak appeared in frequency domain of key tone signal?그래프의 출력 결과 값들을 비교하다 보면 원래 keytone의 두 개의 주파수 이외의 다른 주파수 성분 하나가 더 있다는 것을 볼 수 있다. 내가 선택한 keypad 1뿐만 아니라 다른 경우에서도 60Hz의 noise가 생기게 되는데 이 noise는 ‘Hum noise’라고 하여 우리 나라의 사용 전압입력이 대부분 220V에 60Hz를 갖기 때문에 keytone에 함께 포함된 것이다. 그렇기에 우리가 분석할 땐 3개의 frequency 성분이 생긴 것이다. 그래서 이것을 제거하기 위해서는 필터를 사용하는 것이 좋은데 여기에 가장 적합한 필터는 Notch 필터나 Bandstop 필터이다.Unit 4. Sampling & Aliasing ID Name Discussions이번 프로젝트는 phoned이 갖는 button들이 갖는 신호를 이용하여 sampling을 통하여 어떤 sampling rate가 좋고 나쁜지를 확인하고 Fourier transform을 이용하여 frequency spectrum을 확인하여 어떤 성분들이 각각의 button에 포함되어 있는지를 확인하는 것이다.1번 문제의 경우에는 8kHz, 4kHz, 2kHz, 1kHz로 sampling하는 것이었는데 이 keytone들을 sampling하는 것은 이미 조교님께서 sampling되어 있는 file들을 올려주셨기 때문에 직접 sampling은 하지 않아도 되고, matlab으로 주어진 신호들이 어떠한 형태인지 load하여 확인해 보기만 하면 되는 것이었다. 처음에는 실습 시간에 조교님과 함께 하였던 코드를 이용하여 time domain과 frequency domain을 살펴보았지만 다른 keytone들을 분석함에 있어 코드의 parameter 부분을 계속 바꾸어 주어야 하는 어려움이 있었다. 그래서 다른 keytone들에 대해서 조사하기 편하게 하기 위해 다시 코드를 작성하여 분석하였다. 이 코드 또한 keypad의 번호와 어떠한 주파수에서 분석할 것인지에 대한 것은 수기로 바꾸어 주어야 하지만 기존의 코드보다는 조금 수월하게 과제를 해결할 수 있었다. 먼저 time domain에서 4개의 주파수들의 plot들을 비교해보면 sampling 비율이 낮으면 낮을수록 그래프가 촘촘하지 못하고 듬성듬성 해지는 것을 볼 수 있다. 이것으로부터 sampling rate가 낮아질수록 그래프의 밀도가 낮아지고, 원래의 signal 형태에서 점점 멀어지고 있다는 것을 확인할 수 있다. 그리고 이 sampled 신호를 FFT를 이용하여 frequency spectrum에서도 분석해보고 이를 이용하여 각각의 button들이 어떠한 성분을 가지는지 살펴보았다. 그래프의 출력 결과를 보게 되면 3개의 peak 점들을 가지는 것을 볼 수 있다. 이 중 하나의 주파수는 60Hz인데 이것은 뒷부분에서 논의하도록 하고 나머지 두 성분들에 대해서만 분석해 보았다.먼저 1번 button은 1209Hz와 697Hz 이렇게 2가지 주파수 성분을 가지고 있어야 한다. 먼저 내가 plot한 2000Hz를 분석하게 되면 696와 798Hz의 성분을 갖는 것을 볼 수 있다. 696Hz의 경우에는 Nyquist sampling rate를 만족하며 해당 값을 확실하게 보이고 있지만 1204Hz에 대한 성분은 살펴볼 수 없이 798Hz라는 엉뚱한 주파수를 보이고 있다. 이는 1204Hz에 대하여 2000Hz의 sampling rate는 본 신호의 정보를 제대로 포함할 수 없음을 보여주고 있으며 Nyquist sampling rate에 해당하지 않는 sampling frequency라고 할 수 있다. 따라서 798Hz는 본래의 original frequency가 아닌 Aliasing이 발생한 것으로 볼 수 있다. 그럼 이 Aliasing에 대해 조금 더 자세히 살펴보면 우리는 수업시간에 s
Project 2 : Noise removalIDNameProblemProject 2 : Noise removalIDNameResults< Problem >- Remove white and pure noise as much as possible.먼저 프로젝트를 진행하기에 앞서 CatchHer.mat을 load하게 되면 ywhite noise가 1부터 10까지 섞인 신호가 들어오게 된다. 여기서 Noise는 white noise와 pure tone noise 두 가지 종류가 있는데 이 두 가지 noise를 가능한 한 많이 제거하는 것이 이 프로젝트의 목적이다. 처음에는 noise마다 각 필터를 만들어 하나씩 제거하려고 하였지만 그러기에는 필터를 10개나 만들어야 되는 어려움도 있고, 시간도 오래 걸리고, 비효율적이다. 그래서 noise들을 모두 다 더해 10으로 나눈 평균값 즉, noise average를 이용하여 프로젝트를 수행하였다.첫 번째로 모든 주파수에 일정하게 나타나는 white noise를 제거하기 위해 실습 시간에 배웠던 Moving average filter를 사용하였다. (Moving average filter는 Low pass filter의 일종이다) 그리고 high frequency 부분에 있는 존재하는 pure tone noise는 butter worth low pass filter를 이용하여 제거하였다. Butterworth를 구현하는 방법에는 아래와 같은 수식을 이용하는 방법과 MATLAB에 있는 function을 이용하는 두 가지 방법이 있다. 이 두 가지 방법을 각각 이용하여(다른 m파일로 저장) noise를 제거하였다.LPF 수식(시간도메인상에서 계산) 여기서 x(t)는 LPF의 입력신호이고, y(t)는 출력 신호이다.< Matlab Source Code & Method#1 >close all; clear all; clc;%% Noised File Loadload CatchHer.mat%% Original Music 'TakeHer(ts/(RC+ts))*filtered_y(i-1);end% lpf를 이용한 noise remval music을 frequency domain으로 변한lpf_N = 2^nextpow2(length(lpf_y));[lpf_X lpf_f] = ComputeSpectrum(lpf_y,Fs,lpf_N);subplot(2,2,4),plot(lpf_f,lpf_X); grid on;title('TakeHer(remove pure-tone noise)'); xlabel('Frequency (Hz)'); ylabel('|lpfiltered_ X(f)|');% soundsc(lpf_y,Fs);%% Result of the time Domain plotst=1:220500; % t=1:size(yCut)figure,subplot(2,2,1),plot(t,yCut); grid on;title('TakeHer(Original)'); xlabel('Time'); ylabel('|y(t)|'); axis([0 2.5*10^5 -1 1])subplot(2,2,2),plot(t, ywhite); grid on;title('TakeHer(Noised)'); xlabel('Time'); ylabel('|Noised_ y(t)|'); axis([0 2.5*10^5 -1 1])subplot(2,2,3),plot(t, filtered_y); grid on;title('TakeHer(remove white noise only)'); xlabel('Time'); ylabel('|Filtered_ y(t)|'); axis([0 2.5*10^5 -1 1])subplot(2,2,4),plot(t, lpf_y); grid on;title('TakeHer(remove pure-tone noise)'); xlabel('Time'); ylabel('|lpfiltered_ y(t)|'); axis([0 2.5*10^5 -1 1])%% Make the wav filewavwrite(lpf_y,Fs,'C:UsersL곡은 발생하지만 원신호가 상당부분 표현되는 것을 볼 수 있다. 이는 첫째로 RC자체의 값이 상당히 낮은 값이기 때문에 Transition band 폭이 매우 넓어서 RC값을 올려준다고 해도 Transition band가 높기 때문이고, 둘째는 포함된 원신호에 상대적으로 고주파 성분이 많지 않아서 RC값을 높여주어도 원신호에는 큰 영향을 주지 않았기 때문이다.최종적으로 noise가 제거된 신호의 주파수 특성은 아래와 같다. 아랫 부분에 존재하던 white noise들과 고주파 영역에 존재하던 tone noise들이 모두 제거됨 알 수 있었지만 다만 아쉬운 점은 원 신호 부분도 filter에 의해 조금은 제거되어 원래의 음질보다는 안 좋아 지는 것 또한 확인할 수 있다.이로써 첫 번째 방법에 의해 두 가지 noise들을 모두 제거할 수 있었다. 주파수 영역과 시간 영역의 결과는 아래와 같다.1. 주파수 영역(Frequency Domain)에서의 결과2. 시간 영역(Time Domain)에서의 결과시간 영역에서의 결과 그래프를 보게 되면 원신호에 비해 결과 신호가 많이 가는 것을 확인할 수 있다. 이는 RC값에 의해 원 신호가 많이 감소된 것으로 RC값을 작게 함으로 Bandwidth 크기를 크게 하여 신호의 amplitude를 크게 할 수는 있지만 그러면 noise가 제거되는 양이 작아져 pure tone noise가 완벽히 제거되지 못하고 남아있게 된다. 그래서 0.001이라는 값을 선택하였고, 이는 신호의 크기는 작지만 원래의 모양과 비슷한 것으로 보아 음악을 듣는 데에는 무리가 없을 것으로 생각된다.< Matlab Source Code & Method#2 >앞 부분의 코드는 위와 동일하고 다만 pure tone noise를 제거하는 부분에 있어 이번에는 수식으로 구현하는 것이 아니라 Butterworth Filter를 이용하여 구현하였다.%% Remove Pure_tone noise% 2. Using Butterworth Filter to remove hig,7,10 이런식으로 숫자를 바꾸어 가며 해 보았는데 7이 가장 적당한 것 같아 이 값으로 설정하여 코드를 돌려보았다. N이 7인 Butterworth filter의 모양은 아래와 같다.최종적으로 noise가 제거된 신호의 주파수 특성은 아래와 같다. 아랫 부분에 존재하던 white noise들과 고주파 영역에 존재하던 tone noise들이 모두 제거됨 알 수 있었다.이로써 두 번째 방법에 의해 두 가지 noise들을 모두 제거할 수 있었다. 주파수 영역과 시간 영역의 결과는 아래와 같다.1. 주파수 영역(Frequency Domain)에서의 결과2. 시간 영역(Time Domain)에서의 결과시간 영역에서의 결과 그래프를 보게 되면 첫 번째 위에서 수행했던 그래프와는 다르게 원신호와 거의 유사함을 확인할 수 있다.< Matlab Source Code & Method#3 >%% Remove Pure_tone noise% Using Butterworth Filter to remove high-frequency noiseFc=3800; % set cut-off Frequencyw=Fc/(2*Fs);[b,a]=butter(7,w,'low'); % generate butterworth filter[butter_h,w]=freqz(b,a,N);butter_y=filter(b,a,ywhite);butter_N=2^nextpow2(length(butter_y));[butter_X f]=ComputeSpectrum(butter_y,Fs,butter_N);subplot(2,2,3),plot(f,butter_X); grid on;title('TakeHer(remove pure-tone noise)'); xlabel('Frequency (Hz)'); ylabel('lButter_ X(f)l');%% Remove ywhite_Noise% Using 'Moving_average filter' to remove 'white noise'windowSize=5;filtered_y=fil는 pure tone noise 뿐만 아니라 모든 주파수에 일정하게 나타나는 white noise까지도 말끔하게 제거되는 것을 볼 수 있다. 여기서 다시 한 번 LPF를 돌릴 필요는 없겠지만 한 번 더 돌려서 결과를 확인해 보았다.그래프를 확인해 볼 결과 두 결과에 별다른 차이가 없는 것을 확인할 수 있었다. 이를 통해 Butter worth filter가 더 많은 영역의 noise들을 제거해 주는 것을 알 수 있었다. 결과적으로 세 번째 방법에 의해 두 가지 noise들을 모두 제거할 수 있었다. 주파수 영역과 시간 영역의 결과는 아래와 같다.1. 주파수 영역(Frequency Domain)에서의 결과2. 시간 영역(Time Domain)에서의 결과시간 영역에서의 결과 그래프를 보게 되면 첫 번째 위에서 수행했던 그래프와는 다르게 원신호와 거의 유사함을 확인할 수 있다. 그리고 위의 그래프에서 세 번째와 네 번째가 거의 흡사한 것 또한 알 수 있다.Project 2 : Noise removalIDNameDiscussions이번 프로젝트는 음원 파일에 존재하는 white noise와 pure tone noise를 제거하는 것으로 각 noise마다 해결하는 방법을 찾고 음악 파일을 원본과 가깝게 만드는 것이었습니다.먼저 프로젝트를 진행하기에 앞서 CatchHer.mat을 load하게 되면 ywhite noise가 1부터 10까지 섞인 신호가 들어오게 됩니다. 여기서 Noise는 크게 white noise와 pure tone noise 두 가지 종류가 있는데 이 두 가지 noise를 가능한 한 많이 제거하는 것이 이 프로젝트의 목적이었습니다. 처음에는 noise마다 각 필터를 만들어 하나씩 제거하려고 하였지만 그러기에는 필터를 10개나 만들어야 되는 어려움도 있고, 시간도 오래 걸리고, 비효율적이다. 그래서 noise들을 모두 다 더해 10으로 나눈 평균값 즉, noise average를 이용하여 프로젝트를 수행하였습니다.첫 번째 방법으로 모든 주파수에 일정하게
Unit 2. Discrete-time Signals ID Name Problem(Problem 1)Determine and plot the following sequences.HintsThe sequence x(n) is nonzero over 2 n 10. Hence>> n = -2:10; x = [1:7,6:-1:1];The first part is obtained by shifting x(n) by 5 and the second part by shifting x(n) by -4. This shifting and the addition can be easily done using the sigshift and the sigadd function.The first term can be written as x((n 3)). Hence it is obtained by first folding x(n) and then shifting the result by 3. The second part is a multiplication of x(n) and then x(n 2) , both of which have the same length but different support (or sample positions). These operations can be easily done using the sigfold and the sigmult functions.Unit 2. Discrete-time Signals ID Name Results1. (a) x1(n) = 2x(n-5)-3x(n+4)2. (b) x2(n) = 2x(3-n)+x(n)x(n-2)Unit 2. Discrete-time Signals ID Name Problem(Problem 2)a) Prove the above result.b) Generate and plot cos(0.3(n 1)) , 20 n 20. Is this sequence periodic? If it is, what is its fundamental period? From the examination of the plot what interpretation can you give to the integers k and N above?c) Generate and plot cos(0.3n) , 20 n 20. Is this sequence periodic? What do you conclude from the plot? If necessary examine the values of the sequence in MATLAB to arrive at your answer.Unit 2. Discrete-time Signals ID Name Results2. (a)2. (b) cos(0.3(n+1)) , -20≤n≤20위의 함수 y=cos(0.3(n+1))는 그래프에서도 확인해 볼 수 있듯이 주기함수이다. (a)에서 증명한 내용을 바탕으로 F와 k, N(주기)를 계산해 보면 cos(0.3(n+1))=cos(2n*(3/20)+0.3)이므로 F는 3/20이고 k는 3, N은 20임을 알 수 있다. 그래프 상에서 x와 y값들을 하나씩 확인해 볼 수가 있는데 x=-5에서의 y값 -0.80902가 x=15에서 다시 반복됨을 볼 수 있었다.그 다음 값인 x=-4에서의 y값은 x=16에서 반복되었다. 따라서 이 함수는 주기가 20인 cosine 그래프임을 수식적으로도 그리고 그래프상으로도 확인해 볼 수 있다.2. (c) cos(0.3n) , -20≤n≤20위의 함수 y=cos(0.3n)은 첫 번째 cosine함수와는 달리 그래프에서 주기함수임을 확인해 볼 수 없었다. 하지만 수식적으로 cos(0.3n)=cos(2n*(3/20))이므로 F는 3/20이고 k는 3, N은 20임으로 주기함수가 아님을 알 수 있다. 그렇지만 위의 그래프의 x 값은 -20에서 20까지로 20보다 작아 주기함수인지 아닌지를 알 수 없었다.stem으로 그래프를 띄어 보니 육안으로 보기에는 주기함수일 것은 생각이 들어 값들을 하나씩 확인하면서 이 그래프상에서 주기함수가 되는지, 된다면 주기가 몇인지 찾으려고 해 보았다.( 그래프상에서 주기가 20이 아님을 확인 할 수 있다.( 그래프상에서 주기가 40인 것 같지만 x=20 이후의 값을 알 수 없으므로 주기함수인지 아닌지 알 수 없다.따라서 이 cosine 그래프는 수식으로만 주기함수가 아님을 확인 해 볼 수 있었다.Unit 2. Discrete-time Signals ID Name Discussions책으로만 배우던 discrete-time signals에 대한 여러 가지 함수들을 직접 MATLAB을 활용하여 그래프 상으로 나타내어보고, 이를 이용하여 과제를 수행하였다. Unit sample sequence, unit step sequence, sinusoidal sequence 등 많은 함수들을 그래프로 그릴 때 내가 코드를 짜는 것이 아니라 짜인 함수들을 불러와 사용하는 것이었기에 큰 어려움은 없었다. 또한 각각의 함수들이 어떠한 방법으로 돌아가는지는 코드를 확인해보며 이해하였다.첫 번째 문제의 (a)는 x[n] 함수를 왼쪽과 오른쪽으로 각각 shift시키고, shift 시킨 함수들에 대해 정수 배를 한 후 더해주는 것이었다. sigshift와 sigadd 함수가 이미 주어져 있었기에 변수의 자리에 알맞은 값들을 넣어주어 쉽게 해결할 수 있었다. (b)도 마찬가지로 대칭 function인 sigfold와 두 함수를 곱해주는 sigmult를 이용하여 해결하였다. 이 두 문제들은 간단하였기에 내가 직접 풀어본 후 컴퓨터상의 값들과 비교해보았다. 왼쪽과 오른쪽으로 shift시키는 것이 조금은 헷갈렸지만 두 개의 답이 일치하는 것을 확인할 수 있었다.두 번째 문제는 exponential sequence와 sinusoidal sequence의 주기성에 대해 살펴보는 문제였다. (a)는 이론시간에 배운 것을 토대로 하여 exponential과 sinusoidal sequence의 F, k, N의 관계에 대해 증명할 수 있었고, 이 세 개의 값들을 통해 그래프를 해석할 수 있었다. (b) 함수는 주기함수로 수식적으로 그리고 그래프상으로 쉽게 확인 할 수 있었다. 처음엔 plot을 이용하여 그래프를 그렸는데 y값들이 이어져 나타나다 보니 주기를 해석하기가 어려워 stem을 이용하여 그래프를 그려 해석하였다. x값에 대한 y의 값들을 하나씩 확인해 보면서 수식적으로 푼 주기와 같음을 알 수 있었다. 그리고 (c)는 N의 값이 무리수이다 보니 수식적으로 주기함수가 아님을 쉽게 알 수 있었다. 하지만 x축이 정수인 index에서 값을 찾기 힘들었고, 그래프 상의 x의 범위가 -20에서부터 20까지밖에 되지 않아 그래프 상에선 주기함수인지 아닌지조차 알기 힘들었다.
Unit 3. Discrete-time System ID Name Problem 1Unit 3. Discrete-time System ID Name Results1. Determine x(n)*x(n) analytically2. Using the filter function, determine the first 50 samples of x(n)*x(n).1(a)수식적으로 푼 convolution 식을 matlab에서 conv_m() function을 이용하여 그래프 상으로 구현한 것이다.1(b)Matlab에 있는 filter() function을 이용하여 x(n)*x(n)을 계산한 것이다.Variable의 값을 확인하여 (a)에서 계산했던 값과 비교해보면 두 개의 출력 값은 일치하는 것을 확인할 수 있다.Unit 3. Discrete-time System ID Name Problem 2Unit 3. Discrete-time System ID Name ResultsConvolution 계산321Convolution 값43213*1=343213*2+2*1=843213*3+2*2+1*1=1443213*4+2*3+1*2=2043212*4+1*3=1143211*4=4< Matlab Source Code Problem #2(a)>2. (a) Determine the linear convolution y(n)=h(n)*x(n)321Convolution 값43213*1=343213*2+2*1=84323*3+2*2+1*1=1443213*4+2*3+1*2=2043212*4+1*3=1143211*4=4위의 convolution 계산 값을 조금 더 자세히 적어보면 다음과 같음을 알 수 있다.3*1 = (3*1) + (0*2) + (0*3) + (0*4) = 33*2+2*1 = (2*1) + (3*2) + (0*3) + (0*4) = 83*3+2*2+1*1 = (1*1) + (2*2) + (3*3) + (0*4) = 143*4+2*3+1*2 = (0*1) + (1*2) + (2*3) + (3*4) = 202*4+1*3 = (0*1) + (0*2) + (1*3) + (2*4) = 111*4 = (0*1) + (0*2) + (0*3) + (1*4) = 4따라서 x(n)을 transpose시킨 후 결과값과 매치 시켜보면 H행렬을 구할 수 있다.H = [3 0 0 0; 2 3 0 0 ; 1 2 3 0; 0 1 2 3; 0 0 1 2; 0 0 0 1]2. (b) H값을 지정한 후 x와 y, H의 행렬 값 확인* =위의 행렬과 같이 대각선의 원소 값들이 같은 행렬을 Toeplitz 행렬이라고 한다. H 행렬을 위의 행렬에 match시켜 보면 H 행렬 또한 대각선 성분들이 같음을 알 수 있다. 따라서 H는 Toeplitz 행렬이라 할 수 있다.그리고 Time-invariance는 시간이 지연되더라도 결과값에는 변화가 없다는 내용인데, 만약 x가 지연이 되어 0의 값이 추가된다 하더라도 x(n)에 계산되는 값은 1,2,3,4이므로 지연이 된다 하더라도 결과값은 같다는 것을 알 수 있다. 따라서 time-invariance함을 확인할 수 있다.위의 H 행렬을 보게 되면 first column은 [3 2 1 0 0 0]’ 이고, first row는 [3 0 0 0]임을 알 수 있다. First row는 convolution을 할 때 처음 h[n]을 반전시킨 h[-n]의 마지막 네 개의 항이고, first column은 h[n]의 처음 세 개의 항 뒷부분에 zero-padding과 같이 0을 세 개 추가시킨 것이다.Unit 3. Discrete-time System ID Name Problem 3Unit 3. Discrete-time System ID Name Resultsa) Using toeplitz functionb) Make toeplitz function강의노트에 있는 행렬을 보고 toeplitz 행렬을 만들어 보았는데 toeplitz 행렬을 사용한 것과 같은 값이 나오는 것을 확인할 수 있다. 이중 for문을 사용하여 H 값이 적어서 그것보다 높아졌을 때는 0의 값을 그리고 다음 열로 갔을 때에는 행들이 하나씩 밀리도록 하여 구현하였다.Problem 2-d에서 구한 y,H 행렬과 problem 3-a에서 구한 y,H값이 같음을 확인할 수 있다.Unit 3. Discrete-time System ID Name Discussions책으로만 배우던 discrete-time system에 대한 여러 가지 함수들을 직접 MATLAB을 활용하여 그래프 상으로 나타내어보고, 이를 이용하여 과제를 수행하였다. Unit step sequence, Convolution, Toeplitz function 등 많은 함수들을 사용할 때 내가 코드를 짜는 것이 아니라 짜인 함수들을 불러와 사용하는 것이었기에 큰 어려움은 없었다. 하지만 비교를 위해 내가 직접 함수를 짤 때에는 생각보다 시간이 많이 걸렸다. 또한 각각의 함수들이 어떠한 방법으로 돌아가는지는 정의된 함수의 코드를 확인해보며 이해하였다.첫 번째 문제의 (a)는 수식적으로 convolution을 계산해보고 그것을 Matlab 상에서 conv_m function을 이용하여 코드로 구현해 보는 것이었다. 그리고 (b)는 이미 만들어져 있는 filter function을 이용하여 (a)에서 구한 것과 비교해 보는 것이었다. Stem을 이용하여 그래프를 확인해 보았는데 50개의 sample 들의 값이 모두 같음을 확인할 수 있었다. 간단한 문제였기에 어렵지 않게 해결할 수 있었다.두 번째 문제의 (a)는 linear convolution y(n)을 계산해 보는 것이었다. 첫 번째 문제와 마찬가지로 수식적으로 그리고 matlab을 이용하는 두 가지 방법으로 계산해보았다. 두 값이 일치함을 쉽게 알 수 있었고, (b)는 (a)에서 계산한 convolution의 transpose를 이용하여 match되는 H matrix를 찾을 수 있었다. 찾은 H가 맞는지를 확인해 보기 위해 matlab을 이용하여 y=Hx를 계산해 보았는데 y의 값이 일치하여 내가 찾은 H가 맞음을 알 수 있었다. (c)와 (d)는 이 H matrix를 분석하는 문제였는데 H 행렬은 대각선의 성분들이 같으므로 Toeplitz 행렬이라고 할 수 있고, Time-invariance한다고도 말할 수 있다. 왜냐하면 만약 x가 지연이 되어 0의 값이 추가된다 하더라도 x(n)에 계산되는 값은 1,2,3,4이므로, 지연이 된다 하더라도 결과값은 같기에 time-invariance함을 확인할 수 있다.