多普勒失真信号采样Matlab模拟分析
多普勒失真信号采样Matlab模拟分析
方案
- 水声通信指的是使用声信号在水中数据传输。
相对而言。电磁信号在水中吸收严重衰减过快,光信号受水中悬浮颗粒的影响,也无法完毕远距离传输。
这两种信号的传播距离约为数百米,而声信号在水中传播距离达到数十千米。成为水下通信的首选方式。
- 水声通信的一个重大挑战就是运动带来的多普勒。
多普勒造成信号的频率漂移,影响系统性能,因此很有必要消除多普勒带来的影响。而多普勒在时域的表现为信号的长度压缩和扩展。即'y(t) = x((1+a) * t)',当中
a为多普勒因子。而假设预计出多普勒因子,之后採用重採样技术就能够恢复得到原始信号x(t)。
= y( t/(a+a) ) - 重採样的意义就是插值。从一个信号插值得到多普勒影响前后的信号。而
1+a一般为小数,尽管採用多相滤波能够达到非常好的插值效果,但复杂度太高。相比之下,线性插值、样条插值等方式运算量小,在做数字系统的时候更加合适
Matlab一维插值
- MATLAB中的插值函数为
interp1(),其调用格式为yi=interp1(x,y,xi,。当中x,y为观測数据点,xi为插值(自变量)向量,yi为xi的插值结果(函数值)。
'method') '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。原文链接为我点
版权声明:本文博客原创文章,博客,未经同意,不得转载。
多普勒失真信号采样Matlab模拟分析的更多相关文章
- csdn vip文章:使用matlab模拟镜头失真
原文地址 https://blog.csdn.net/lircsszz/article/details/80249017 最近在研究图像校正,现将镜头失真中常见的径向畸变(radial distort ...
- Linux信号(signal) 机制分析
Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...
- MATLAB模拟布丰投针实验
MATLAB模拟布丰投针实验 标签(空格分隔): 算法 Buffon's Needle 桌面上有距离为a的若干平行线,将长度为L的针随机丢在桌面上,则这根针与平行线相交的概率是多少?假定L < ...
- 信号基础知识----线性调频信号LFM //matlab命令:chirp
%关于线性调频信号(LFM) %参考书目:声呐技术,第二章P33 clc;close all;clear all;%参数----------------------------------f0=100 ...
- linux下 signal信号机制的透彻分析与各种实例讲解
转自:http://blog.sina.com.cn/s/blog_636a55070101vs2d.html 转自:http://blog.csdn.net/tiany524/article/det ...
- Linux信号(signal) 机制分析(转)
[摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执 ...
- Linux信号(signal) 机制分析-(转自h13)
[摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核对于信号的处理流程包括信号的触发/注册/执 ...
- Python开发——排队问题随机模拟分析
案例:主要是基于"蒙特卡罗思想",求解排队等待时间问题 场景:厕所排队问题 1.两场电影结束时间相隔较长,互不影响: 2.每场电影结束之后会有20个人想上厕所: 3.这20个人会在 ...
- Matlab中imread函数使用报错“不应为MATLAB 表达式”分析
问题描述: 使用imread读取特定路径下的文件时,会提示出错! >> mytest错误: 文件:mytest.m 行:10 列:87不应为 MATLAB 表达式. 出错行: Images ...
随机推荐
- Java 将字节数组转化为16进制的多种方案
很多时候我们需要将字节数组转化为16进制字符串来保存,尤其在很多加密的场景中,例如保存密钥等.因为字节数组,除了写入文件或者以二进制的形式写入数据库以外,无法直接转为为字符串,因为字符串结尾有\0,当 ...
- PHP如何添加内置的扩展
什么时候server上PHP已安装.需要额外补充PHP如何扩展?你并不需要再次安装PHP.同phpize我们可以在原PHP安装扩展直接的基础上,. 这次编译只不过单独编译PHP的扩展库.接下来将编译好 ...
- maven/eclipse搭建ssm(spring+spring mvc+mybatis)
maven/eclipse搭建ssm(spring+spring mvc+mybatis) 前言 本文旨在利用maven搭建ssm环境,而关于maven的具体内容,大家可以去阅读<Maven 实 ...
- Windows 8实例教程系列 - 数据绑定高级实例
原文:Windows 8实例教程系列 - 数据绑定高级实例 上篇Windows 8实例教程系列 - 数据绑定基础实例中,介绍Windows 8应用开发数据绑定基础,其中包括一些简单的数据绑定控件的使用 ...
- CentOS6.5设备MRBS
//--------------------------------------软件必须安装-----------------------------------// # yum install –y ...
- 原生js判断css3动画过度(transition)结束 transitionend事件 以及关键帧keyframes动画结束(animation)回调函数 animationEnd 以及 css 过渡 transition无效
上图的 demo 主要讲的 是 css transition的过渡回调函数transitionend事件: css3 的时代,css3--动画 一切皆有可能: 传统的js 可以通过回调函数判断动画 ...
- url参数中出现+、空格、=、%、&、#等字符的解决办法
url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...
- c#里listview里如何获取点击的是哪一列
很多时候c#里会用到listview,又会给它添加很多的列,可以设置点击列的标头实现按照这列的内容排序等功能,然而点击不同列排序的方法是不一样的,这时候就需要知道,我到底是点击了哪一列,比如点击名字列 ...
- Mybatis分页插件更新
分页插件演示:http://blog.csdn.net/isea533/article/details/23831273 分页插件演示样例:http://blog.csdn.net/isea533/a ...
- HDU--3829--Cat VS Dog【最大点独立集】
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题意:动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些 ...