📄 system.cpp
字号:
#include "stdafx.h"
#include "system.h"
#include <iostream.h>
Dsystem::Dsystem(void)
{
A=1.0;
}
Dsystem::Dsystem(Dsignal sgn1,Dsignal sgn2)
{
A=1.0;
Yz=sgn1;
Xz=sgn2;
}
Dsystem::Dsystem(double amp,Dsignal sgn1,Dsignal sgn2)
{
A=amp;
Yz=sgn1;
Xz=sgn2;
}
Dsystem::initial(double amp,Dsignal sgn1,Dsignal sgn2)
{
A=amp;
Yz=sgn1;
Xz=sgn2;
}
complex Dsystem::response(double frequence)
{
complex comp;
complex compY;
complex compX;
compY=0.0;
compX=0.0;
complex STDj(0,1);
int i;
for (i=0;i<Yz.length;i++)
{
compY=compY+Yz.sgnt[i]*exp(-STDj*frequence*i);
}
for (i=0;i<Xz.length;i++)
{
compX=compX+Xz.sgnt[i]*exp(-STDj*frequence*i);
}
comp=A*(compY/compX);
return comp;
}
double Dsystem::GetResponseAbs(double frequence)
{
complex comp;
comp=response(frequence);
return comp.abs();
}
double Dsystem::GetResponseAngle(double frequence)
{
complex comp;
comp=response(frequence);
return arg(comp);
}
Dsystem& Dsystem::operator=(const Dsystem sys1)
{
A=sys1.A;
Xz=sys1.Xz;
Yz=sys1.Yz;
return *this;
}
Dsystem Dsystem::series(Dsystem sys1,Dsystem sys2)
{
return Dsystem(sys1.A*sys2.A,sys1.Yz^sys2.Yz,sys1.Xz^sys2.Xz);
}
Dsystem Dsystem::parallel(Dsystem sys1,Dsystem sys2)
{
RemoveA(sys1);
RemoveA(sys2);
return Dsystem(1.0,(sys1.Yz)^(sys2.Yz),sys1.Xz^sys2.Xz);
}
void Dsystem::RemoveA(Dsystem& sys)
{
Dsignal sgn;
sgn.sgnt[0]=sys.A;
sys.A=1.0;
sys.Yz=sys.Yz^sgn;
}
Dsystem operator* (Dsystem s1,Dsystem s2)
{
Dsystem sym;
return sym.series(s1,s2);
}
Dsystem operator+ (Dsystem s1,Dsystem s2)
{ Dsystem sym;
return sym.parallel(s1,s2);
}
Dsignal Dsystem::GetAllResponseAbs()
{
return GetAllResponseAbs(1024);
}
Dsignal Dsystem::GetAllResponseAbs(int N)
{ Dsignal sgn;
sgn.fitForLen(N);
int i;
double freq;
for (i=0;i<N;i++)
{
freq=2*M_PI*((double)i)/N;
sgn.sgnt[i]=GetResponseAbs(freq);
}
return sgn;
}
Dsignal Dsystem::GetAllResponseAngle()
{
return GetAllResponseAngle(1024);
}
Dsignal Dsystem::GetAllResponseAngle(int N)
{ Dsignal sgn;
sgn.fitForLen(N);
int i;
double freq;
for (i=0;i<N;i++)
{
freq=2*M_PI*((double)i)/N;
sgn.sgnt[i]=GetResponseAngle(freq);
}
return sgn;
}
///*debug
#include <conio.h>
void main()
{
Dsignal y;
Dsignal x;
double y1n[10]={0,0.14534481,0.1078499};
double x1n[10]={1,-1.1580459,0.41124070};
y.fitForLen(3);
x.fitForLen(3);
y=y1n;
x=x1n;
Dsystem b(y,x);
Dsignal sgn;
sgn=b.GetAllResponseAbs(32);
sgn.print();
}
//debug*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -