首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

算法与编程-信号初始处理

2012-09-16 
算法与编程--信号初步处理这几天做简单的算法题目,在学校发的教材里面挑选了几道稍微难一点的题目做了一下

算法与编程--信号初步处理

这几天做简单的算法题目,在学校发的教材里面挑选了几道稍微难一点的题目做了一下。花了一天时间做了出来。如此一来稍微找回了一点编程的感觉。

下面是题目:

算法与编程-信号初始处理

算法与编程-信号初始处理

下面是我的代码:

 

#include <stdio.h>#include <math.h>typedef struct My_Plural{//定义复数结构体double RP;double VP;}Plural;#define PI 3.14159265354void Initx2(double x[]);//初始化一维信号第一组void Inity1(double y[][15]);//初始化二维信号第一组void Inity3(double y[][15]);//初始化二维信号第一组void EulerFormula(double p, Plural * MP);//欧拉公式void OneDimension(double x[], Plural y[], int N);//一维信号处理从实数空间到复数空间void OneDimensionReverse(Plural x[], int N);//一维信号处理从复数空间到实数空间void DoubleDimension(double x[][15], Plural y[][15], int M, int N);//二维信号处理从实数空间到复数空间void DoubleDimensionReverse(Plural x[][15], int M, int N);//二维信号处理从复数空间到实数空间int main(){//一维信号处理1double x1[4] = {1, 1, -1, -1};Plural x2[4];OneDimension(x1, x2, 4);OneDimensionReverse(x2, 4);//一维信号处理2double x3[12];Plural x4[12];Initx2(x3);OneDimension(x3, x4, 12);OneDimensionReverse(x4, 12);//二维信号处理1double y1[15][15];Plural y2[15][15];Inity1(y1);DoubleDimension(y1, y2, 15, 15);DoubleDimensionReverse(y2, 15, 15);//二维信号处理2double y3[15][15];Plural y4[15][15];Inity1(y3);DoubleDimension(y3, y4, 14, 12);DoubleDimensionReverse(y4, 14, 12);return 0;}void Initx2(double x2[]){for (int i = 0; i < 12; i++){x2[i] = cos(PI / 6 * i);}}void Inity1(double y[][15]){for (int i = 0; i < 15; i++){for (int j = 0 ; j < 15; j++){if (i == 8 || j == 8)y[i][j] = 1;elsey[i][j] = 0;}}}void Inity3(double y[][15]){for (int i = 0; i < 15; i++){for (int j = 0 ; j < 15; j++){y[i][j] = cos(PI / 6.0 * i) * cos(PI / 7 * j);}}}void EulerFormula(double p, Plural * MP){MP->RP = cos(p);MP->VP = sin(p);}void OneDimension(double x[], Plural y[], int N){Plural sum;double sita = 0;Plural  MP;for (int k = 0; k < N; k++){sum.RP = 0;sum.VP = 0;for (int i = 0; i < N; i++){sita = 2 * PI / N * k * i * -1.0;EulerFormula(sita, &MP);sum.RP += x[i] * MP.RP;sum.VP += x[i] * MP.VP;}y[k].RP = sum.RP;y[k].VP = sum.VP;printf("一维信号公式正向结果X(%d)实部%.2lf, 虚部%.2lf\n", k, sum.RP, sum.VP);}printf("\n");}void OneDimensionReverse(Plural x[], int N){Plural sum;double sita = 0;Plural  MP;for (int k = 0; k < N; k++){sum.RP = 0;sum.VP = 0;for (int i = 0; i < N; i++){sita = 2.0 * PI / N * k * i;EulerFormula(sita, &MP);sum.RP += x[i].RP * MP.RP - x[i].VP * MP.VP;sum.VP += x[i].VP * MP.RP + x[i].RP * MP.VP;}sum.RP /= N;sum.VP /= N;printf("一维信号公式反向结果X(%d)实部%.2lf, 虚部%.2lf\n", k, sum.RP, sum.VP);}printf("\n");}void DoubleDimension(double x[][15], Plural y[][15], int M, int N){Plural all[15];Plural sum[15];double sita = 0;Plural  MP;for (int s = 0; s < N; s++)//u{for (int j = 0; j < M; j++)//v{all[j].RP = 0;all[j].VP = 0;for (int k = 0; k < N; k++)//n{sum[k].RP = 0;sum[k].VP = 0;for (int i = 0; i < M; i++)//m{sita = 2 * PI / N * i * j * -1.0;EulerFormula(sita, &MP);sum[k].RP += x[k][i] * MP.RP;sum[k].VP += x[k][i] * MP.VP;}sita = 2 * PI / N * s * k * -1.0;EulerFormula(sita, &MP);all[j].RP += sum[k].RP * MP.RP - sum[k].VP * MP.VP;//all里面存放的是一维信号计算出来的值all[j].VP += sum[k].RP * MP.VP + sum[k].VP * MP.RP;}y[s][j].RP = all[j].RP;y[s][j].VP = all[j].VP;printf("二维信号公式正向结果X(%d, %d)实部%.2lf, 虚部%.2lf\n", s, j, all[j].RP, all[j].VP);}}printf("\n");}void DoubleDimensionReverse(Plural x[][15], int M, int N){Plural all[15];Plural sum[15];double sita = 0;Plural  MP;for (int s = 0 ; s < N; s++)//u{for (int j = 0; j < M; j++)//v{all[j].RP = 0;all[j].VP = 0;for (int k = 0; k < N; k++)//n{sum[k].RP = 0;sum[k].VP = 0;for (int i = 0; i < M; i++)//m{sita = 2 * PI / N * i * j * 1.0;EulerFormula(sita, &MP);sum[k].RP += x[k][i].RP * MP.RP - x[k][i].VP * MP.VP;sum[k].VP += x[k][i].RP * MP.VP + x[k][i].VP * MP.RP;}sita = 2 * PI / N * s * k * 1.0;EulerFormula(sita, &MP);all[j].RP += sum[k].RP * MP.RP - sum[k].VP * MP.VP;//all里面存放的是一维信号计算出来的值all[j].VP += sum[k].RP * MP.VP + sum[k].VP * MP.RP;}all[j].RP = all[j].RP / M / N;all[j].VP = all[j].VP / M / N;printf("二维信号公式反向结果X(%d, %d)实部%.2lf, 虚部%.2lf\n", s, j, all[j].RP, all[j].VP);}}printf("\n");}


热点排行