信号采样与抽取

最近测试一个上古时期的一个pipeline-SAR ADC, 这个ADC设计120MS/s,开始测试时采样速率设置为10M,但是采得的波形一直很奇怪。发现这个ADC在输出级加了一个数字抽取器,通过移位寄存器使其每隔16384个点输出一个,说是可以通过此种方法来消除高频噪声。由于对于这个操作比较怀疑,因此在MATLAB上进行了模拟。

理论分析:假如采样频率为10M,那么本身的理论信号带宽为5M。如果加上数字抽取器,每隔16384个点输出一个值,那么就相当于把采样频率缩小了16384倍,那么可以量化的信号带宽就会变为305.18Hz。一旦有高于此频率的信号量,那么就会发生混叠,使采样出错。

代码如下: 代码中将信号的频率缩小1000倍。

 


close;
clear all;
fs = 10000; %sampling freq 10k
T1= 1/fs;
L = 10000e2;  %num of sampling points
t = (0:L-1)*T1; %sampling time
f = 50; %信号的频率 OSR=200
y = sin(2*pi*f*t) + sin(2*pi*170*t)+2*randn(size(t));%原始信号

extr = 1024 %extraction rate
fs2 = fs/extr; %采样频率为fd2
T2 = 1/fs2;
t2 = (0:(L-1)/extr)*T2;
y2 = sin(2*pi*f*t2+0*pi) + sin(2*pi*170*t2)+1.1*randn(size(t2));
plot(t,y,'b-',t2,y2,'r-*');
%plot(t,y);
axis([0 5 -1.5 1.5]);

%fft
NFFT = 2^nextpow2(L);
Y = fft(y, NFFT)/L;
f0 = fs/2*linspace(0, 1, NFFT/2+1);
figure;
subplot(121);
plot(f0, 2*abs(Y(1:NFFT/2+1)))
axis([ 0 500 0 1]);
xlabel('Frequency(kHz)');
ylabel('|y(f)|');

%fft extracted points
L_n = L/extr;  % extracted num of points
NFFT2 = 2^nextpow2(L_n);
Y2 = fft(y2, NFFT2)/L_n;
f2 = fs2/2*linspace(0, 1, NFFT2/2+1);
subplot(122);
plot(f2, 2*abs(Y2(1:NFFT2/2+1)))
%axis([ 0 5 0 1]);
xlabel('Frequency(kHz)');
ylabel('|y(f)|');

 

输入信号中最高频率为170,因此相当于本身OSR=58.8,因此当抽取值少于OSR时,正常。extr表示每多少数抽取一个,下图为当extr = 32时的频谱。

下图为extr=128时的频谱, 发现频谱已经折叠到了低频处,也出现了所谓的抑制高频噪声,但如果输入信号比较复杂,会不会出现错误有待进一步学习。

将输入信号变为只有50, 噪声=0.1,在extr=128下,此时还属于Nyquist, 时频域如下。

将输入信号变为只有50, 噪声=0.1,在extr=1024下,此时抽取后相当于欠采样, 时频域如下。尽管是欠采样,由于输入信号为单一频率,所以欠采样也可以恢复出一个其他频率的正弦波。

 

 

将输入信号变为只有50, 噪声=0.1,在extr=2048和4096下,此时抽取后相当于欠采样, 时频域分别如下。尽管是欠采样,由于输入信号为单一频率,所以欠采样也可以恢复出一个其他频率的正弦波。

 

 

当extr不是2的指数关系时,频谱时错误的,下图为exr=4000时.why?

2. 当输入信号50k,采样39.0625k和19.5k时时频如下,欠采样恢复后频率为50-39=11,19.5*3-50=8.5.

 

版权声明:本文为sinat_41817009原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_41817009/article/details/82689877

智能推荐

嵌入式Linux——应用调试:用户态打印段错误信息

简介:     很多时候我们会遇到段错误:segmentation fault,而段错误有时是由内核引起的,有时是由应用程序引起的。在内核态时,发生段错误时会打印oops信息,但是在用户态时,发生段错误却只会打印segmentation fault而并不会打印其他的信息。所以本文主要介绍在用户态时,通过修改内核设置和添加启动参数来打印引发segmentati...

springboot1.4.1整合logback 遇到的问题

springboot1.4.1整合logback 遇到的问题 项目使用了springboot1.4.1整合logback,然而设置的过期时间15 并没有生效, 2GB达到2G自动删除也没有生效,仅仅实现了按大小分割。 经过查看pom 父工程内的源码发现是默认的logback版本是1.1.7,而过期时间配置是在logback 1.1.8以后才支持的。 不得不说这是springboot1.4.1 的b...

记一次C/S架构的渗透测试

概述 目标站点是http://www.example.com,官网提供了api使用文档,但是对其测试后没有发现漏洞,目录、端口扫描等都未发现可利用的点。后发现官网提供了客户端下载,遂对其进行一番测试。 信息收集 先抓了下客户端的包,使用Fiddler和BurpSuite都抓不到,怀疑走的不是HTTP协议,用WireShark查看其确实用的是HTTP协议,但是数据包不好重放,这里最后使用了WSExp...

Linux:结合Securecrt进行文件上传(lrzsz)P2

1、安装rzsz软件   2、点击Scurecrt的option——X/Y/Z配置上传和下载目录   3、首先在Linux里切换到一个目录,然后用rz命令,文件就会上传到钙Linux的目录下   只要敲rz即可,然后在弹出的对话框里选择需要上传的文件即可 4、下载文件用sz   下载单个文件:在当前目录下有该文件     sz filename   下载...

SQL 提示作为 布局 生存工具指南

下面是一些展示AdventureWorks中表现最好的销售人员并列出他们的经理的结构化查询语言代码。 它产生以下结果。 所以,代码是有效的,但它是丑陋的。 如果我需要理解和改进代码,我首先需要把它变成可读的形式。 我有结构化查询语言提示,所以我可以按下计算机的ctrl按键键 踢你自己),它会应用默认的内置代码样式,并对此进行修复。 不,不是,因为我相信你仍然不喜欢它的格式。 没有两个开发人员能够就...

猜你喜欢

Vue+Springboot解决数据传输时参数格式不匹配问题

前端:使用的是ant design vue ,端口号为8000 后端:使用的是springboot框架开发,端口号为8080 需求:已经解决跨域问题,前端发送登录的信息给后台,后台接收不到 样例: 前端: 后台: 请求的数据格式为json格式,后台参数类型不匹配 解决方案 第一种: 修改后端,参数类型: 第二种方式: 在前端vue框架中加入qs插件,qs 是一个增加了一些安全性的查询字符串解析和序...

Flex布局做出自适应页面--语法和案例

本文发布在: github项目地址:https://github.com/tenadolanter/flex-layout-demo SegmentFault地址:https://segmentfault.com/a/1190000012916949/ CSDN地址:http://blog.csdn.net/qq_34648000/article/details/79115294 博客园地址:ht...

Java - 基于 Apache POI 创建 Excel 文件

基于 Apache POI 创建 Excel 文件 准备 新建 Maven Project,引入依赖: 创建行和列 设置列宽 设置列宽(第 19 行): 注意:其他行的首列的宽度是受第一行、第一列的影响而变宽,并非我们设置的。 设置字体颜色 设置字体颜色(第 25 ~ 31 行): 设置网页超链接 设置网页超链接(第 18、27 ~ 29 行): 参考 java操作excel常用的两种方式...

python基础-质数判断及优化

文章目录 一、问题描述 二、代码 三、问题2优化 四、数学补充 一、问题描述 质数判断条件: 质数是只能被1和它自身整除的数,1不是质数也不是合数。 二、代码 问题1代码 问题2代码 三、问题2优化 优化方案: 模块,通过模块可以对Python进行扩展 引入一个time模块,来统计程序执行的时间 time()函数可以用来获取当前的时间,返回的单位是秒 获取程序开始的时间,以运行时间来衡量优化结果。...

部署jenkins+svn持续集成

部署环境:CentOS7+jdk8 svn版本是windows,jenkins是linux 然后下载jenkins的yum源文件,获取jenkins的下载** 输入本机ip+端口,然后在这个web界面显示的路径里把**复制出来,下一步后选择推荐插件安装,后面需要用的插件可以再安装,等待安装完成后,第一次登陆不需要密码,可以设置登陆用户。 然后配置全局设置 如果你是yum安装得git,按照我得写,如...