⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 system.cpp

📁 数字信号处理实验程序。福利业快速变换
💻 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 + -