多普勒失真信号重采样的Matlab仿真分析

2023-05-16

多普勒失真信号重采样的Matlab仿真分析

应用场景

  • 水声通信指的是使用声信号在水中传输数据。相对而言,电磁信号在水中吸收严重衰减过快,光信号受水中悬浮颗粒的影响,也无法完成远距离传输。这两种信号的传播距离约为数百米,而声信号在水中传播距离达到数十千米,成为水下通信的首选方式。
  • 水声通信的一个重大挑战就是运动带来的多普勒。多普勒造成信号的频率漂移,影响系统性能,因此非常有必要消除多普勒带来的影响。而多普勒在时域的表现为信号的长度压缩和扩展,即'y(t) = x((1+a) * t)',其中a为多普勒因子。而如果估计出多普勒因子,之后采用重采样技术就可以恢复得到原始信号x(t) = y( t/(a+a) )
  • 重采样的意义就是插值,从一个信号插值得到多普勒影响前后的信号。而1+a一般为小数,虽然采用多相滤波可以达到很好的插值效果,但复杂度太高。相比之下,线性插值、样条插值等方式运算量小,在做数字系统的时候更加合适

    Matlab一维插值

  • MATLAB中的插值函数为interp1(),其调用格式为 yi=interp1(x,y,xi, 'method')。其中x,y为观测数据点,xi为插值(自变量)向量,yi为xi的插值结果(函数值)。
  • 'method'表示采用的插值方法。取值'nearest'为最邻近插值,'linear'是线性插值,'spline'是三次样条插值,'cubic'为分段三次Hermite插值。默认情况为线性插值,三次样条效果最平滑,三次效果多项式介于两者之间。
  • 线性插值:通过所在位置相邻两点的值来插值。已知f(a)和f(c),b在a,c中间,求f(b)的公式为:f(b) = f(a) + (b-a)/(c-a) *[f(c) - f(a)]
  • 分段三次Hermite插值:分段让邻近两点的导数相同,曲线更平滑。
  • 样条插值:样条插值通常比多项式插值好用。用低阶的样条插值能产生和高阶的多项式插值类似的效果,并且可以避免龙格现象。

    线性插值的误差

  • 插值不免会造成信号失真,定义原始信号功率与噪声功率的比值为信干比,计算公式为:SDR = 10 * log10( power(x(t)) / power(x(t) - x'(t) )x'(t)为插值后得到的信号。
  • 而对于线性插值,SDR与信号采样频率fs和信号频率f的比值有近似如下关系:SDR(dB) = 40 * log10( fs/f /2 )

    仿真对比

    代码如下。
  • 首先设置多普勒因子dop,插值方法,采样率与信号频率的比例ns。最小值取2,对应奈奎斯特频率。
  • 之后对于每个ns值,生成相应的初始信号a,之后插值以对信号添加多普勒。因spline方法造成的误差最小,选择作为添加多普勒的方法。
  • 采用不同的插值方法去除多普勒。因为插值造成信号长度变化,每次都只略去尾部6000个数据点。
  • 之后画图,每个ns对应一张图,并注明实测SDR以及线性插值的理论SDR值以作对比。
dop = 0.05;
intermethod = 'nearest';% nearest linear cubic spline 

%n: fs / fc
ns = 2:7;
figure;

for n = ns
    a = sin(2*pi*(1+rand():1:50000)/n);

    b=interp1([0:length(a)-1],a,[1-1:length(a)-6000-1]*(1+dop),'spline');

    c=interp1([1-1:length(b)-1],b,[1-1:length(b)-6000-1]/(1+dop),intermethod);

    subplot(3,ceil(length(ns)/3),n-1);
    plot(a(29901:30000));
    hold on;
    plot(c(29901:30000),'r');

    error = sum(abs(a(1:30000)-c(1:30000)) .^2) / sum(abs(a(1:30000)) .^2);
    title(['fs/fc = ',num2str(n),' SDR = ',num2str(10*log10(1/error)), 'dB VS', num2str(40*log10(n/2)),' dB'])

end

仿真结果分析

  • 临近点插值仿真结果:性能极差,无法使用。

  • 线性插值仿真结果:可见与理论值符合的较好。

  • 分段三次Hermite插值插值仿真结果:大约提高5dB,但带来的是大量的计算。

  • 三次样条插值仿真结果:性能非常好,但最复杂。因为添加多普勒时也采用了样条插值,仿真结果加上3dB才应该是理论结果。

  • 结论

    如果采用重采样来去除多普勒带来的影响,并且采用较为实用的线性插值法,若要达到约19dB的通信信噪比要求,需要提高采样率至少为6倍信号频率。
      
      
      
    转载请注明作者:Focustc,博客地址为 http://blog.csdn.net/caozhk,原文链接为 点我
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多普勒失真信号重采样的Matlab仿真分析 的相关文章

随机推荐

  • 【React Native】定位获取经纬度

    RN 文档上的定位功能需要谷歌框架支持 xff0c 无疑带来了一些麻烦 github 上也有一些开源库 xff0c react native geolocation service等 但是这里还有一个更简便的位置获取 API 使用内置对象n
  • centos7系统下Python2.7升级到Python3.6踩的坑(yum失效,并非简单修改yum文件头)

    centos系统自带的Python2 7用的好好的 xff0c 我非手贱要去升级 xff0c 结果很严重 xff0c 正在运行服务器里面的yum崩了 xff0c 反复尝试了网上提到的几乎完全一致的解决方法 xff1a 将 usr bin y
  • 关于 Android Studio 4.0 创建新的activity和fragment 发现不存在

    1 在 app文件下面的 build gradle里面 注释以下代码
  • RAR文件格式-笔记

    RAR RAR 文件头 52 61 72 21 1A 07 00RAR 文件尾 C4 3D 7B 00 40 07 00 Rar 文件主要由标记块 xff0c 压缩文件头块 xff0c 文件头块 xff0c 结尾块组成 其每一块大致分为以下
  • pptv电话面试

    1 8种基本数据类型 2 String是基本数据类型吗 3 try return 1 catch return 2 finally return3 4 线程池 5 spring实现原理 6 s
  • Linux之systemd服务配置及自动重启

    Linux之systemd服务配置及自动重启 0 背景 在linux上开发时 xff0c 往往需要将自己的程序做成服务 xff0c 并且实现服务开机自动重启 xff0c 以及服务崩溃后自动重启功能 xff0c 本文就对该功能的实现做简单介绍
  • C++中类与对象的关系

    C 43 43 是一门面向对象的编程语言 xff0c 理解C 43 43 xff0c 首先要理解类 xff08 Class xff09 和对象 xff08 Object xff09 这两个概念 C 43 43 中的类 xff08 Class
  • 主定理的证明及应用举例

    主定理 主定理最早出现在 算法导论 中 xff0c 提供了分治方法带来的递归表达式的渐近复杂度分析 规模为n的问题通过分治 xff0c 得到a个规模为n b的问题 xff0c 每次递归带来的额外计算为c n d T n lt 61 aT n
  • Java设计模式 | 观察者模式解析与实战

    概述 观察者模式是一个使用率非常高的模式 xff0c 它最常用的地方是 GUI 系统 订阅 发布系统 这个模式的一个重要作用就是解耦 xff0c 将被观察者和观察者解耦 xff0c 使得它们之间的依赖性更小 xff0c 甚至做到毫无依赖 以
  • blob excel文件导出

    vue 项目中excel文件导出 xff1a exportData 点击方法名称 jjrExport this years then res 61 gt this years为请求参数 console log res const type
  • 知识管理——学习篇

    你的知识需要管理 田志刚 2009年11月 现在 xff0c 根据本书的理念 xff0c 你的使命不仅仅是获取该书的知识 xff08 获取什么 xff1f 他的前瞻性思考判断 xff0c 人家10年前有这种知识管理预见和意识 xff01 作
  • dependencyManagement_前进的火车_新浪博客

    dependencyManagement使用简介 Maven中的dependencyManagement元素提供了一种管理依赖版本号的方式 在dependencyManagement元素中声明所依赖的jar包的版本号等信息 xff0c 那么
  • 【Redis】Redis简介与基本特性

    简介 Redis 全称为 Remote DIctionary Server xff0c 本质上是一个 key value 存储系统 xff0c 属于跨平台的非关系型数据库 Redis 官方对它的定义是 xff1a Redis is an o
  • 【Java 集合类】Collections 类源码分析

    Collections 类源码分析 包路径 xff1a jdk1 8 0 111 rt jar java util Collections java Collections是JDK提供的工具类 xff0c 同样位于java util包中 它
  • 首个Adobe XD教程丨如何用Adobe Experience Design (XD)快速设计图标

    提示 xff1a 阅读本文前建议先从 码农与产品经理看过来 教你用Adobe Xd轻松做原型设计 文章入手 xff0c 会更加学度的掌握此建模神器的精髓http www zoomla cn blog techs 3080 shtml 逐浪小
  • 关于ubuntu下终端打开一闪就退出的一种情况

    终端ctrl 43 alt 43 t后终端一闪即过 首先你换一下访客进入ubuntu查看是否可以打开终端 可以 xff0c 请接着往下看 xff0c 否则抱歉 xff01 首先请你回想一下 xff0c 在这之前你对系统有没有做过什么更改 x
  • 如何转行游戏行业及我眼中的理想游戏开发团队

    前置内容 xff1a 很久没有写文章啦 xff0c 今天就来继续和大家聊一聊关于游戏制作的一些东西 今天主要聊两个方面 xff0c 一个是其他行业转游戏行业的一些注意事项以及需要具备的东西 xff1b 第二是和大家聊一聊我心目中理想的游戏开
  • 浅谈重载new操作符

    new是C 43 43 里非常重要的一个关键词 xff0c 用于申请内存 初始化对象 俗话说 有借有还再借不难 xff0c 通过new向操作系统 借 到的内存用完后必然要 还 回去 xff0c 所以对应地还有一个delete操作符与new共
  • SettingProvider工作原理

    1 基本介绍 SettingsProvider是一个提供设置数据共享的Provider xff0c 可以简单理解为数据库 xff0c 它包含全局性 系统级别的用户编好设置 xff0c 例如在手机中的Settings应用 xff0c 用户可以
  • 多普勒失真信号重采样的Matlab仿真分析

    多普勒失真信号重采样的Matlab仿真分析 应用场景 水声通信指的是使用声信号在水中传输数据 相对而言 xff0c 电磁信号在水中吸收严重衰减过快 xff0c 光信号受水中悬浮颗粒的影响 xff0c 也无法完成远距离传输 这两种信号的传播距