16
Hình 2.11 Ví dụ 2.4.
Hình 2.12 Ví dụ 2.4.
Biểu thức này có thể biểu diễn thành
h n
R
n
J Rn( , ) ( )
1
1
1 1
0
2
ở đây J
1
(x) = hàm Bessel loại 1.
Vì thế :
2
2
2
1
2
),(
21
2
2
21
R
D
H
o
17
ở đây
2
2
2
12121
),(,,
R và D
0
= 3-dB. (Giả
thiết rằng
3.0
o
1
0 0
2222111
2
21
)cos(),()cos(
1
),(
ddnHnnnh
(2.20)
Lời giải của bài toán này sẽ được đưa ra thông qua một chương
trình viết bằng ngôn ngữ C. Ngôn ngữ C được sử dụng rộng rãi bởi
tính linh hoạt của nó. C phù hợp cho các ứng dụng khác nhau.
Trước khi bạn viết chương trình, bạn cần nghiên cứu phương pháp
tính tích phân kép. Sau đây ta sẽ phát triển thêm qui tắc Simpson để
tính tích phân kép.
Qui tắc tính tích phân của Simpson được viết như sau:
)()(2)(4)(
3
m
i
mi
m
i
i
x
xfxfxfxf
lÎch½n
ở đây ;/)(
0
mxx
mx
và m là một số lẻ.
Với tích phân kép
dxdyyxfI
nm
y
y
x
x
),(
00
Sử dụng qui tắc Simpson ta có thể viết như sau:
2
, 4,2
1
, 3,1
0
),(),(2),(4),(
3
0
ch½nlÎ
18
vậy có thể viết
dy
yxf
yxf
yxf
yxf
I
m
y
y
x
n
]241 14242[
3
3
y
x
I
4
1
),( ),(),(),(
),( ),(),(),(
),( ),(),(),(
210
1211101
0201000
nmmmm
n
n
yxfyxfyxfyxf
yxfyxfyxfyxf
yxfyxfyxfyxf
(2.21)
ở đây mxx
mx
/)(
0
nyy
my
/)(
0
m và n là số lẻ.
Nếu ),(
21
duoc cho boi nguoi dung trong chuong trinh con tinh
ham H(float w1, float w2). */
#include <stdio.h>
#include <conio.h>
#include <float.h>
#include <math.h>
#include <alloc.h>
#define pi 3.1415926
int n1,n2;
float f(float,float);
float H(float,float);
float
Simpson2(float(*)(float,float),float,float,float,float,int,int);
void main(void)
{
float f(float,float),xmin,xmax,ymin,ymax;
int M,N;
int NS,xt,yt;
float h[11][11],temp;
char file_name[40],ch;
FILE *fptr;
clrscr();
xmin=ymin=0.0;
xmax=ymax=pi;
M=N=20; /* So cac diem chia theo phuong x va y.
cac gia tri nay phai la chan.*/
}
gotoxy(70,25);
textattr(WHITE+(BLACK<<4));
cputs(" ");
gotoxy(xt,yt);
printf("\n Impulse Response one quadrant.\n\n");
for(n1=0;n1<=NS;n1++)
{
for(n2=0;n2<=NS;n2++)
printf("%7.6f ",h[n1][n2]);
printf("\n");
}
/* Dinh dang dap ung xung tuan hoan. */
temp=h[NS][NS];
for(n1=NS;n1<((NS<<1)+1);n1++)
21
for(n2=NS;n2<((NS<<1)+1);n2++)
h[n1][n2]=h[n1-NS][n2-NS];
h[(NS<<1)][(NS<<1)]=temp;
for(n1=NS;n1<((NS<<1)+1);n1++)
for(n2=0;n2<NS;n2++)
h[n1][n2]=h[n1][(NS<<1)-n2];
for(n1=0;n1<NS;n1++)
for(n2=0;n2<((NS<<1)+1);n2++)
h[n1][n2]=h[(NS<<1)-n1][n2];
printf
("\n\nEnter Name of file for storing impulse response >");
scanf("%s",file_name);
dw=pi/16.0;
for(i=1;i<33;i++)
w1[i]=w2[i]=w1[i-1]+dw;
for(i=0;i<33;i++)
fprintf(fptr," %e",w2[i]);
xt=wherex();yt=wherey();
gotoxy(70,25);
textattr(RED+(LIGHTGRAY<<4)+BLINK);
cputs("WAIT");
gotoxy(xt,yt);
for(i=0;i<33;i++)
{
fprintf(fptr,"\n");
for(j=0;j<33;j++)
{
sum=0.0;
for(n1=-NS;n1<=NS;n1++)
for(n2=-NS;n2<=NS;n2++)
sum+=h[n1+NS][n2+NS]*(float)cos((double)(w1[i]*(float)n1+
w2[j]*(float)n2));
z[i]=sum;
}
fprintf(fptr,"%e",w1[i]);
for(j=0;j<33;j++)
fprintf(fptr,"%e",z[j]);
}
fclose(fptr);
}
{
register i,j;
float sum1,sum2,dx,dy,x,y,I;
float *A;
A=(float *) malloc(M*sizeof(float));
dx=(xmax-xmin)/(float) M;
dy=(ymax-ymin)/(float) N;
x=xmin;
for (i=0;i<=M;i++)
{
sum1=sum2=0.0;
y=ymin+dy;
for(j=1;j<N; j++)
{
if((j%2)==0)