discrete filter
본 자료는 3페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
해당 자료는 3페이지 까지만 미리보기를 제공합니다.
3페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

discrete filter에 대한 보고서 자료입니다.

목차

1. discrete lowpass filter

2. discrete bandpass filter

3. discrete highpass filter

본문내용

convolution하였기 때문이다. 이차이는 그리 크지 않다. 이는 다음 page에서 MATLAB으로 구현된 spectrum에서 확인할 수 있다.
결과를 보다 확실히 하기 위해 주어진 입력 데이터를 MATLAB “freqz"함수를 이용하여 주파수 성분을 분석하여 보았다.
주어진 input signal x[n]의 dB scale spectrum이다. 주어진 input signal은 0.1π부근에 대부분의 주파수가 몰려있는 것을 볼 수 있다. 그러므로 Lowpass filtering에서만 대부분의 값이 나오고 나머지 filtering에서는 값이 거의 없었다. 4번째 결과인 y4[n] 역시 이론대로라면, y3[n]와 똑같이 나와야 하지만, 신호 성분이 워낙 미미해서 제대로 된 결과 값이 안 나온 것이라고 생각된다.
다음은 앞에서 구현해 보았던, Lowpass filter, Highpass filter, Bandpass filter를 MATLAB으로 확인해 보았다.




3번째 bandpasss filter와 마지막 Lowpass*Highpass filter가 비슷하다는 것을 알 수 있다.
● Source Code
#include
#include
#define N 256
#define pi 3.1415926535897932384626433832795
void main(void)
{
int i=0, j=0;
int n=0;
double x[N];
double y1[N]={0.0}; //lowpass 결과
double y2[N]={0.0}; //highpass 결과
double y3[N]={0.0}; //bandpass 결과
double y4[N]={0.0}; //lowpass->highpass 결과
double h1[41]; //lowpass
double h2[41]; //highpas
double h3[41]; //bandpass
double h1_1[41]; //lowpass after windowing
double h2_2[41]; //highpass after windowing
double h3_3[41]; // bandpass after windowing
double h4_4[81]; //lowpass * highpass
double rectwin[41]; //rectangular window
double input;
FILE *ifp, *ofp, *ofp1, *ofp2, *ofp3;
ifp = fopen("hw1_in.txt","r"); //입력신호
ofp = fopen("output.xls","w");
ofp1 = fopen("output1.xls","w");
ofp2 = fopen("output2.xls","w");
ofp3 = fopen("output3.xls","w");
//입력신호 파일입력
while (fscanf(ifp, "%lf", &input) == 1)
{
x[i] = input;
i++;
}
// -20부터 20까지 3개의 필터 구현
for(i=-20;i<21;i++)
{
if(i==0)
{
h1[i+20] = (5.0/8.0);
h2[i+20] = (5.0/8.0);
h3[i+20] = (1.0/8.0);
}
else
{
h1[i+20] = (5.0/8.0)*sin(5.0*pi*i/8.0)/(5.0*pi*i/8.0);
h2[i+20] = pow(-1,i)*(5.0/8.0)*sin(5.0*pi*i/8.0)/(5.0*pi*i/8.0);
if((i%2)==0)
{
j=(i+20)/2;
h3[i+20] = pow(-1,j%2)*2.0*(1.0/8.0)*sin(1.0*pi*i/8.0)/(1.0*pi*i/8.0);
}
else
h3[i+20] = 0.0;
}
}
/* Generating rectangular window */
for(i=0;i<41;i++)
{
if(i<11)
rectwin[i] = 1.0;
else
rectwin[i] = 0.0;
}
/* shift h1,h2,h3 as 5points right to use window method*/
for(i=0;i<41;i++)
{
if(i>41-16)
{
h1_1[i] = 0.0;
h2_2[i] = 0.0;
h3_3[i] = 0.0;
}
else
{
h1_1[i] = h1[i+16]*rectwin[i];
h2_2[i] = h2[i+16]*rectwin[i];
h3_3[i] = h3[i+16]*rectwin[i];
}
}
/* convolution */
for(i=0;i {
for(j=0;j<11;j++)
{
if(i ;
else
{
y1[i] += x[i-j] * h1_1[j];
y2[i] += x[i-j] * h2_2[j];
y3[i] += x[i-j] * h3_3[j];
}
}
}
// convolution lowpass with highpass filter
for(i=0;i<81;i++)
{
if(i<41)
for(j=0;j<=i;j++)
{
h4_4[i] += h1_1[i-j] * h2_2[j];
}
else
for(j=i-40;j<41;j++)
{
h4_4[i] += h1_1[i-j] * h2_2[j];
}
}
// y4
for(i=0;i {
for(j=0;j<22;j++)
{
if(i ;
else
{
y4[i] += x[i-j] * h4_4[j];
}
}
}
/* problem 1,2,3 output */
for(i=0;i<41;i++) //y1, y2, y3 출력시 i {
fprintf(ofp1,"%lf\n",h1_1[i]); //y1출력시 y1[i]
fprintf(ofp2,"%lf\n",h2_2[i]); //y2출력시 y2[i]
fprintf(ofp3,"%lf\n",h3_3[i]); //y3출력시 y3[i]
}
for(i=0;i<81;i++) //y4출력시 N으로 바꿔줌
{
fprintf(ofp,"%lf\n",h4_4[i]); //y4출력시 y4[i]
}
}
  • 가격1,000
  • 페이지수11페이지
  • 등록일2007.06.25
  • 저작시기2007.3
  • 파일형식한글(hwp)
  • 자료번호#416676
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니