FPGA信号截位策略
在FPGA中,随着信号处理层次加深,对信号进行乘、累加、滤波等运算后,可能输入时仅为8位位宽的信号会扩展成几十位位宽,位宽越宽,占用的硬件资源越多,但位宽超过一定范围后,位宽的增宽并不会对处理精度带来显著的改善,这时就需要对信号进行截位。写过FPGA HDL代码的童鞋应该都知道,截位是最为经常的一种操作。
一般来说,截位只需要截掉低几位即可,这时最简单的做法:对于无符号数来说,这样做也没有问题;当然也有四舍五入的截位方法,就是给地位加1后再进行截位。
下面讨论三种截位策略:1)直接截位;2)复数截位后加1;3)复数取绝对值后再截位。
在matlab中模拟FPGA截位过程,运行如下一段程序,得到四幅图。
a=10000*randn(1,1000);
%% 截位方式一:直接截位
b=floor(a/2^5); %截去低5位
afft=fft(a);
bfft=fft(b);
figure; %观察原始信号与截位后信号的频谱
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信号');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信号');
b=floor(a/2^12); %截去低12位
afft=fft(a);bfft=fft(b);
figure; %观察原始信号与截位后信号的频谱
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信号');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信号'); %% 截位方式二:负数截位后加1
b=zeros(1,length(a));
for ii=1:length(a) if a(ii)<0 b(ii)=floor(a(ii)/2^12)+1; %截去低12位后加1 else b(ii)=floor(a(ii)/2^12); %直接截位 end
end
afft=fft(a);bfft=fft(b);
figure; %观察原始信号与截位后信号的频谱
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信号');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信号');%% 截位方式三:负数取绝对值后再截位
b=zeros(1,length(a));
for ii=1:length(a) if a(ii)<0 b(ii)=-floor(-a(ii)/2^12); %负数取绝对值后截去低12位再变回原来符号 else b(ii)=floor(a(ii)/2^12); %直接截位 end
end
afft=fft(a);bfft=fft(b);
figure; %观察原始信号与截位后信号的频谱
subplot(2,1,1);plot(abs(afft)/max(abs(afft)));grid;title('原始信号');
subplot(2,1,2);plot(abs(bfft)/max(abs(bfft)));grid;title('截位信号');
图一:直接截去低5位
图二:直接截去低12位
图三:截去低12位且复数截位加一
图四:截去低12位且复数取绝对值后再截位,截位完再变回原先的符号
由图三和图四可以看出,采用第二种和第三种截位策略后,直流分量消失。
其实第三种截位策略达到了这样一种效果:一对相反数在截位后仍然是一对相反数。这种效果在直接截位时对于奇数是达不到的。
其实直接截位之所以出现直流分量可以这样直观的来认识:从matlab程序中也可以看出,对于FPGA信号截位来说,实际上就是向下取整;对于有符号数来说,整数向下取整在数轴上是向原点零靠近,然后负数向下取整则是远离原点零了,这是因为负数以补码形式表示,它的补码所对应的无符号数经截位后向原点零靠近了,换算成有符号数的负数时,则是远离原点零了。因此截位实际造成的效果是符号整体向负无穷方向平移了,即对一个白噪声序列来讲,原本均值为零,截位后值变为了负数。
FPGA信号截位策略相关推荐
- fpga数据位宽截取_FPGA信号截位策略研究
在FPGA中,随着信号处理的层次加深,对信号进行乘.累加.滤波等运算后,可能输入时仅为8位位宽的信号会扩展成几十位位宽,位宽越宽,占用的硬件资源就越多,但位宽超过一定范围后,位宽的增宽并不会对处理精度 ...
- 常用FPGA截位扩位方法及代码
FPGA在进行数字信号处理时会涉及到很多的截位扩位操作,如FFT/IFFT,FIR滤波等.一般的位宽操作主要有扩高位,扩低位,截高位,截低位. 扩高位 在信号的高位填补多个符号位,信号的幅值不会发生变 ...
- 北斗三号b1c频点带宽_【导航论坛】北斗三号卫星导航信号及接收策略
原标题:[导航论坛]北斗三号卫星导航信号及接收策略 编者按 以"5G/GNSS高精度定位与空间数据深度应用"为主题的高峰论坛上,来自清华大学的陆明泉教授为与会代表带来了题为< ...
- 基于FPGA的两位按键控制LED数码管加减计数实验
两位按键控制LED数码管加减计数实验 这是一篇拖了一个多月的文章,主要是基于FPGA利用按键消抖原理与动态数码管驱动原理相结合,来实现一个利用两位按键来控制数码管实现0-99的加法计数或者减法计数功能 ...
- 北斗三号频点_【导航论坛】北斗三号卫星导航信号及接收策略
原标题:[导航论坛]北斗三号卫星导航信号及接收策略 编者按 以"5G/GNSS高精度定位与空间数据深度应用"为主题的高峰论坛上,来自清华大学的陆明泉教授为与会代表带来了题为< ...
- 北斗三号卫星导航信号及接收策略
一.北斗三号卫星导航信号的特点 从上个世纪九十年代初北斗一号立项到现在,我国的北斗卫星导航系统已经走过了二十多年的发展历程.根据三步走的发展计划,先后经历了北斗一号和北斗二号两个阶段,目前正在向北斗三 ...
- 北斗三号b1c频点带宽_北斗三号卫星导航信号及接收策略
北斗三号卫星导航信号及接收策略 北斗三号系统的正式部署序幕,也终于揭开了北斗三号导航信号的面纱.根据这个ICD测试版,我们可以了解到北斗三号的一些基本情况,包括星座结构.导航信号.服务功能等,但服务性 ...
- 京微齐力:基于HMEP060的心率血氧模块开发(1:FPGA发送多位指令)
目录 日常·唠嗑: 实验结果 一.硬件解析 1.国产FPGA:HMEP060 2.MAX30102心率传感器模块 二.程序设计 1.波特率计算(25MHz时钟) 2.顶层模块 3.子模块 三.工程获取 ...
- 数据传输完整性_基于IBIS模型的FPGA信号完整性仿真验证方法
人工智能与深度学习等领域的快速发展,使得FPGA等器件应用范围愈加广泛,同时也要求器件的开关速率加快.引脚数量增多.但陡峭的时钟边沿和增加的引脚数使得杂散.耦合.寄生电容电感会对器件产生诸多信号完整性 ...
- SQLyog 的 截位数据库(又叫截断数据库)的作用
突然发SQLyog有个功能叫截位数据库,位置在:右键数据库-更多数据库操作-截位数据库 试了一下,是把数据库下所有表给清空了,相当于将所有表执行了一次 TRUNCATE
最新文章
- JAVA抽象类和接口的区别【附经典分析用例Door】
- 高手都不用dw_雅诗兰黛DW粉底液好用吗?雅诗兰黛DW粉底液如何辨别真假?
- VTK:结构化网格之StructuredGrid
- android studio 连不上设备,Android Studio-设备已连接但“脱机”
- Apache Flink 零基础入门(八)Flink中指定算子的方式
- 随笔② Java中的关键字 --- final关键字
- cad渐开线齿轮轮廓绘制_如何在机械CAD软件中自动生成齿轮
- android在副屏中运行一个应用_android一个app打开另一个app的指定页面
- 服务目录-运维管理SLA服务
- 宏基ACER E1-471G拆机心得及注意事项
- Autocad中批量调整增强属性块中的元素的位置
- 支付路由适配服务技术实现
- java文章采集爬虫代码示例
- 前端研发生态环境构建经验谈
- Ubuntu 中文字体美化方案大全 (1): 概述篇
- OKCC外呼中心为什么要把语音引入WEB中?
- 安卓手机视频消重 去除qq短视频水印链接
- SWUST OJ 980
- 【日常】矩阵正态分布参数检验问题
- mysql 取24小时数据_mysql获取24小时前数据