C语言实现估计信号的幅度

  • 思路:
  • matlab实现
    • 仿真结果
  • C语言实现
    • 仿真结果

思路:

1、对复序列做FFT变换
2、得到序列的幅度谱
3、找出幅度谱的最大值即为序列的幅度

matlab实现

close all;
clear all;
clc;count=4;
y=[1+2i,3+4i,5+6i,7+8i];
y_FFT=fft(y,count)  % 傅里叶变换
P=abs(y_FFT)/count  %  幅度谱
u=max(P)            % 得到波束1接收到的信号的幅度值

仿真结果

C语言实现

/************FFT***********/
#include   <stdio.h>
#include   <math.h>
#include   <stdlib.h>#define PI 3.1415926535897931
#define   N   1000
#define count 4  //输入序列的长度,只限2的N次方  count个复数typedef   struct//结构体{double   real;double   img;}complex;//complex   x[N];
complex  *W;//输出序列的值complex  x[N] = {1.0, 2.0, 3.0, 4.0, 5,6, 7,8}; // 1+2i,3+4i,5+6i,7+8i   所有的数据按照 实部、虚部 依次放入数组中/*****************************子函数
*****************************/void   fft(); /*快速傅里叶变换*/void   initW();void   change();void   add(complex   ,complex   ,complex   *);   /*复数加法*/   void   mul(complex   ,complex   ,complex   *);   /*复数乘法*/   void   sub(complex   ,complex   ,complex   *);   /*复数减法*/   void   divi(complex   ,complex   ,complex   *);/*复数除法*/   void   output(); /*输出结果*/double fun_1();/*****************************主函数
*****************************/
int   main(){initW();fft();   output();fun_1();return 0;   }   /*****************************基-2 FFT运算
*****************************/
void   fft()
{   int   i=0,j=0,k=0,l=0;   complex   up,down,product;   change();   for(i=0;i<log(count)/log(2) ;i++){       l=1<<i;   for(j=0;j<count;j+=2*l){                           for(k=0;k<l;k++){                 mul(x[j+k+l],W[count*k/2/l],&product);   add(x[j+k],product,&up);   sub(x[j+k],product,&down);   x[j+k]=up;   x[j+k+l]=down;   }   }   }
}   /**********************************************************/
void   initW()   {   int   i;   W=(complex   *)malloc(sizeof(complex)   * count);   for(i=0;i<count;i++)   {   W[i].real=cos(2*PI/count*i);   W[i].img=-1*sin(2*PI/count*i);   }   }   /**********************************************************/
void   change()
{   complex   temp;   unsigned   short   i=0,j=0,k=0;   double   t;   for(i=0;i<count;i++)   {   k=i;j=0;   t=(log(count)/log(2));   while(   (t--)>0   )   {   j=j<<1;   j|=(k   &   1);   k=k>>1;   }   if(j>i)   {   temp=x[i];   x[i]=x[j];   x[j]=temp;   }   }
}   /*****************************输出结果
*****************************/
void   output()
{   int   i;   printf("FFT运算的结果为:\n");   for(i=0;i<count;i++)   {   printf("%.4f",x[i].real);   if(x[i].img>=0.0001)   printf("+%.4fj\n",x[i].img);   else   if(fabs(x[i].img)<0.0001)   printf("\n");   else     printf("%.4fj\n",x[i].img);   }
} /*****************************函数功能:  根据FFT的计算结果得到该序列的幅度
*****************************/
double fun_1()
{int i;double u=0.0;double sum[count];for(i=0;i<count;i++)   {sum[i]=sqrt(x[i].real*x[i].real+x[i].img*x[i].img)/count;//幅度谱 P// printf("%.4f\n",sum[i]);}//找幅度谱的最大值的最大值for(i=0; i<count; i++){if(sum[i]>u){u = sum[i];}}printf("波束接收序列的幅度为%.4f\n",u);return u;
}/*****************************复数加法
*****************************/
void   add(complex   a,complex   b,complex   *c)
{   c->real=a.real+b.real;   c->img=a.img+b.img;   }   /*****************************复数乘法
*****************************/
void   mul(complex   a,complex   b,complex   *c)
{   c->real=a.real*b.real   -   a.img*b.img;   c->img=a.real*b.img   +   a.img*b.real;
}/*****************************复数减法
*****************************/
void   sub(complex   a,complex   b,complex   *c)
{   c->real=a.real-b.real;   c->img=a.img-b.img;
}/*****************************复数除法
*****************************/
void   divi(complex   a,complex   b,complex   *c)
{   c->real=(   a.real*b.real+a.img*b.img   )/( b.real*b.real+b.img*b.img);    c->img=(   a.img*b.real-a.real*b.img)/(b.real*b.real+b.img*b.img);
}

仿真结果

C语言实现估计信号的幅度相关推荐

  1. 信号的幅度调制c语言程序,信号的幅度调制和解调.doc

    信号的幅度调制和解调 本科学生实验报告 学号 114090315 姓名 李开斌 学院 物电学院 专业.班级 11电子 实验课程名称 数字信号处理(实验) 教师及职称 李宏宁 开课学期 2013 至 2 ...

  2. 信号完整性(SI)电源完整性(PI)学习笔记(三十四)100条估计信号完整性效应的经验法则

    100条估计信号完整性效应的经验法则 ----内容来自<信号完整性分析与电源完整性分析-第三版> 当快速的得到粗略的结果比以后得到优良的结果更重要,就应该使用经验法则. 当然不能盲目的使用 ...

  3. 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc

    <利用MATLAB实现信号的幅度调制与解调 课程设计论文 姓名:姜勇 学院:机电与车辆工程学院 专业:电子信息工程2班 学号:1665090208 安徽科技学院 学年第 学期 < > ...

  4. matlab apm,tvapm 水声通信面临的最困难的问题是多途干扰,其中自 引起接收信号的幅度衰落,互 matlab 238万源代码下载- www.pudn.com...

    详细说明:水声通信面临的最困难的问题是多途干扰,其中自多途引起接收信号的幅度衰落,互多途引起接收信号的码间干扰,再加上海洋环境的高噪声背景.低的载波频率.极为有限的带宽以及传输条件的时间-空间-频率变 ...

  5. matlab幅度调制滚动条的程序_实训3 信号的幅度调制及MATLAB实现(续)

    实训3 信号的幅度调制及MATLAB实现 一.实验目的 1.掌握幅度调制的原理 2.对频谱产生初步认识 3.熟悉使用MATLAB软件来分析信号的调制问题及可视化 二.实验设备 微型计算机一台.MATL ...

  6. 傅里叶变换(juce库实现信号的幅度谱分析,附源码)

    从高等数学课本中我们了解到如果一个周期为T的周期函数f(t)f(t)f(t)满足收敛定理的条件,则这个函数可以被展开为傅里叶级数: f(x)=a0+∑n=1∞[ancos(nw1t)+bnsin(nw ...

  7. 深度解密Go语言之基于信号的抢占式调度

    不知道大家在实际工作中有没有遇到过老版本 Go 调度器的坑:死循环导致程序"死机".我去年就遇到过,并且搞出了一起 P0 事故,还写了篇弱智的找 bug 文章. 识别事故的本质,并 ...

  8. vhdl和c语言,VHDL语言中的信号、变量与常量异同比较(转)

    在VHDL中,对象是指用来保持数据的一些客体单元.VHDL中的对象主要有4种:常量(CONSTANT).变量(VARIABLE).信号(SIGNAL)和文件(FILE).本文主要讨论前面三种在实际应用 ...

  9. c语言 信号函数,C语言中进程信号集的相关操作函数详解

    C语言sigismember()函数:测试某个信号是否已加入至信号头文件:#include 定义函数:int sigismember(const sigset_t *set, int signum); ...

最新文章

  1. 夏普电视android4.4.2,夏普电视怎么投屏 夏普电视投屏设置方法【详解】
  2. django第三天(路由基础和路由分配)
  3. 在Kali上安装打印机
  4. 【转】Windows版本,OS内核版本,Windows SDK之间的关系
  5. NSAttributedString
  6. Pylot——跨平台的网站压力测试工具
  7. 三阶科赫雪花PYTHON
  8. 软件工程导论复习之可行性研究
  9. 【pytest官方文档】解读-fixtures函数和测试函数的参数化
  10. 关于北京市电气火灾综合治理实施方案通知的解读
  11. 你看我像不像学HTML的人(五)——链接标签、注释和特殊字符
  12. Android中集成讯飞语音,语音转文字以及文字转语音操作
  13. 软件工程结课论文 敏捷开发在软件工程中的应用 大学编程作业(TUST 天津科技大学 2022年)
  14. 虚拟机一直光标闪,进不去,解决方法之一。
  15. Java开发Mye_Java使用MyEclipse构建webService简单案例
  16. 手机短信转发到另一个手机接收_怎么把手机号码导入另一个手机中(新手机是华为的,旧手机是三星的)...
  17. golang中的字符串拼接
  18. 推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts )
  19. android 瀑布流 空白,Android瀑布流优化,解决Recyclerview展示大批量图片时Item自动切换、闪烁、空白等问题...
  20. Centos75启动盘安装系统无法进入图形安装界面-提示dracut-pre-udev[348]:modprobe:ERROR: could not inset ‘edd‘

热门文章

  1. 同步 fork(Syncing a fork)
  2. 多尺度动态图卷积神经网络----Multi-scale Dynamic Graph Convolutional Network for Hyperspectral Image Classificati
  3. Go(Golang)_12_竞态
  4. 繁体批量转换工具:支持繁体字和简体本地化互转
  5. 1.8.ARM裸机第八部分-按键和CPU的中断系统
  6. ITSM开源工具OTRS安装
  7. 软路由系统, OpenWrt (Lede), Ubuntu server, 爱快, ROS, Pfsense, m0n0wall, OPNsense
  8. C语言一维/二维数组解引用难理解点以及一道难题
  9. OpenFlow Tutorial
  10. java的Map接口