C语言实现估计信号的幅度
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语言实现估计信号的幅度相关推荐
- 信号的幅度调制c语言程序,信号的幅度调制和解调.doc
信号的幅度调制和解调 本科学生实验报告 学号 114090315 姓名 李开斌 学院 物电学院 专业.班级 11电子 实验课程名称 数字信号处理(实验) 教师及职称 李宏宁 开课学期 2013 至 2 ...
- 信号完整性(SI)电源完整性(PI)学习笔记(三十四)100条估计信号完整性效应的经验法则
100条估计信号完整性效应的经验法则 ----内容来自<信号完整性分析与电源完整性分析-第三版> 当快速的得到粗略的结果比以后得到优良的结果更重要,就应该使用经验法则. 当然不能盲目的使用 ...
- 幅度调制信号 matlab,《利用MATLAB实现信号的幅度调制与解调.doc
<利用MATLAB实现信号的幅度调制与解调 课程设计论文 姓名:姜勇 学院:机电与车辆工程学院 专业:电子信息工程2班 学号:1665090208 安徽科技学院 学年第 学期 < > ...
- matlab apm,tvapm 水声通信面临的最困难的问题是多途干扰,其中自 引起接收信号的幅度衰落,互 matlab 238万源代码下载- www.pudn.com...
详细说明:水声通信面临的最困难的问题是多途干扰,其中自多途引起接收信号的幅度衰落,互多途引起接收信号的码间干扰,再加上海洋环境的高噪声背景.低的载波频率.极为有限的带宽以及传输条件的时间-空间-频率变 ...
- matlab幅度调制滚动条的程序_实训3 信号的幅度调制及MATLAB实现(续)
实训3 信号的幅度调制及MATLAB实现 一.实验目的 1.掌握幅度调制的原理 2.对频谱产生初步认识 3.熟悉使用MATLAB软件来分析信号的调制问题及可视化 二.实验设备 微型计算机一台.MATL ...
- 傅里叶变换(juce库实现信号的幅度谱分析,附源码)
从高等数学课本中我们了解到如果一个周期为T的周期函数f(t)f(t)f(t)满足收敛定理的条件,则这个函数可以被展开为傅里叶级数: f(x)=a0+∑n=1∞[ancos(nw1t)+bnsin(nw ...
- 深度解密Go语言之基于信号的抢占式调度
不知道大家在实际工作中有没有遇到过老版本 Go 调度器的坑:死循环导致程序"死机".我去年就遇到过,并且搞出了一起 P0 事故,还写了篇弱智的找 bug 文章. 识别事故的本质,并 ...
- vhdl和c语言,VHDL语言中的信号、变量与常量异同比较(转)
在VHDL中,对象是指用来保持数据的一些客体单元.VHDL中的对象主要有4种:常量(CONSTANT).变量(VARIABLE).信号(SIGNAL)和文件(FILE).本文主要讨论前面三种在实际应用 ...
- c语言 信号函数,C语言中进程信号集的相关操作函数详解
C语言sigismember()函数:测试某个信号是否已加入至信号头文件:#include 定义函数:int sigismember(const sigset_t *set, int signum); ...
最新文章
- 夏普电视android4.4.2,夏普电视怎么投屏 夏普电视投屏设置方法【详解】
- django第三天(路由基础和路由分配)
- 在Kali上安装打印机
- 【转】Windows版本,OS内核版本,Windows SDK之间的关系
- NSAttributedString
- Pylot——跨平台的网站压力测试工具
- 三阶科赫雪花PYTHON
- 软件工程导论复习之可行性研究
- 【pytest官方文档】解读-fixtures函数和测试函数的参数化
- 关于北京市电气火灾综合治理实施方案通知的解读
- 你看我像不像学HTML的人(五)——链接标签、注释和特殊字符
- Android中集成讯飞语音,语音转文字以及文字转语音操作
- 软件工程结课论文 敏捷开发在软件工程中的应用 大学编程作业(TUST 天津科技大学 2022年)
- 虚拟机一直光标闪,进不去,解决方法之一。
- Java开发Mye_Java使用MyEclipse构建webService简单案例
- 手机短信转发到另一个手机接收_怎么把手机号码导入另一个手机中(新手机是华为的,旧手机是三星的)...
- golang中的字符串拼接
- 推荐系统(十五)多任务学习:谷歌MMoE(Multi-gate Mixture-of-Experts )
- android 瀑布流 空白,Android瀑布流优化,解决Recyclerview展示大批量图片时Item自动切换、闪烁、空白等问题...
- Centos75启动盘安装系统无法进入图形安装界面-提示dracut-pre-udev[348]:modprobe:ERROR: could not inset ‘edd‘
热门文章
- 同步 fork(Syncing a fork)
- 多尺度动态图卷积神经网络----Multi-scale Dynamic Graph Convolutional Network for Hyperspectral Image Classificati
- Go(Golang)_12_竞态
- 繁体批量转换工具:支持繁体字和简体本地化互转
- 1.8.ARM裸机第八部分-按键和CPU的中断系统
- ITSM开源工具OTRS安装
- 软路由系统, OpenWrt (Lede), Ubuntu server, 爱快, ROS, Pfsense, m0n0wall, OPNsense
- C语言一维/二维数组解引用难理解点以及一道难题
- OpenFlow Tutorial
- java的Map接口