一、背景知识

1. 频谱

信号的频谱由两部分组成:幅度谱和相位谱。

2. 幅度谱

在傅里叶分析中,把各个分量的幅度随频率的变化称为信号的幅度谱。

补充幅度谱的求解方法:

(1)如果不是直流分量的频率,即 f≠0Hz,则幅度谱 = 频谱幅度 / (N/2) ;

(2)对于直流分量,即 f=0Hz,则幅度谱 = 频谱幅度 / N ;

(参考:如何决定要使用多少点来做fft)

(参考:【数字信号处理】Matlab做fft时点数N怎么选取)

3. 相位谱

在傅里叶分析中,把各个分量的相位随频率的变化称为信号的相位谱。

(参考:频谱、幅度谱、功率谱和能量谱)

(参考:信号与系统--幅度谱和相位谱)

二、举个栗子~

%
clear; clc; close all; warning off;fs = 1000;  % 采样频率
t = 0 : 1/fs : 10;
datalength = length(t);
s1 = 10 * sin(2 * pi * 50 * t);  % 信号1
s2 = 3 * sin(2 * pi * 100 * t);  % 信号2
s3 = 15 * cos(2 * pi * 30 * t);  % 信号3
s4 = 1 * randn(1, datalength);  % 信号4(高斯白噪声)
s = s1 + s2 + s3 + s4;   % 合成信号% FFT
N = 1024;   % FFT点数
sFFT = fft(s, N);  % N点傅里叶变换
sFFTPow = abs(sFFT) .^ 2;  % 功率(功率信号的傅里叶变换是功率谱)
sFFTPowdB = pow2db(sFFTPow(1:N/2));  % 功率转db% 原始信号波形和频谱图
figure;
sp1 = subplot(3, 1, 1);
plot(s1, 'linewidth', 1.5); hold on;
plot(s2, 'linewidth', 1.5); hold on;
plot(s3, 'linewidth', 1.5); hold on;
plot(s4, 'linewidth', 1.5); hold off;
legend('s1', 's2', 's3', 's4');
title('分解信号'); axis('tight');
sp2 = subplot(3, 1, 2);
plot(s, 'linewidth', 1.5);
title('合成信号'); axis('tight');
sp3 = subplot(3, 1, 3);
plot(sFFTPowdB, 'linewidth', 1.5);
title('信号s的傅里叶变换(只画正频部分)'); axis('tight');
linkaxes([sp1, sp2], 'x');% 幅度谱和相位谱
magnitude = abs(sFFT);  % 幅度谱
phase = angle(sFFT);  % 相位谱(rad)figure;
sp1 = subplot(2, 1, 1);
plot(magnitude, 'linewidth', 1.5);
title('幅度谱'); axis('tight');
sp2 = subplot(2, 1, 2);
plot(phase, 'linewidth', 1.5);
title('相位谱'); axis('tight');
linkaxes([sp1, sp2], 'x');

运行结果: 

将图一局部放大:

观察运行结果注意到:幅度谱有三个尖峰,对应于傅里叶变换之前的三个单频正弦信号,但幅度谱的三个幅值均不等于傅里叶变换之前的信号幅值。

        但除以傅里叶变换点数 N 之后的幅度谱三个尖峰幅值 = 原信号幅值的一半(这一点我还不是特别明白为什么要除以 N,为什么为原信号幅值的一半,有可能得到的是双边谱,如果只显示正频部分,乘以 2 之后就和原信号幅值一致了~)(解释见上面补充的幅度谱求解方法),相位谱也可以由 rad 转为 °,代码如下:

% 幅度谱和相位谱
magnitude = abs(sFFT) ./ N;  % 幅度谱
phase = angle(sFFT) * 180 / pi;  % 相位谱(rad)

(参考:如何得到信号的幅度谱和相位谱)

(参考:matlab 数字滤波入门)

运行结果如下图:

(参考:使用python(scipy和numpy)实现快速傅里叶变换(FFT)最详细教程)

(参考:傅里叶变换通俗解释及快速傅里叶变换的python实现)

(参考:[已解决] 关于傅里叶变换与相位谱、幅值谱的问题)

(参考:如何获得信号的相位fft&——我能在时域中得到相位吗?)

三、知识点

1. 能量信号和功率信号

(1)能量有限,功率为零的信号为能量信号;(例如单一脉冲信号、单一方波等)

(2)能量无限,功率有限的信号为功率信号;(例如无限延伸的正弦信号、无限延伸的高斯白噪声,所以本文中的合成信号 s 为功率信号,其频谱为功率谱)

所有周期信号都是功率信号(因为能量无限),所有有限数量的脉冲信号都是能量信号(因为能量有限)。

        (参考:能量信号和功率信号的分别)

(参考:图像的频率谱和功率谱代表什么_频谱、能量谱、功率谱的区别与联系)

2. Matlab 中 angle 和 phase 的区别

angle 和 phase 处理单个标量数据时没有任何差别,都是用 atan是函数求相位。但是对于向量和矩阵,angle 函数是对每个数据独立求相位角度,而 phase 会对输出结果做判断,如果相邻两个输出角度之差的绝对值超过 3.5,那么 phase 函数会对其重新处理,保证输出的相邻两个相位角度差值的绝对值不会超过 3.5。(有点类似于相位解缠绕的意思~)

下图从上到下,是网上某例 angle, phase, unwrap 函数的运行结果对比,可以看出 phase 和 unwrap 的效果特别相似!

(参考:[已答复] phase函数和angle函数有什么区别?)

(参考:matlab中angle和phase的区别)

【20211214】【信号处理】使用Matlab求解信号的频谱图、幅度谱、相位谱相关推荐

  1. MATLAB处理信号得到频谱、相谱、功率谱

    MATLAB处理信号得到频谱.相谱.功率谱 第一:频谱 一.调用方法 X=FFT(x): X=FFT(x,N): x=IFFT(X); x=IFFT(X,N) 用MATLAB进行谱分析时注意: (1) ...

  2. matlab相关性分析频谱_利用Matlab绘制正弦信号的频谱图并做相关分析[共6页]

    <利用Matlab绘制正弦信号的频谱图并做相关分析[共6页]>由会员分享,可在线阅读,更多相关<利用Matlab绘制正弦信号的频谱图并做相关分析[共6页](6页珍藏版)>请在人 ...

  3. MATLAB画出信号的连续幅度和相位谱

    Eg:画出信号x(t)的连续幅度和相位谱 其中 x(t)={1if −2≤t≤−1∣t∣if ∣t∣<11if 1≤t≤20else x(t) = \begin{cases} 1 &\t ...

  4. 用MATLAB画出离散幅度和相位谱

    Eg:画出x(t)=cos(πt/8),|t|<=4 信号的x(t)的离散幅度和相位谱 main.m echo on fnct='Fcos'; a=-4; b=4; n=24; tol=0.1; ...

  5. MATLAB中,信号的频谱图该怎么绘制?横坐标如何标注出频率值?

    一.什么是频谱? 频谱的全称是频率谱密度.在对时域信号进行认识和研究的过程中非常不便,那我们该如何更直观地认识信号,更清楚地了解信号的特点呢? 利用傅里叶变换将时域信号变换到频域. 我们知道,在通信领 ...

  6. 用matlab求解信号的DFT,利用MATLAB实现信号DFT的计算

    07级电信(2)班 刘坤洋 24 实验一 利用MATLAB 实现信号DFT 的计算 一.实验目的: 1.熟悉利用MATLAB 计算信号DFT 的方法 2.掌握利用MATLAB 实现由DFT 计算线性卷 ...

  7. matlab计算信号得频谱,用MATLAB分析离散信号的频谱与信号的采样

    <用MATLAB分析离散信号的频谱与信号的采样>由会员分享,可在线阅读,更多相关<用MATLAB分析离散信号的频谱与信号的采样(7页珍藏版)>请在人人文库网上搜索. 1.实验六 ...

  8. 【语音信号处理】1语音信号可视化——时域、频域、语谱图、MFCC详细思路与计算、差分

    基本语音信号处理操作入门 1. 数据获取 2. 语音信号可视化 2.1 时域特征 2.2 频域特征 2.3 语谱图 3. 倒谱分析 4. 梅尔系数 4.1 梅尔频率倒谱系数 4.2 Mel滤波器原理 ...

  9. 使用matlab画信号的频域图

    1.创建函数文件:plot_fft.m 文件内的代码如下 %CK.2022.05.23 %函数名:plot_fft %函数功能:画信号的频域图 %函数输入:X:信号序列:fs:信号频率 %函数输出:X ...

  10. 【MATLAB】数字图像处理--图像的频域处理-相位谱重构

    效果 %% clc clear alldir = 'image/56.jpg';img = imread(dir); imggray = rgb2gray(img);%灰度处理 imgf = fft2 ...

最新文章

  1. 我的理想计算机应用作文,我的理想当编程师作文400字
  2. python中requests库的用途-python中requests.session的妙用
  3. [ASP.NET] Session的了解
  4. Docker源码分析(四):Docker Daemon之NewDaemon实现
  5. 关于SCI的那些事儿
  6. org.hibernate.exception.SQLGrammarException: Error calling Driver#connect
  7. android 获取服务对象,android 如何取得正在运行的service对象
  8. IOS基础:ActionSheet(上拉菜单)的实现
  9. java 程序迁移后oracle 数字溢出_Spring Boot 应用迁移到 Java 11
  10. vertx:Flink报错 严重: Caught unexpected Throwable IllegalAccessError: tried to access class io.netty.uti
  11. myeclipse 8.6安装freemarker插件
  12. BZOJ 3689: 异或之
  13. thymeleaf模板引擎使用iframe的解决方案
  14. 第四章 ,数据处理--学习笔记
  15. OPPO VIVO等多平台官方远程真机测试平台
  16. python自动填表格_Windows下使用python3 + selenium实现网页自动填表功能
  17. 【BPF入门系列-4】如何在 BPF 程序中正确地按照 PID 过滤?
  18. unity3d 模拟电脑实现_基于Unity3D的机器人仿真实验系统
  19. 中国云市场生变:华为云Q2份额超AWS,IaaS+PaaS迎来整体增长
  20. 我理解的面向接口编程

热门文章

  1. loadrunner+fiddler代理录制
  2. 2020数据分析人才及CDA持证人行业报告
  3. arcgis 经纬度转大地坐标_MapGIS实现大地坐标到经纬度(地理坐标)的换算
  4. 51单片机基本刷屏测试实验_320x240真彩TFT屏51单片机驱动刷屏程序
  5. P2P网络NAT穿透原理(打洞方案)
  6. 常见电容器图片_最强汇总:燃油锅炉常见故障分析与解决方法简单粗暴!编辑不易!...
  7. 实验中常用光纤接头型号
  8. System Repair Engineer (SREng) 2.5 常用操作
  9. 第6集丨Persistent Objects 和 Caché SQL
  10. swfupload 无法加载_SwfUpload在IE10上不出现上传按钮的解决方法