01_mfc를 이용한 신호의 파형출력
C++/신호처리 프로젝트 mfc.ver

01_mfc를 이용한 신호의 파형출력

728x90

- Sin,Cos,Sinc 등 그래프들을 mfc를 이용하여 그리고 sampling time, 양자화, 데이터 개수 등의 개념을 이해한다.

 

문제 1
문제 설명
Sa(t) Sinc(t) 0일 때 어떻게 되는지 설명하고 프로그램 상에서 구현할 때 어떻게 되는지 설명하시오



이론전개






로피탈 성질을 이용하면 이론적으로 sin(t)Sa(t)함수의 0일때의 값을 알 수 있다.



하지만 프로그램상에서 이를 컴퓨터로 계산하면 아래와 같은 답이 나온다.




왼쪽 값은 sinc함수의 값을 직접 뽑아내는 코드를 입력하여 해본 값이다. 0일때의 값은 완전히 나오지 않는다는 것을 알 수 있다. , 프로그램상에서 이를 구현하기 위해서는 임의로 0일때의 값을 넣어주던지, sampling time을 작게 잡아서 촘촘하게 추출해내는 방법이 있다.









프로그램 source




sincsa 함수의 값을 넣어주는 부분을 Gen_signal 부분에 첨가하였습니다.


 

각각 view클래스에서 sincsa 함수를 그리기 위해서 구현해 보았습니다.








onDraw함수에서 SincSa를 각각 1번라인, 2번라인에 나오게 설정하였습니다.









결과 분석


여기서 Sinc 함수는 주기로 출력하였지만 Sa함수는 주기생각없이 1,2,3,4가 나오게 출력하였다. 두 그래프 모두 0에서 정상적인 값이 나오지 않아 값이 출력되지 않는 것을 알 수 있다. 디지털에서 위함수들을 정상적으로 출력하기 위해서
 

다음과 같이 0일 때 값을 넣어주었다.






정상적으로 그래프가 출력됨을 알 수 있다.

 

 

 

문제 2
문제 설명
서브루틴을 이용하여 그래프를 만드는 함수를 만드시오.



이론전개


위 문제 1번에서 sinc 함수와 Sa함수를 그리는 서브루틴을 만든것과 같은 과정으로 sin, cos을 그리는 함수를 그리고 신호발생 개수와 Sampling Time을 조절해가면서 비교해 보았습니다.

프로그램 source





sin, cos을 그리는 함수에는 매개변수로 주파수도 받을 수 있게 추가로 설정하였습니다.
결과 분석




OnDraw함수에서 위와같이 실행하였을 때 다음과 같은 결과가 출력됩니다.



순서대로 위에서부터 sin 1Hz, sin 2Hz, cos1Hz가 출력되는 것을 알 수 있습니다. 이때 샘플링 타임은 10, 데이터 수는 1024개입니다.





sampling time10에서 1로 줄인 모습입니다. 모든 부분에서 다 샘플링을 하기 때문에 보다 촘촘히 나오게 됩니다.




이번엔 sin의 데이터 개수를 512개로 줄여보았습니다. 데이터 개수가 줄어들자, 한 주기가 512개로 설정되고 sampling 개수는 그대로라 한주기에 sampling되는 점의 숫자는 결국 줄어든 모습입니다. sampling time이 줄어들수록 샘플링하는 점이 많아지고, data개수가 늘어날수록 한주기에서 샘플링하는 점이 많아지는 것처럼 보이게 됩니다.







 

문제 3
문제 설명
한주기가 끝날 때 왜 1초이고 , 샘플링되는 점간의 sampling time이 무엇인지, 양자화가 무엇인지 설명하시오.



이론전개
현실(아날로그) 상황에서는 1초에 2번의 주기가 지나가면 2Hz, 100번 지나가면 100Hz인 식으로 주기(Hz)가 정해집니다. 하지만 디지털에서는 절대적인 시간이 없습니다. 512개의 점이 지나갈 때 1초라고 생각할 수도 있고, 1024개의 점이 지나갈 때 1초라고 생각할 수도 있습니다. 이 경우, 프로그램을 짜는 사람이 임의대로 1초를 지정할 수 있게 됩니다. 512개의 점을 1초라고 생각하고 싶은 경우 데이터 개수를 512로 잡고, 1024개의 점을 1초라고 생각하고 싶은 경우 데이터 개수를 1024개로 잡으면 됩니다.







위 그래프는 sampling time10, 데이터 개수를 512개로 잡은 그래프입니다. 5121초라고 생각했고 1주기를 돌았기에 위 그래프는 sin 1Hz그래프라고 생각할 수 있습니다. 만약 데이터의 개수를 1024개로 잡았는데 위와 같이 512점째에 한주기가 끝난다면, 같은 그래프이더라도 위 그래프는 sin 2Hz그래프가 됩니다.




sampling time 은 아날로그신호를 디지털 신호로 변환하기위해 필요한 개념입니다. 연속적인 아날로그 신호를 비 연속적인 디지털 신호로 변환하기 위해 각 시점에서 값을 찍어오는 샘플링 작업이 필요하고, 이 점을 찍는 주기를 sampling time이라고 합니다.
문제 2번을 풀면서 sampling time을 달리하였을 때 그래프가 어떻게 변화하였는지 보았습니다. sampling time을 줄이면 보다 정확하게 아날로그 신호를 디지털 신호로 변환할 수 있습니다. 또한 데이터 개수를 늘려도 아날로그 신호를 디지털 신호로 보다 정확하게 변환할 수 있지만 계산량과 데이터 수가 늘어납니다.

 

 

 

728x90