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

📄 experiment-2.cpp

📁 计算序列的卷积和相关函数 1. 计算序列h(n)和x(n)的卷积
💻 CPP
字号:
#include"math.h"
#include"stdio.h"
#include"stdlib.h"
extern void signal(float *h, float f, float dt, float m, int N);
extern void Output_r(float *r, float *y2, int L);
extern void Output_conv(float *y, int L);
void convolution(float *y, float *h, int M, float *x, int N);
void relation(float *r, int M, float *y1, float *y2, int N);

////////////////////////////////////////////////////////
//          试验-2:  计算序列的卷积和相关函数        //
//                                                    //
//  1.  计算序列h(n)和x(n)的卷积,h(n)*x(n)。         //
//                                                    //
//  2.  计算序列h(n)和h(n-45)的相关函数。             // 
//                                                    //
//  3.  用Excel软件绘图显示计算结果。                 //
//                                                    //
//-------------------------------------------------------------//
//                                                             //
//   编写程序的位置:                                           //
//                                                             //
//   1. 在函数void convolution()中完成卷积计算的编程           //
//                                                             //
//   3. 在函数relation()中完成相关函数计算的编程               //
//                                                             //
/////////////////////////////////////////////////////////////////
void main()
{
    float h[128], deltat, M, f;
	int   N, i;

//-------------------------------------------//
//             生成离散信号 h(n)             //
//-------------------------------------------//

    deltat=float(0.004);
    N=32;           // h[n]数据长度(点数)
	f=35;          
	M=float(1.5);  
	for(i=0; i<N; i++)
	{  h[i]=0; }
    signal(h, f, deltat, M, N);    //  调用函数signal形成离散信号h(n)


//--------------------------------------------------------------//
//    任务1:     计算序列h(n)和x(n)的卷积                       //
//--------------------------------------------------------------//

	float y[128], x[128];  //  y[i]数组存放卷积结果.
                           //  x[i]数组程序内生成.
    int L;

	L=128;   //  离散信号x(n)的长度

//-----------------------------//
//        形成信号  x(n)       //
//-----------------------------//

	for(i=0; i<L; i++)
	{  x[i]=0;  }
	x[11] =float(1.0);
	x[45] =float(-0.6);
	x[85] =float(0.8);

//-----------------------------------//
//      计算卷积  y[n]=h[n]*x[n]     //
//-----------------------------------//
    convolution(y, h, N, x, L);

//-----------------------------//
//      输出卷积结果  y[n]     //
//-----------------------------//
    Output_conv(y, L);
 

//--------------------------------------------------------------//
//     任务2:    计算序列h[n]和h[n-45]的相关函数                //
//--------------------------------------------------------------//

	float r[128], y1[128], y2[128]; //  y1[i]数组存放h[n];
	                                //  y2[i]数组存放h[n-45];
                                    //  r[i]数组存放相关函数;
    for(i=0; i<L; i++) { y1[i]=y2[i]=r[i]=0; }
    for(i=0; i<N; i++) { y1[i]=h[i];  y2[i+45]=h[i]; }

//-----------------------------//
//      计算相关函数  r(n)     //
//-----------------------------//
    relation(r, L, y1, y2, L);

//------------------------------------//
// 输出相关函数  r(n) 和 信号 h(n-20) //
//------------------------------------//
    Output_r(y1, y2, L);
	Output_r(r,y2,L);



//-----------------------------------------//
    printf("  End of caculating !!\n\n");
//-----------------------------------------//

}


//####################################################//
//                   计算卷积的程序                   //
//  --------------------------------------------------//
//         在下列函数段中编写计算函数的程序 !!!       //
//  --------------------------------------------------//
//####################################################//
void convolution(float *y, float *h, int N, float *x, int L)
{

  int n=0,m;
 
 while(n<N+L)
 { 
	y[n]=0;

  for(m=0;m<N;m++)
  {  
	  if((n-m)>=0&&(n-m)<L)
	 {
	  y[n]+=h[m]*x[n-m];

	  }
	  
	 
	 }
  n++;
 }

}



//####################################################//
//                计算相关函数的程序                  //
//  --------------------------------------------------//
//       在下列函数段中编写计算相关函数的程序 !!!     //
//  --------------------------------------------------//
//####################################################//
void relation(float *r, int M, float *y1, float *y2, int L)
{
int n,m;
//for(n=-(L-1);n<L;n++)
for(n=0;n<L;n++)
{

//	r[n+L-1]=0.0;
r[n]=0;

//	for(m=0;m<L;m++)
	for(m=0;m<L;m++)
	{
		if((m+n)>=0&&(m+n)<L)
	//	r[n+L-1]+=y1[m]*y2[m+n];
	r[n]+=y1[m]*y2[m+n];
		
	}
	

}

  

}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -