当前位置: 首页 > news >正文

Matlab 如何计算正弦信号的幅值和初始相角

Matlab 如何计算正弦信号的幅值和初始相角

1、概述 

       如果已知一个正弦信号的幅值,在FFT后频域上该信号谱线的幅值与设置值不同,而是大了许多;如果不知道某一正弦信号的幅値,又如何通FFT后在頻域上求出该正弦信号的幅值呢? 

2、理论基础

有一正弦信号为

信号的幅值为 A,初始相角为 \theta。以采样频率 f_{s} 采样后,FFT(DFT)只取有限项的 n 值(设共 N 项),其离散化表达式为:

式中:K=\frac{k-l}{N} 。又进一步假设,正弦信号的频率 f_{0} 是 \Delta f 的整数倍(\Delta f是频谱中谱线之间频率间隔,或称为分辨率,即 \frac{f_{s}}{N} ),即有f_{0} = l*\Delta f,表示 f_{0} 是与FFT后频谱上的某根线谱相重合,可令 f_{0} 与第 k 条线谱相重合,即 k = l ,所以有 k = \frac{k-l}{N} = 0 。由 k = 0 和 式(2-2-10)可得:

求出了信号幅值A,同时也求出了初始相角 \theta

  1. 这种方法求出正弦信号幅值A和初始相角 \theta是在信号的頻率  f_{s} 与FFT后频谱上的某根谱线相重合的条件下。 
  2. 如果f_{0} 在两条谱线之间,則不能用这种方法来计算。这就是栅栏效应,我们可以用内插的方法来算信号在两条谱线之间分量的频率、幅值和初始相角。 
  3. 当 f_{0} = 0 时,不存在負頻率部分,所以l = 0的幅値 A =\frac{\left | X(l) \right |}{N},初始相角\theta = 0。 
  4. 同时从式(2-2-10)得到,对于所有 K=\frac{k-l}{N}\neq 0,设 k-l =\pm 1\pm 2\pm 3,……,此时\sin (\pi *K*N)=0,使 k\neq l 的 X(k) 值均为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个信号泄漏所造成的(可通过加窗函数处理该信号,以减少泄漏,对信号参数的估算値能更精确一些)。

http://www.lryc.cn/news/165187.html

相关文章:

  • 华为hcie认证培训报班培训好?还是自学好
  • ASP.NET+sqlserver通用电子病历管理系统
  • wireshark通常无法抓取交换机所有端口报文
  • 猫头虎的技术笔记:Spring Boot启动报错解决方案
  • Istio网关流量转发
  • 阿里云acp云计算认证考试科目有哪些?
  • 8、Spring security配置放过的请求又被拦截了
  • 4.后端·新建子模块与开发(传统模式)
  • .netcore 连接 apache doris
  • 【C语言】探讨常见自定义类型的存储形式
  • NLP(六十九)智能文档问答助手升级
  • 如何使用SQL系列 之 如何在MySQL中使用索引
  • 数字孪生相关政策梳理,重点对各行业版块的指导和引领
  • nios里面打开eclipse遇到Unresolved inclusion: “system.h“等问题
  • C#,数值计算——伽马微分(Gammadev)的计算方法与源程序
  • 【UE5 智慧城市系列】5-通过鼠标键盘控制摄像机
  • 工作纪实38-ES分页数据问题
  • 设计模式之访问器模式(Visitor)的C++实现
  • Python之OS模块
  • vue 使用canvas 详细教程
  • Git 基本操作【本地仓库与远程仓库的推送、克隆和拉取】
  • FPGA开发
  • js手撕代码
  • typecho反序列化
  • php程序设计的基本原则
  • python execute() 使用%s 拼接sql 避免sql注入攻击 好于.format
  • RPC项目解析(1)
  • 点云从入门到精通技术详解100篇-基于 RGB 图像与点云融合的三维点云分割算法及成像系统
  • JDK8新特性
  • X86_64函数调用汇编程序分(2)