ЖУРНАЛ СТА №1/1999

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЦИФРОВАЯ ОБРАБОТКА СИГНАЛОВ 65 1/99 t3=*(x+i)-*(x+p); t4=*(y+i)-*(y+p); *(x+p)=t3*u1-t4*u2; *(y+p)=t4*u1+t3*u2; *(x+i)=t1; *(y+i)=t2; } u3=u1*c-u2*s; u2=u2*c+u1*s; u1=u3; } L/=2; } j=0; for(i=0;i<M1;i++) { if(i>j) { t1=*(x+j); t2=*(y+j); *(x+j)=*(x+i); *(y+j)=*(y+i); *(x+i)=t1; *(y+i)=t2; } K=M; while(j >=K) { j�=K;K/=2; } j+=K; } } sinsignal(P,F,A,N) */моделирование входного сигнала/* */в форме синусоиды/* float *P,F,A; */P-массив сигнала размерности N/* int N; */F-частота сигнала,/* */A-амплитуда сигнала/* { register int i; register float r,re,re1,im,im1; re=cos(2.*PI*F/(float)N); im=sin(2.*PI*F/(float)N); re1=A;im1=0.; for(i=0;i< N;i++) { *(P+i)=re1;r=re1; re1=r*re�im1*im; im1=im1*re+r*im; } } main() { int j,N; float *x,*y,F,A,Re,Im; printf("\t\t N :"); scanf("%d",&N); printf("\t\t F(gc):"); scanf("%f",&F); printf("\t\t A :"); scanf("%f",&A); x=(float*)calloc(N,sizeof(float)); y=(float*)calloc(N,sizeof(float)); sinsignal(x,F,A,N); for(j=0;j < N;j++) printf(" X[%d] - %.1f \n",j,*(x+j)); BPF(x,y,N,1); for(j=0;j < N/2;j++) { Re=*(x+j); Im=*(y+j); A=2.*sqrt(Re*Re+Im*Im)/(float)N; printf(" X[%d] - %d \n",j,(int)A); free(x); free(y); } Тестовый пример N = 1024 F = 100 A = 100 Входной массив : X[0]= 100 X[1]= 81.8 X[2]= 33.7 X[3]= - 26.7 X[4]= - 77.7 X[5]= - 99.7 ........................................... X[1018]= - 85.8 X[1019]= - 99.7 X[1020]= - 77.3 X[1021]= - 26.7 X[1022]= 33.7 X[1023]= 81.8 Выходной массив: X[0]= 0 X[1]= 0 X[2]= 0 X[3]= 0 X[4]= 0 .......................................... X[100]= 100 ............................................. X[508]= 0 X[507]= 0 X[508]= 0 X[509]= 0 X[510]= 0 X[511]= 0 Таблица 1. Время выполнения типовой операции ЦОС — БПФ (мс) в зависимости от вычислительного модуля, среды исполнения и объема входных данных (N) для приведенного листинга программы Тип процессора с сопроцессором М 68030 33 МГц М 68040 25 МГц М 68060 60 МГц Pentium MMX 166 МГц Р-2 300 МГц Носитель Беста-88 MVME-162 MVME-172 Язык программирования ANSI C Ultra С Ultra С Visual C++ debug Visual С++ debug Операционная система OS-9 V 2.1 OS-9 V 3.0 OS-9 V 3.0 Window 95 WindowsNT Тип данных Float Float Float Float Float Объем памяти хранения данных (байт) 8хN 8хN 8хN 8хN 8хN Объем программного кода (байт) 22672 22672 22672 126464 126464 N = 128 24,3 мс 3,2 0,8 7,7 1,3 256 53,8 6,3 1,4 9,9 3,1 512 117,6 13,4 2,9 18,0 7,2 1024 260,4 30,7 6,6 33,5 16,3 2048 568,0 66,7 27,1 72,0 37,0 4096 1230,4 142,3 64,0 149,0 83,2 8192 2652,0 305,6 141,7 334,0 186,7 16384 5695,0 650,0 307,4 739,0 412,8

RkJQdWJsaXNoZXIy MTQ4NjUy