文章目录

  • unwrap函数详解
  • unwarp标准系统函数
  • 手动实现unwrap
    • 拟一组数据
    • 分析拟定数据
    • 修订拟定数据 - 解卷绕
    • 整理公式
    • MATLAB手动实现
    • MATLAB代码解释
    • MATLAB结果对比

unwrap函数详解

  • 一般在计算一个系统相频特性时,就要用到反正切函数提取相位,计算机中反正切函数规定:在一、二象限中的角度为0 ~ π,三、四象限的角度为0 ~ -π
  • 但实际得到的结果会发生相位跳变,跳变幅度为2π,这就叫做相位的卷绕
  • unwrap的作用就是解卷绕,使相位在π处不发生跳变,从而反映出真实的相位变化

unwarp标准系统函数

  • unwrap(pha, tol, dim)

    • pha为数列或矩阵
    • tol为判断的阈值
    • dim可以设置为操作对象
      • 若对每一列进行操作,那参数可填1或者省略
      • 若对每一行进行操作,那参数需填2

手动实现unwrap

拟一组数据
  • 假设此时我们拥有一组数据:Data = [-59, -92, -126, -158, 166, 133, 96, 61, 26, -7, -18, -59, -92, -126, -158, 166, 133, 96, 61, 26, -7, -18];

  • 如上图所示,这些数据呈现一种类似周期性的循环,但这并不是真的周期函数,只是因为当他的数值跨越 ±π 时,就会根据其变化形式,条编导边界重新计算

  • 这种状态我们一般称之为相位的卷绕或相位的折叠,用wrap表示,则相位饿解卷绕被称为unwrap

分析拟定数据
  • 数据本身呈现递减趋势,从-59°开始不断递减
  • 数据中在 -158° -> 166° 出现第一次跳变,跳变后继续下降,直到下一次跳变的出现
修订拟定数据 - 解卷绕
  1. 恢复原本的度数 -158° -> 166°

    • -158°到边界点的距离 = |-158° - (-180°)| = 22°
    • 边界点到166°的距离 = |180° - 166°| = 14°
    • 故整体变化度数 = 22° + 14° = 36°
    • 原本度数 = -158° - 36° = -194°
  2. 观察跳变数据
    • 166 - (-194°) = 360°,恰好为360°,从-180°跳到了180°,将函数值增加了360°
  3. 得出本质
    • 根据函数值的变化,wrap的本质就是:当相位超出边界时,补偿360°并继续计算,而unwrap就是为了消除这种补偿
  4. 后续数据
    • 后续数据也应该随着跳变点处恢复原本数据而进行改变,即在遇到下一个跳变点之前,所有数据均应该减去360°得到原始数值
    • 在遇到第二个跳变点时,由于进一步的跳变令补偿再次增加了360°,故第二次跳变之后的值到第三次跳变到来之前,所有数据应该在原本基础上修正360°*2 = 720°
整理公式
  • 根据上述分析unwrap与wrap的关系可以表达为
    unwrap(x)=wrap(x)±360∗wrapNumber(x)unwrap(x) = wrap(x) ± 360 * wrapNumber(x) unwrap(x)=wrap(x)±360∗wrapNumber(x)
  • 公式中的±分别对应数据递增或递减的情况,将其使用wrapCycle表示,公式可变为
    unwrap(x)=wrap(x)−wrapCycle∗wrapNumber(x)unwrap(x) = wrap(x) - wrapCycle * wrapNumber(x) unwrap(x)=wrap(x)−wrapCycle∗wrapNumber(x)
  • 公式中每个对应的数据点均为其对应一个wrapCycle表示其跳变,公式可变为
    unwrap(x)=wrap(x)−wrapCycle(x)∗wrapNumber(x)unwrap(x) = wrap(x) - wrapCycle(x) * wrapNumber(x) unwrap(x)=wrap(x)−wrapCycle(x)∗wrapNumber(x)
MATLAB手动实现
%% unwrap
% unwrap(x) = wrap(x) - wrapCycle*wrapNum(x)% data0
Data = [-59, -92, -126, -158, 166, 133, 96, 61, 26, -7, -18, -59, -92, -126, -158, 166, 133, 96, 61, 26, -7, -18];
subplot(3, 1, 1);
plot(1:length(Data), Data);
title('Ram simulated data')
grid on;% use system function unwrap
unwrap_Data = unwrap(deg2rad(Data), [], 2);
unwrap_finallyData = rad2deg(unwrap_Data);
subplot(3, 1, 2);
plot(1:length(Data), unwrap_finallyData);
title('Use system function unwrap')
grid on;% try to simulate unwrap
length_Data = length(Data);
finallyData = [];
CycleNumber = [];
wrapCycle = [];
% calculata CycleNum
for i = 1 : length_Dataif i > 1if (Data(i) - Data(i-1)) > 180 CycleNumber(i)= CycleNumber(i-1) + 1;elseif (Data(i) - Data(i-1)) < -180CycleNumber(i) = CycleNumber(i-1) + 1;elseCycleNumber(i) = CycleNumber(i-1);endelseCycleNumber(i) = 0;end
end
% calculata wrapCycle
for i = 1 : length_Dataif i > 1if (Data(i) - Data(i-1)) > 180 wrapCycle(i)= 360;elseif (Data(i) - Data(i-1)) < -180wrapCycle(i) = -360;elsewrapCycle(i) = wrapCycle(i-1);endelsewrapCycle(i) = 0;end
end
% updata Data
for i = 1 : length_DatafinallyData(i) = Data(i) - wrapCycle(i)*CycleNumber(i);
end
subplot(3, 1, 3);
plot(1:length(Data), finallyData);
title('try to simulate unwrap')
grid on;
MATLAB代码解释
  1. % data0

    • 拟定一组含有跳变的数据值,并将其进行绘制,作为对比
  2. % use system function unwrap
    • 使用系统标准unwrap函数进行解卷绕
    • 由于拟定数据表示角度,故在调用unwrap()函数需要对数据进行deg2rad角度到弧度的转换
    • 使用unwrap()解卷绕之后,为方便对比,对数据进行rad2deg弧度到角度的转换
    • 进行绘制作为对比
  3. % try to simulate unwrap
    • 手动实现unwrap
  4. % calculata CycleNum
    • 第一个数据跳变次数为0
    • 之后所有的数据是否跳变取决于与前一个数据的差值是否超过180°
    • 当跳变出现,说明针对前序数据发生一次跳变,即新跳变数据的跳变数比前一次跳变的跳变数多一
  5. % calculata wrapCycle
    • 第一个数据的跳变大小为0
    • 之后所有的数据跳变大小取决于与前一个数据的差值是否超过180°
      • 若差值在[-180, 180],跳变大小与前序数据跳变大小相等
      • 若差值 > 180, 跳变大小为360°进行解卷绕
      • 若差值 < -180, 跳变大小为-360°进行解卷绕
  6. % updata Data
    • 更新手动实现的unwrap数据结果
    • 进行绘制作为对比
MATLAB结果对比
  • 数据对比

  • 图像对比

【DSP】理解并用MATLAB手动实现unwrap()相关推荐

  1. 【数据结构与算法】详解什么是图结构,并用代码手动实现一个图结构

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  2. matlab 与dsp联合仿真,matlab和DSP联合开发前景很大?

    呵呵,俺也是MATLAB的爱好者,看侬找得这么辛苦给侬发过俺刚买的书的目录吧,希望对侬有用!!! 目录 第1章  MATLAB基础 1.1  MATLAB开发环境新功能 1.1.1  函数浏览器 1. ...

  3. dsp 正弦波信号发生器matlab程序,基于Matlab/DSP Builder多波形信号发生器的设计

    在Simulink中进行的仿真是属于系统验证性质的,是对MDL文件进行的仿真,并没有对生成的VHDL代码进行过仿真.事实上,生成VHDL描述的是 RTL级的,是针对具体的硬件结构的,而在Matlab的 ...

  4. 矩阵条件数的定义、理解以及matlab代码

    目录 1.矩阵条件数的定义 1.1 矩阵范数的定义 1.2 矩阵范数举例 2 矩阵条件数的意义 3.矩阵条件数matlab代码 1.矩阵条件数的定义 cond ⁡ ( A ) = ∥ A ∥ ∙ ∥ ...

  5. DWA算法理解及其MATLAB实现

    原请看https://blog.csdn.net/gophae/article/details/105299926 ****************************************** ...

  6. MATLAB手动修改神经网络权值的方法

    文章目录 一.问题描述 二.解决方法 三.简单的测试 一.问题描述 我在MATLAB上用deepNetworkDesigner做了一个简单的网络: 现在我想手动修改网络的权值矩阵. 网络的存储格式如下 ...

  7. OFDM理解与matlab代码

    1.相关概念 基带.信息源,也称发射端,发出的没有经过调制(进行频谱搬移和变换)的原始电信号所固有的频带(频率带宽).  频带.对基带信号调制后所占用的频率带宽.  带宽.一个信号所占有的从最低的频率 ...

  8. vivado----fpga硬件调试 (七)----数据导出并用MATLAB读取

    Vivado套件中的Debugger(类似ISE套件中的ChipScope)提供了在本地窗口中查看硬件实时数据的途径,但是无法导出类似ChipScope中的.prn这种文本数据格式,只能通过write ...

  9. C语言实现离散余弦变换(DCT)并用MATLAB和Python验证

    概念 离散余弦变换(Discrete Cosine Transform,DCT)是可分离的变换,其变换核为余弦函数.是与傅里叶变换相关的一种变换,它相当于把离散傅里叶变换的虚数部分丢掉,只使用实数.D ...

最新文章

  1. 分析 | MEMS传感器市场报告
  2. android:src= @drawable/login_logo,android实现登录,Login姿势对不对?
  3. DVWA-暴力破解-对‘g0tmi1k’文章的学习笔记
  4. npz文件转为npy_numpy的文件存储 .npy .npz 文件
  5. 3结构介绍_豹驰(BOACH)声学材料吸隔声方法介绍—(下)材料隔声特性曲线
  6. 15:46 2009-8-2 sql2005客户端装不上,碎片不能整理,createthread
  7. 10款Flash和Javascript网页音乐播放器
  8. 如何打造园本特色_如何打造一个可持续发展的特色观光园?
  9. 突然!华为P30 Pro真机上手视频曝光:屏幕指纹解锁秒开
  10. Objective-C之@类别小实例
  11. 好用的 身份证识别OCR API
  12. 制定项目进度计划的过程
  13. 【历史上的今天】8 月 31 日:人工智能起源;GPU诞生;Windows 98中文版来了
  14. 微信小程序中的列表渲染
  15. VS2012(Visual Studio 2012)官方免费中文旗舰版下载(含激活密钥)
  16. Linux网络系统之配置域名与主机名映射和常见网络命令
  17. 如何设计一个可用的web容器
  18. Unity实现可调子屏幕(类小地图)效果
  19. 在UE4中创建新的Shading Model
  20. ps2模拟器bios3dm_呆萌PS2模拟器bios文件下载|呆萌PS2模拟器专业版下载v3.1.2-乐游网安卓下载...

热门文章

  1. 【计算机网络】从零开始的个人网站1 从部署轻量应用服务器到搭建简易网站(持续更新中!)
  2. Android 手机开启全局调试xposed插件
  3. windows7最大支持多少内存
  4. 安卓Root后删除系统内置自带软件
  5. 五、jQuery 对表单、表格的操作(走过路过瞅瞅吧)
  6. java实战家谱管理系统_简易家谱系统的设计与开发(附程序源代码).doc
  7. html基础 vscode写代码
  8. 软件质量管理体系概述
  9. 关注中国移动互联网市场:海外移动互联企业图谋中国 喜大市场忧大差异
  10. 2023美赛数学建模C题思路模型代码