СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №1/2015
ПРОЕКТИРОВАНИЕ И МОДЕЛИРОВАНИЕ 67 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 1 2015 Очевидно, что корректирующие ЦФ не обладают симметрией. Поэтому результирующие ЦФ также станут асимметричными. Но отсутствие сим- метрии нельзя в данном случае счи- тать недостатком, так как получа- ем желательное уменьшение фазо- вого сдвига. На рисунке 4 показана ЛАХ девятикаскадного ЦФ (кривая 1) и ЛАХ, которая получена путём допол- нения последовательным соединени- ем двух ЦФ типа (14) к этому девяти- каскадному ЦФ (кривая 2). Видно, что в переходной зоне кривая 2 име- ет большую по сравнению с кривой 1 крутизну. Формулы (13) используются так- же при построении на основе уравне- ния (2) рекурсивных ЦФ. В этом слу- чае уравнение (2) второго порядка при- мет вид: (15) где ωΔ t = 2 π w; Для таблично заданных функций на входе ЦФ часто оказывается удоб- но использовать формулы расчёта коэффициентов ЦФ, выведенные при использовании не только запаздываю- щих, но и опережающих (по отноше- нию к текущему) дискретных значений функции. Для этого вместо (13) исполь- зуют формулы (16) и (17): (16) (17) где После необходимых преобразова- ний уравнения (12) с помощью фор- мул (15) и (16) получаем формулу (18) для ЦФ: (18) Для получения амплитудно-фазовой характеристики (АФХ) применитель- но к последней формуле ЦФ исполь- зуют следующие простые выражения: где и С помощью дифференцирующих ЦФ (14, 18), дополняемых к основно- Листинг 1 // void __ fastcall TForm1::FormCreate(TObject * Sender) {int i,n,N=9,imax=1000; double f,fmax=0.5,fmin=0.25,pi2=6.28318,k, m=1.4,A=1,C,L, a2[]={0,0,0,0,0,0,0,0,0}; k=(fmax-fmin)/pow((N-0.5),m); for(n=0; n<N; n++) { f=fmin+k*pow(n,m); C=cos(f*pi2); a2[n]=C/(C-1);} //Цикл вычисления центральных коэффициентов трёхточечных ЦФ for(i=0; i<imax; i++) { f=fmax*i/imax; C=cos(f*pi2); //Цикл по дискретным значениям относительных частот из области опре- деления АЧХ for(n-0; n<N; n++) { A*=(a2[n]+(1-a2[n])*C); } //Цикл вычисления произведения всех амплитуд АЧХ для каждой частоты L=20*log10(fabs(A)); Chart1->Series[0]->AddXY(w,L); A=1;} } // Листинг 3 // void __fastcall TForm1::FormCreate(TObject *Sender) {int i,j,N,Na; double a,p,q,a2[ ]={0,1,….Na-1},m[ ]={0,1,…N-1}; for(j=0; j<Na; j++) {a=a2[j]; //Внешний цикл по количеству каскадов трёхточечных ЦФ for(i=1; i<N; i++) {p=m[i-1]; if (i>1) m[i-1]=q; q=a*m]i]+0.5*( 1-a)*(p+m[i+1]); }} //Внутренний цикл, //охватывающий все дискретные точки области определения фильтруемой функции m[i]} // Листинг 2 // void __fastcall TForm1::FormCreate(TObject *Sender) {int i,n=0,m=0,N=8; double b1,b2,b3,a[100],B1[100],B2[100],B3[100] ,B[]={ a2 _1, a2 _2, a2 _3,… a2 _8}; a[0]=(1- a2 _0)/2; a[1]= a2 _0; a[2]=a[0]; //Загрузка коэффициентов первого ЦФ в массив результатов расчёта M: b1=(1-B[n])/2; b2=B[n]; b3=b1; //Расчёт и загрузка коэффициентов очередного ЦФ по счётчику n+=1 for(i=0; i<m+5; i++) {B1[i]=0; B2[i]=0; B3[i]=0; a[m+5]=0; //Обнуление столбцов B1, B2 и B3, //так как в каждом из них имеются по две нулевых координаты (см. си- стему равенств); //обнуление a[m+5] для суммирования в цикле всех коэффициентов много- точечного ЦФ for(i=0; i<m+3; i++) {B1[i]=b1*a[i]; B2[i+1]=b2*a[i]; B3[i+2]=b3*a(i);} //индексы координат столбцов образуют диагональ for(i=0; i<m+5; i++) {a[i]=B1[i]+B2[i]+B3[i]; if(n>N-2) a[m+5]+=a[i];} //Сумма координат трёх столбцов, даёт 7 новых коэффициентов (m+5=7) семиточечного ЦФ //Число 5 соответ. произв. нулевого и первого ЦФ при m=0 (от каждого дополняемого трёхточечного ЦФ m увеличивается на 2) n+=1; if(n<N) {m+=2; goto M;} //Счётчики: n – для каскадов трёхточечных ЦФ, m – для коэффициентов многоточечного ЦФ for(i=0; i<m+6; i++) Memo1->Lines->Add(“a[“+IntToStr(i)+”]=”+FloatTo Str(a[i])); //Вывод на экран дисплея коэффициентов многоточечного ЦФ и их суммы} //
RkJQdWJsaXNoZXIy MTQ4NjUy