📄 experiment-2.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 + -