锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

复数的常规运算与C代码实现

时间:2023-01-15 14:30:00 jwn70mt显卡口电容

很多时候,信号处理算法的基础是复数操作,尤其是在频谱分析中。因此,本文介绍了常见的复数操作和C语言代码。
基于以下数据结构:

typedef  struct xy { 
            float re;     float im; }comp; 
  • 复数加法
    函数申明 :comp cadd(comp a,comp b);
    函数体:
comp cadd(comp a,comp b){ 
         comp c;  c.re = a.re   b.re;  c.im = a.im   b.re;  return c; }  
  • 复数减法
    函数申明 :comp csub(comp a,comp b);'
    函数体:
comp csub(comp a,comp b){ 
         comp c;  c.re = a.re - b.re;  c.im = a.im - b.re;  return c; } 
  • 复数乘法
    函数申明:comp cmul(comp a,comp b);
    函数体 :
comp cmul(comp a,comp b){ 
          comp c;  c.re = (a.re*b.re) - (a.im*b.im);  c.im = (a.re*b.im)   (b.re*a.im);  return c; } 
  • 复数求模
    函数申明:float cabs1(comp a);
    函数体 :
float cabs1(comp a){ 
       
	float c;
	c =(float)sqrt(a.re*a.re + a.im*a.im);
	return c;
}
  • 复数求共轭
    函数申明:comp conjg(comp a);
    函数体 :
comp conjg(comp a){ 
       

	comp c;
	c.re = a.re;
	c.im = -a.im;
	return c;
}
  • 函数的幂
    函数申明:comp cpow(comp a,double n);
    函数说明:这里幂次不是整数幂,不能使用for循环执行复数乘法,这里介绍另外一种方法。根据欧拉公式,任意一个复数可以表示成一个实数和三角函数相乘的形式:
    Z n = ( ρ e j w ) n = ρ n e j w n = ρ n ( cos ⁡ ( w n ) + j sin ⁡ ( w n ) ) { {Z}^{n}}={ {(\rho { {e}^{jw}})}^{n}}={ {\rho }^{n}}{ {e}^{jwn}}={ {\rho }^{n}}(\cos (wn)+j\sin (wn)) Zn=(ρejw)n=ρnejwn=ρn(cos(wn)+jsin(wn))

comp cpow(comp a,double n){ 
       
	
	comp c;
	float cabs; 
	float cthe;

	cabs = cabs1(a) ^ n;  //先求(a的模的N次幂);
	cthe = atan(a.im/a.re); // 再求相角 w

	c.re = cabs*cos(cthe*n);
	c.im = cabs*sin(cthe*n);
	return c;
}
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章