关于DSP中浮点与定点运算的C语言编程方法

关于DSP中浮点与定点运算的C语言编程方法 最近也是在玩DSP,在ADI公司生产的DSP芯片BF527上做DSP工作。 关于在嵌入式开发中需要做DSP工作,我们常常需要用定点运算来提高处理效率,降低功耗。 定点和浮点计算各有长短,此处有篇文章出自ADI公司网站,讨论了定点和浮点的trade off权衡利弊。 请参考: http://www.analog.com/en/content/Fixed-Point_vs_Floating-Point_DSP/fca.html 至于浮点编程,个人理解是用float一路编程到底就够了,挺粗放的,但是本人在做fft的c语言实现时候遇到高阶FFT的浮点运算导致硬件错误的问题,估计跟处理时间过长有关,没有深究。故此文是想学习一下如何用定点编程的方式完成数字信号处理的问题,为日后做高阶复杂多维的数字信号处理运算编程打好基础。 关于DSP中浮点定点编程,有个写得很好的教材:第3章 DSP芯片的定点运算.doc 此处转载一位afreez的仁兄的贡献:特此感谢! ================================ 作者:afreez 北京-中关村 联系方式:afreez.gan@gmail.com (欢迎与作者交流) 初次发布时间:2006-12-08 初次发布在: http://blog.csdn.net/ganxingming/ 不经本人同意,不得用语商业或赢利性质目的,否则,作者有权追究相关责任! 与afreez一起学习DSP中浮点转定点运算–前言 与afreez一起学习DSP中浮点转定点运算–浮点与定点概述 与afreez一起学习DSP中浮点转定点运算–浮点数的存储格式 与afreez一起学习DSP中浮点转定点运算–定点数的加减乘除运算 与afreez一起学习DSP中浮点转定点运算–定点数模拟浮点数运算及常见的策略 与afreez一起学习DSP中浮点转定点运算–举例及编程中的心得 解决了个困扰了2天的问题,定点运算问题

READ MORE

MIT电子系教学计划、C语言FFT算法实现、kbhit()函数getch函数等

Java 学习个人笔记(二)(March 19,2013 ) 原创 发布博客 2013.03.20 · 999 0 秘密显示技术:戴上眼镜才能看到你的内容 翻译 发布博客 2013.02.21 · 7319 0 麻省理工学院-电子与计算机科学系:专业设置及各专业教学计划 转载 发布博客 2013.02.19 · 3183 1 C语言编译的顺序。关于 .c 文件 .h 文件的用法。Makefile文件简单概念。 原创 发布博客 2013.01.19 · 3664 0 C语言实现FFT算法 - 开发手记 原创 发布博客 2013.01.19 · 3054 1 linux下kbhit()函数 getch函数。 原创 发布博客 2013.01.17 · 1852 0

READ MORE

Java 学习个人笔记(二)(March 19,2013 )

Java 学习个人笔记(二)(March 19,2013 ) – Java 学习个人笔记(二)– 写这个个人笔记完全是出于记录自己所学,方便本人日后参考,可能很零散。这个笔记是建立在C语言编程基础上,本人学习Java只学习它与C语言不同的地方,或者我在C编程过程中很少用到的地方。所用的教材是Youtube一位达人做的视频:Java编程简明教程 by Thenewboston(Youtube) 每次开一贴,学习Java笔记都记在这里。所写内容都是个人菜鸟级的理解,肯定有疏漏不足。 Anyway, 您的回复讨论支持是我前进的动力! ================= March 19, 2013 ========================= 2.1很久没有回来,开始之前,先理解“面向对象编程”的几个关键的概念: Object is the set of a class. Object is the fundamental Element of your program. Your processing code and data is packed into Class, so that your program can be used repeatly , flexibly and extentable . 【类】(Class)定义了一件事物的【抽象】特点。通常来说,类定义了事物的属性state, 和它可以做到的功能(它的行为Method)。 【对象】(Object)是类的【实体反应】。类是对象的抽象, 对象是类的具体表现形式。 【方法】(Method,可看成能力)是定义一个类可以做(can)的,但不一定会(will)去做的事。 【消息传递】(Message Passing)一个对象通过接受消息、处理消息、传出消息或使用其他类的方法来实现一定功能,这叫做消息传递机制。 【继承】继承性(Inheritance)是指,在某种情况下,一个类会有“子类”。子类具备父类的所有功能特点。一个父类可以有多个子类,子类之间的功能不能互用。最重要的特征,继承机制解决的软件的重用问题 至于封装性(Encapsulation),多态性/多型(Polymorphism), 抽象性(Abstraction),请参阅:1、wikipedia面向对象程序设计。 2、面向对象程序设计的4个主要特点 When you design a class, think about the objects that will be created from that class type.

READ MORE

秘密显示技术:戴上眼镜才能看到你的内容

秘密显示技术:戴上眼镜才能看到你的内容 参考:http://news.discovery.com/tech/hack-lcd-monitor-111130.htm 翻译: 黑掉你自己: 一个超级隐秘的LCD显示器 Nov 30,2011 by NIC HALVERSON 假如你有一些 paint thinner(油漆稀释剂) , 一副眼镜, 一个box cutter 和一个旧的LCD电脑显示器。 快点,你该做什么?让我告诉你。 你去所有的MacGyver 并且做了一个超级隐秘的私人显示器,他能让你的秘密agent电脑用裸眼侦查起来不可见。 对,真的。不再需要把你的过时的监视器带到 Salvation Army。一个 Instrucable 的用户最近展示了怎样黑掉一个老的LCD显示器,做一个屏幕内容,它只能在戴着特殊眼镜才能看到。不戴眼镜就是一片白。看看怎么做的: LCD显示器是由2层薄膜构成 – polarized and anti-glare(极化和防眩光)。用你的box cutter刀片去掉这两层薄膜。剥离磨砂的anti-glare涂层,因为它不必要。同样的,去掉极化膜,但是不要丢弃,因为它是让你的骇客计划成功的秘密材料。 下一步,用你的anti-glare(涂料稀释剂),或者其他的溶剂solvent,软化保留在玻璃上的adhesive(粘胶)。你可能需要多试几次你的溶剂的材质,但是用户dimovi提出了一种方法:建议把几层纸巾铺在屏幕上,把它们浸在溶剂中,放在那儿。在你完成了用塑料或者木头除掉残留的粘胶以后,重新装配显示器。 用你的太阳镜 - 或者其他任何的框架 - 去掉透镜。用你刚才取下来的极化膜放在镜框上。成了! 极化膜通常是用来从可见内容上滤掉显示器的背景光的。如果没有它,显示器看起来就全是背景光,一片空白。但是带上你的新眼镜,你秘密私人显示的内容就全部显示(revealed)出来了。 看看应用视频: 《视频: Youtube-LYNX ANARCHY 全球第一个隐形广告》http://v.youku.com/v_show/id_XNTE2ODc3OTY0.html

READ MORE

麻省理工学院-电子与计算机科学系:专业设置及各专业教学计划

麻省理工学院-电子与计算机科学系:专业设置及各专业教学计划 要想系统的学习某一门专业,请使用官方教学计划,权威,系统。 参考链接:http://www.bit.edu.cn/jyjx/bksjy/gzyljzykcsz/14298.htm 链接加入:麻省理工学院-电子与计算机科学系-开放课程 表1 北京理工大学:软件工程专业指导性教学计划进程 课 程 类 别 课 程 性 质 课 程 代 码 课 程 名 称 学 分 总 学 时 讲 课 学 时 实 验 学 时 上机学时 各学期平均周学时分配 1 2 3 4 5 6 7 8 基础教育 必修课 09000375 09000376 09000377 09000378 大学英语Ⅰ、Ⅱ(普通班,G) 大学英语口语Ⅰ、Ⅱ(普通班,G) 12 192 192 6 6 基础教育 必修课 12000068 计算机科学导论 2 32 24 8 2 基础教育 必修课 12000073 C语言程序设计 3 48 32 16 3 基础教育 必修课 12000033 程序设计方法与实践 2 32 8 24 2 基础教育 必修课 07000149 07000150 微积分A(Ⅰ、Ⅱ) 11 176 176 6 5 基础教育 必修课 07000176 线性代数 3 48 48 3 基础教育 必修课 07000051 概率与数理统计 3 48 48 3 基础教育 必修课 09000417 思想道德修养与法律基础 2 32 32 2 基础教育 必修课 09000488 知识产权法基础 1 16 16 1 基础教育 必修课 09000490 中国近现代史纲要 3 48 32 16 3 基础教育 必修课 09000489 毛泽东思想、邓小平理论及“三个代表”重要思想 4 64 48 16 4 基础教育 必修课 09000191 马克思主义基本原理 3 48 48 3 基础教育 必修课 09000008 大学生心理素质发展 1 16 16 1 基础教育 必修课 99000001 99000002 99000003 99000004 体育(I~Ⅳ) 4 128 128 2 2 2 2 基础教育 选修课 12000056 组合数学 专项数学 任选2学分 2 32 32 2 基础教育 选修课 11000094 3D数学与算法 基础教育 选修课 11000095 算法分析与设计 基础教育 选修课 专项英语 4 64 64 2 2 基础教育 选修课 通识教育选修课 6 96 96 2 2 2 学科基础教育 必修课 01200256 数字电路与数字逻辑 2.

READ MORE

Connecting wifi from the command line, ubuntu or embedding ubuntu

ref: How to Connect WiFi from Terminal on Ubuntu 16.04 (added on Dec, 2019) reference:  http://code.google.com/p/ohmm-sw/wiki/LinuxTips#Connecting_to_Networks_on_the_Ubuntu_Command_Line and : http://www.ccs.neu.edu/course/cs4610/   LinuxTips   Updated Yesterday (24 hours ago) by martyv...@gmail.com Setting Up Your Own Linux Host Tweaks for a Virtual Machine on a Flash Drive Adding/Removing Users Connecting to Networks on the Ubuntu Command Line Passwordless SSH Remote X Window Display History The Old Way The Modern Way: Connecting from Server to Client The Modern Way: Connecting from Client to Server Setting Up Your Own Linux Host We recommend using Ubuntu Precise (12.

READ MORE

Java学习个人笔记(一)配置java环境变量(Feb04,2013 - )

         写这个个人笔记完全是出于记录自己所学,方便本人日后参考,可能很零散。这个笔记是建立在C语言编程基础上,本人学习Java只学习它与C语言不同的地方,或者我在C编程过程中很少用到的地方。所用的教材是Youtube一位达人做的视频:Java编程简明教程 by Thenewboston(Youtube)     每次开一贴,学习Java笔记都记在这里。所写内容都是个人菜鸟级的理解,肯定错误百出。    ---------- Oct 14, 2014 --------- 配置Java环境变量: http://www.oracle.com/technetwork/java/javase/downloads/index.html 下载安装JDK for x86 (32bit) or x64(64bit). 右键“计算机”-属性-高级系统配置-高级-环境变量-xxx的用户变量- 变量名:JAVA_HOME 变量值jdk的目录,例如本人:E:\Program Files\Java\jdk1.7.0_40 变量名: path 变量值: ;%JAVA_HOME%\bin ;%JAVA_HOME%\jre\bin 变量名:classpath 变量值: ;%JAVA_HOME%\lib ;%JAVA_HOME%\lib\tools.jar (For my backup:)<span style="white-space:pre"> </span>JAVA_HOME <span style="white-space:pre"> </span>F:\Program Files\Java\jdk1.8.0_20 //java jdk 1.8 <span style="white-space:pre"> </span>C:\Program Files\Java\jdk1.7.0_67 //java jdk 1.7 <span style="white-space: pre;"> </span>path <span style="white-space: pre;"> </span>;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin <span style="white-space: pre;"> </span>classpath <span style="white-space: pre;"> </span>;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar ———————–下面检验是否配置成功,运行cmd命令,在出现的对话框输入”java“命令,如果出现以下结果,则表明配置成功。————用法: java [-options] class [args…] (执行类) 或 java [-options] -jar jarfile [args…] (执行 jar 文件) 其中选项包括: -d32 使用 32 位数据模型 (如果可用) -d64 使用 64 位数据模型 (如果可用) -client 选择 "client" VM -server 选择 "server" VM 默认 VM 是 client.

READ MORE

MATLAB 笔记,关于Filter函数的功能和使用,求simple(冲激)和unit step(阶跃)响应

在MATLAB中,可以用函数y=filter(p,d,x)实现差分方程的仿真,也可以用函数 y=conv(x,h)计算卷积,用y=impz(p,d,N)求系统的冲激响应。 实现差分方程 先从简单的说起: filter([1,2],1,[1,2,3,4,5]) 实现 y[k]=x[k]+2*x[k-1] y[1]=x[1]+2*0=1%(x[1]之前状态都用0) y[2]=x[2]+2*x[1]=2+2*1=4 a. 下面程序是用来实现h和x的卷积的,分别用了filter和conv函数,两者函数得出的结果一样。 h = [3 2 1 -2 1 0 -4 0 3]; % impulse response x = [1 -2 3 -4 3 2 1]; % input sequence y = conv(h,x); n = 0:14; subplot(2,1,1); stem(n,y); xlabel('Time index n'); ylabel('Amplitude'); title('Output Obtained by Convolution'); grid; x1 = [x zeros(1,8)]; y1 = filter(h,1,x1); subplot(2,1,2); stem(n,y1); xlabel('Time index n'); ylabel('Amplitude'); title('Output Generated by Filtering'); grid; 要实现下式的冲击响应和阶跃响应,可以分别采用三种方法。 y[n]+0.75y[n-1]+0.125y[n-2]=x[n]-x[n-1]。 b. 单位冲激响应: (1)用filter函数  a1=[1,0.75,0.125]; b1=[1,-1]; n=0:20; x1=[1 zeros(1,20)]; y1filter=filter(b1,a1,x1); stem(n,y1filter); title('y1filter'); xlabel('x'); ylabel('y');  (2)用conv函数  a1=[1,0.

READ MORE

直接型FIR滤波器的C语言实现

直接型FIR滤波器的C语言实现    设输入数据x[N],输出数据y[N],滤波器系数h[n] 1.直接法(由y(m)=h(0)*x(m)+h(1)*x(m-1)+...+h(N-1)*x(m-n-1)); void fir(short x[], short h[], short y[]) { int i,j; long long sum; for (j = 0; j < N; j++) { sum = 0; for (i = 0; i < n; i++) sum += x[j-i] * h[i]; y[j] = sum >> 15; } }乘法器使用次数:N*n   2.逆推法: void fir(short x[], short h[], short y[]) { int i,j; long sum; for (j = 0; j < n; j++) { for (i = 0; i < N; i++) { sum = 0; sum = h[j] * x[i] y[i] += sum >> 15; } } }乘法器使用次数:N*n

READ MORE

使用Gnu gprof进行Linux平台下的程序分析

http://www.pcdog.com/edu/linux/18/10/u231314_1.html http://www.pcdog.com/edu/linux/18/10/u231314_2.html http://www.pcdog.com/edu/linux/18/10/u231314_3.html Compile source .c code for analysis, Create executable file:         >> gcc -pg test.c -o test  2. Launch executable file, Create gmon.out         >> ./test 3. Use gmon.out to analysis:         >>  gprof -b test gmon.out | less     or: >>  gprof -b test gmon.out | more 4.             常用的Gprof 命令选项解释:   -b不再输出统计图表中每个字段的详细描述。 -p 只输出函数的调用图(Call graph 的那部分信息)。 -q 只输出函数的时间消耗列表。 -E Name不再输出函数Name 及其子函数的调用图,此标志类似于 -e 标志,但它在总时间和百分比时间的计算中排除了由函数Name 及其子函数所用的时间。

READ MORE