Matlab 如何计算正弦信号的幅值和初始相角
Matlab 如何计算正弦信号的幅值和初始相角
1、概述
如果已知一个正弦信号的幅值,在FFT后频域上该信号谱线的幅值与设置值不同,而是大了许多;如果不知道某一正弦信号的幅値,又如何通FFT后在頻域上求出该正弦信号的幅值呢?
2、理论基础
有一正弦信号为
信号的幅值为 ,初始相角为 。以采样频率 采样后,FFT(DFT)只取有限项的 n 值(设共 N 项),其离散化表达式为:
式中: 。又进一步假设,正弦信号的频率 是 的整数倍(是频谱中谱线之间频率间隔,或称为分辨率,即 ),即有,表示 是与FFT后频谱上的某根线谱相重合,可令 与第 条线谱相重合,即 ,所以有 。由 k = 0 和 式(2-2-10)可得:
求出了信号幅值,同时也求出了初始相角 。
- 这种方法求出正弦信号幅值和初始相角 是在信号的頻率 与FFT后频谱上的某根谱线相重合的条件下。
- 如果 在两条谱线之间,則不能用这种方法来计算。这就是栅栏效应,我们可以用内插的方法来算信号在两条谱线之间分量的频率、幅值和初始相角。
- 当 时,不存在負頻率部分,所以的幅値 ,初始相角。
- 同时从式(2-2-10)得到,对于所有 ,设 ,,,……,此时,使 的 值均为0。
3、实例
例:设信号的采样频率为1000Hz,由两个余弦信号组成,频率分别为 f1=50Hz 和 f2=65.75Hz,幅值都为1,初始相角都为0,信号长度为1000,通过FFT求出两个正弦信号的幅值和初始相角。
程序如下:
% 例:设信号的采样频率为1000Hz,由两个余弦信号组成,频率分别为 f1=50Hz 和 f2=65.75Hz,
% 幅值都为1,初始相角都为0,信号长度为1000,通过FFT求出两个正弦信号的幅值和初始相角。% pr2_2_2
clc; close all; clear;fs = 1000; %采样频率
N = 1000; %信号长度
t = (0:N-1)/fs; %设置时间序列
f1 = 50;
f2 = 65.75; %信号2频率
x = cos(2*pi*f1*t) + cos(2*pi*f2*t); %设置信号
X = fft(x); %FFT
Y = abs(X)*2/N; %计算幅值
freq = (0:N/2)*fs/N; %设置频率刻度
[A1, k1] = max(Y(45:65)); %寻求第一个信号的幅值
k1 = k1 + 44; %修正索引号
[A2, k2] = max(Y(60:70)); %寻求第二个信号的幅值
k2 = k2 + 59; %修正索引号Theta1 = angle(X(k1));
Theta2 = angle(X(k2));
% 显示频率、幅值和初始相角
fprintf('f1=%5.2f A1=%5.4f Theta1=%5.4f\n',freq(k1),A1,Theta1);
fprintf('f2=%5.2f A2=%5.4f Theta2=%5.4f\n',freq(k2),A2,Theta2);% 作图
figure('Name','幅值频谱图')
subplot 211; plot(freq,Y(1:N/2+1),'k'); xlim([0 150]);
xlabel('频率/Hz'); ylabel('幅值'); title('频谱图');
subplot 223; stem(freq,Y(1:N/2+1),'k'); xlim([40 60]);
xlabel('频率/Hz'); ylabel('幅值'); title('50Hz分量');
subplot 224; stem(freq,Y(1:N/2+1),'k'); xlim([55 75]);
xlabel('频率/Hz'); ylabel('幅值'); title('65.75Hz分量');
其中 f1 和 f2 表示两信号的頻率,A1 和 A2 表示两信号的幅値,Thetal 和 Theta2 表示两信号的初始相角。第2个信号在两条谱线之间,所以出的参数有很大的差;而第1个信号非常接近设置值,但是有一定的误差,这完全是由第2个信号泄漏所造成的(可通过加窗函数处理该信号,以减少泄漏,对信号参数的估算値能更精确一些)。
相关文章:
Matlab 如何计算正弦信号的幅值和初始相角
Matlab 如何计算正弦信号的幅值和初始相角 1、概述 如果已知一个正弦信号的幅值,在FFT后频域上该信号谱线的幅值与设置值不同,而是大了许多;如果不知道某一正弦信号的幅値,又如何通FFT后在頻域上求出该正弦信号的幅值呢? 2、…...
华为hcie认证培训报班培训好?还是自学好
华为HCIE认证培训报班培训和自学各有优势。 培训的优势: 系统性学习:培训课程通常会系统地涵盖HCIE认证所需的各个知识点,帮助你建立全面的理论体系。指导与互动:培训中,能够与资深讲师互动,及时解答疑惑…...
ASP.NET+sqlserver通用电子病历管理系统
一、源码描述 这是一款简洁十分美观的ASP.NETsqlserver源码,界面十分美观,功能也比较全面,比较适合 作为毕业设计、课程设计、使用,感兴趣的朋友可以下载看看哦 二、功能介绍 该源码功能十分的全面,具体介绍如下&…...
wireshark通常无法抓取交换机所有端口报文
Wireshark 是一种网络分析工具,它通常在计算机的网络接口上进行数据包捕获和分析。然而,Wireshark 默认情况下无法直接捕获交换机所有端口的报文。 交换机是一种网络设备,它在局域网内转发数据包,根据目的MAC地址将数据包仅发送到…...
猫头虎的技术笔记:Spring Boot启动报错解决方案
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
Istio网关流量转发
摘要 Istio网关转发到后端服务的步骤,可以按照以下详细说明进行操作: 配置Istio Sidecar:确保目标后端服务已经部署并成功运行,并为其启用Istio Sidecar。Istio Sidecar负责在Pod中注入Istio代理,以便实现流量控制和…...
阿里云acp云计算认证考试科目有哪些?
阿里云ACP云计算认证考试科目包括以下内容: 阿里云云计算基础知识:包括云计算的定义、特点、服务模式、部署模式、虚拟化技术等相关知识。阿里云产品:包括阿里云ECS、RDS、SLB、OSS、DNS等核心产品的架构、使用方法、优化技巧等相关知识。云…...
8、Spring security配置放过的请求又被拦截了
项目场景: 在项目中有一些接口需要放开spring security拦截,配置方法如下,其中permitUrls为需要放过的请求路径。 Override public void configure(WebSecurity web) {web.ignoring().antMatchers(permitUrls); }问题描述 实际请求地址&am…...
4.后端·新建子模块与开发(传统模式)
文章目录 学习资料新建子模块与各层查询entity的列表entitymapper层service层controller层 测试 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p8&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e b站的学习视频 新建子模块与各层 在r…...
.netcore 连接 apache doris
apache doris 兼容mysql协议;所以我们在.netcore项目中,可以使用Mysql的驱动 dotnet add package MySqlConnector 测试代码: [HttpGet]public async Task<string> Get2(){//打开连接await using var connection new MySqlConnectio…...
【C语言】探讨常见自定义类型的存储形式
🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:C语言 🔥该文章将探讨结构体,位段,共用体的存储形式。 目录: 🌍结构体内存对齐✉…...
NLP(六十九)智能文档问答助手升级
本文在笔者之前研发的大模型智能文档问答项目中,开发更进一步,支持多种类型文档和URL链接,支持多种大模型接入,且使用更方便、高效。 项目介绍 在文章NLP(六十一)使用Baichuan-13B-Chat模型构建智能文档中…...
如何使用SQL系列 之 如何在MySQL中使用索引
引言 关系数据库可用于处理任何大小的数据,包括包含数百万行的大型数据库。结构化查询语言(SQL)提供了一种基于特定条件在数据库表中查找特定行的简洁而直接的方法。随着数据库变得越来越大,在其中找到特定的行变得越来越困难,就像大海捞针一…...
数字孪生相关政策梳理,重点对各行业版块的指导和引领
前言 数字孪生技术作为新型智慧城市建设的创新引领性技术,有利于打造孪生城市运行空间,强化城市大脑基础能力,实现全域时空数据融合。数字孪生技术在推动智慧城市建设方面的作用已越来越受到重视。2021年3月,《国家“十四五”规划…...
nios里面打开eclipse遇到Unresolved inclusion: “system.h“等问题
问题:在Nios中打开软核部分代码时,遇到一堆Unresolved inclusion: "system.h"等问题报错 原因:bsp文件和软核没关联,导致找不到头文件地址,关联一下就好 解决步骤: 右键bsp文件,点击…...
C#,数值计算——伽马微分(Gammadev)的计算方法与源程序
1 文本格式 using System; namespace Legalsoft.Truffer { public class Gammadev : Normaldev { private double alph { get; set; } private double oalph { get; set; } private double bet { get; set; } private double a1 { g…...
【UE5 智慧城市系列】5-通过鼠标键盘控制摄像机
目标 通过鼠标WASD键控制摄像机前后左右移动,鼠标滚轮控制弹簧臂长度的修改,鼠标中键控制摄像机旋转。 步骤 1. 首先创建一个游戏模式,这里命名为“BP_GameMode” 2. 再创建一个玩家控制器,这里命名为“BP_PlayerController” …...
工作纪实38-ES分页数据问题
之前分页查询有接ES,随着系统使用时间数据量不断增加,会有如下报错。关键信息就是 Result window is too large, from size must be less than or equal to: [10000] but was [100001] 当索引非常非常大(千万或亿),是无法按照from size做深…...
设计模式之访问器模式(Visitor)的C++实现
1、访问器模式的提出 在软件开发过程中,早已发布的软件版本,由于需求的变化,需要给某个类层次结构增加新的方法。如果在该基类和子类中都添加新的行为方法,将给代码原有的结构带来破坏,同时,也违反了修改封…...
Python之OS模块
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;即os模块提供了非常丰富的方法用来处理文件和目录。 使用的时候需要导入该模块:import os...
vue 使用canvas 详细教程
Vue.js 中使用 Canvas Vue.js 是一个流行的 JavaScript 框架,用于构建用户界面。它提供了一种简洁的方式来管理和渲染数据,同时也支持与其他库和工具的集成。要在 Vue.js 中使用 Canvas,您可以按照以下步骤进行操作: 在 Vue.js …...
Git 基本操作【本地仓库与远程仓库的推送、克隆和拉取】
文章目录 一、Git简介二、Git的下载安装三、Git常规命令四、新建本地仓库五、本地分支操作六、Git远程仓库七、远程仓库克隆、抓取和拉取八、总结九、学习交流 一、Git简介 Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS&…...
FPGA开发
https://www.enclustra.com.cn/?bd_vid11435475462206745180 https://www.monolithicpower.cn/design-tools/design-tools/llc-design-tool.html https://www.elecfans.com/article/88/143/2012/20120718280641_2.html...
js手撕代码
1、实现instanceof运算符 instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上,运算符左侧是实例对象,右侧是构造函数。 const isInstanceof function(left,right){let proto Object.getPrototypeOf(left);while(true…...
typecho反序列化
typecho反序列化 环境的搭建 漏洞复现前提 <?php class Typecho_Feed {const RSS1 RSS 1.0;const RSS2 RSS 2.0;const ATOM1 ATOM 1.0;const DATE_RFC822 r;const DATE_W3CDTF c;const EOL "\n";private $_type;private $_items;public function __const…...
php程序设计的基本原则
单一职责原则(SRP):一个类应该只有一个原因引起变化,即一个类应该只负责一项职责。 class User {private $name;private $email;public function __construct($name, $email) {$this->name $name;$this->email $email;}p…...
python execute() 使用%s 拼接sql 避免sql注入攻击 好于.format
1 execute(参数一:sql 语句) # 锁定当前查询结果行 cursor.execute("SELECT high, low, vol FROM table_name WHERE symbol %s FOR UPDATE;"% (symbol,)) 2 .format() cursor.execute("SELECT high, low, vol FROM table_name WHERE symbol {} FOR UPDATE;…...
RPC项目解析(1)
分布式通信框架:让远程方法调用和调用进程内方法一样简单 RPC通信原理 rpc:远程过程调用(远程能够调用其他模块的方法) 在rpc中需要发送时候,对发送的信息进行序列化,在服务端对接收到的信息进行反序列化…...
点云从入门到精通技术详解100篇-基于 RGB 图像与点云融合的三维点云分割算法及成像系统
目录 前言 相机和激光雷达标定研究现状 点云分割算法研究现状...
JDK8新特性
Lembda表达式 lembda表达式是一个简洁、可传递的匿名函数,实现了把代码块赋值给一个变量的功能 是我认为jdk1.8中最让人眼前一亮的特性(我没用过其他函数式的语言) 在了解表达式之前,我们先看两个概念 函数式接口 含有且仅含有一个抽象方法&…...
网站设计弹窗/百度怎么推广产品
L1-033 出生年(15 分) 以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y…...
内蒙古网站建设流程/关键词有哪些关联词
Paul Jaquays是一个多面手 Paul Jaquays是一个多面手,他在id Software里为QuakeⅡ设计关卡,并为QuakeⅢ做游戏和关卡设计。现在,还有谁不愿用他的东西呢?当Jaquays了解到Saqes的秘决后,他想出版一个关卡设计规则方面的…...
国内可访问的海外网站和应用/百度网盘怎么找片
我们直接看代码: <meta http-equiv"refresh" content"跳转时间(秒数);urlhttps://blog.csdn.net/PanDaoxi2020(跳转链接)">...
wordpress建站应用/长沙推广公司
1.什么是BIO?什么是NIO?什么是AIO? BIO是同步阻塞式IO,一个连接对应一个线程.每当有一个客户端请求连接,都要在服务端创建一个线程来服务这个客户端(因为这时候会阻塞,不能够接受其他客户端的连接请求),如果有很多客户端,就会对应成千上万个服务端线程,这会导致服务端负载过…...
小学学校网站设计模板/2024年最新时政热点
开源的数据库控制器 在开发中,我们经常会遇到上线数据库表的情况,代码上我们有git,svn这样优秀的版本控制软件,但是数据库的迭代我们不能使用手工的方式迭代吧?或者说每次上线前手工去数据库执行。这样带来的便捷性就会…...
怎么通过做网站赚钱/seo搜索引擎优化关键词
L2-016. 愿天下有情人都是失散多年的兄妹 时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越呵呵。大家都知道五服以内不得通婚,即两个人最近的共同祖先如果在五代以内(即本人、父母、祖父母、曾祖父母、高祖父母)则…...