DSP

DSP笔记

2019-07-13 12:00发布

DSP笔记 第1讲数字信号处理概述 ARM 高 FPGA(在纯软件的环境下开发硬件) DSP 中 单片机 低   软解软件进行处理 硬解硬件进行处理   1-D 信号:单个独立变量的一维函数, e.g. 语音信号。 2-D 信号:两个独立变量的二维函数, e.g. 图像信号。 M-D 信号:多个独立变量的多维函数, e.g. 彩 {MOD}视频信号(RGB) 。   信号分类 模拟信号处理 连续信号 数字信号处理 离散信号   系统的分类(按所处理的信号种类不同分类) -连续时间信号系统(模拟信号系统) -离散时间信号系统(略) -数字信号系统   运算的基本单元是延时器、乘法器和加法器。   数字信号处理系统的基本组成   (1)前置滤波器 将输入信号xa(t)中高于某一频率(称折叠频率,等于抽样频率的一半)的分量加以滤除。 (2)A/D变换器 在A/D变换器中每隔T秒(抽样周期)取出一次xa(t)的幅度,抽样后的信号称为离散信号。在A/D变换器中的保持电路中进一步变换为若干位码。 (3)数字信号处理器(DSP) 按照预定要求,在处理器中将信号序列x(n)进行加工处理得到输出信号y(n)。 (4)D/A变换器 由一个二进制码流产生一个阶梯波形,是形成模拟信号的第一步。 (5)模拟滤波器 把阶梯波形平滑成预期的模拟信号;以滤除掉不需要的高频分量,生成所需的模拟 信号ya(t)。 数字处理特点 1)高精度 2)高可靠性 3)灵活性 4)虚拟特点和更新   DSP概念 狭义理解可为DigitalSignal Processor —— 数字信号处理 广义理解可为DigitalSignal Processing ——数字信号处理技术   本科阶段主要介绍以傅里叶变换为基础的“经典”处理方法,主要包括: (1)离散傅里叶变换及其快速算法。 (2)滤波理论(线性时不变离散时间系统,用于分离相加性组合的信号,要求信号频谱占 据不同的频段)。 数字信号处理的标志:傅立叶变换   频域分析 时域分析在时域上无法分析的可以在频域上分析   应用 GPSDVD 图像识别 指纹识别   第2讲 matlab基础及其在dsp中的应用 Matlab的操作 M文件分为命令和函数文件 for循环 s=0; for n=1:100; s=s+1/n^2 end   function function y=functest(x) y=x^2+3.2*x-1.7 end   if function y=iftest(x) if x<=0; y=0; elseif x<=1; y=1; elseif x<=2; y=2*x; else y=2*x+5; end   plot fplot绘图 subplot子图 Figure新建绘图窗口 hold on保持上幅图 figure subplot(311) fplot('x+sin(x)',[-5,5]) subplot(312) fplot('x^2*exp(-x^2)',[-10,10]) subplot(313) fplot('x^4/2+x^2-1',[-10,10])   linspace矩阵 x=linspace(1,5); y1=sin(2*x); y2=sin(x.^2); plot(x,y1,x,y2)   求导数 一阶导数 >> syms x; >> y = 3*x-exp(x)/2+1; >> dy=diff(y); >> pretty(dy) pretty优化输出结果 可有可无 exp(x) 3 ------- 2 dy =3 - exp(x)/2 >> syms x y1 y2 >> y1=2^(sin(x));y2=log(log(log(x))); >> dy1=diff(y1),dy2=diff(y2) dy1 =2^sin(x)*log(2)*cos(x) dy2 =1/(x*log(log(x))*log(x))   二阶导数 >> syms x; >> diff((cos(x))^2*log(x),2) ans =2*log(x)*sin(x)^2 - 2*cos(x)^2*log(x)- cos(x)^2/x^2 - (4*cos(x)*sin(x))/x   求驻点 >> x=solve('x^2-x-6') x =-2x=3   特征值和特征向量 MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有3种: (1)E=eig(A)求矩阵A的全部特征值,构成向量E。 (2)[V,D]=eig(A) 求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。 (3)[V,D]=eig(A,'nobalance') 与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。   用一个简单命令求解线性系统 3x1+ x2- x3 =3.6 x1+2x2+4x3= 2.1 -x1+4x2+5x3= -1.4 A=[3 1 -1;1 2 4;-1 4 5];b=[3.6;2.1;-1.4]; x=A %注意除法的符号 x = 1.4818 -0.4606 0.3848   MATLAB提供了丰富的矩阵运算处理功能,是基于矩阵运算的处理工具。     考察函数           第3讲算法设计信号部分               用FFT(傅里叶变换)进行谱分析的Matlab实现 要求看懂程序 代码填空 例如 设模拟信号 ,以 t= 0.01n (n=0: N-1) 进行取样,试用fft函数对其做频谱分析。N分别为:(1) N=45;(2) N=50;(3) N=55;(2) N=60。 程序清单如下 %计算N=45的FFT并绘出其幅频曲线 N=45;n=0:N-1;t=0.01*n; q=n*2*pi/N; x=2*sin(4*pi*t)+5*cos(8*pi*t); y=fft(x,N); figure(1) subplot(2,2,1) plot(q,abs(y)) title('FFTN=45')     用FFT进行谱分析的Matlab实现 设计butterworth低通滤波器   信号波形 用以下程序可产生正弦波: t=0:0.001:50; y=sin(2*pi*50*t);plot(t(1:50),y(1:50)); 用以下程序可产生加入随机噪声的正弦波: t=0:0.001:50; y=sin(2*pi*50*t);s=y+randn(size(t)); plot(t(1:50),s(1:50)); 用以下程序可产生周期方波: t=0:0.001:2.5; y=square(2*pi*30*t);plot(t(1:50),y(1:50)); 用以下程序可产生周期锯齿波: t=0:0.001:2.5; y=sawtooth(2*pi*30*t);plot(t,y);   单位脉冲序列 n=[-3:3]; x=[(n-1)==0]; 生成单位脉冲序列 stem(n,x); axis([-3,3,0,1.5]) 标识坐标 矩形序列   正玄序列 >> n=[0:1:20]; >> x=3*sin(0.1*pi*n+pi/3); >> stem(n,x); 离散的序列值 >> axis([0,20,-4,4])   第3讲算法设计图像部分图片读取 按图像明暗程度和空间坐标的连续性划分,图像可以分为数字图像模拟图像。 模拟图像:也称光学图像,是指空间坐标和明暗程度连续变化的,计算机无法直接处理的图像,它属于可见图像。 数字图像:是指能被计算机存储、处理和使用的图像,是空间坐标和灰度均不连续,用离散数字表示的图像A/D(模/数转换) D/A (数/模转换)   采样(空间离散) 空间上连续的图像变化成离散点的操作成为采样,实际上是空间坐标(x,y)的数字化,即按一定的间隔(△x, △ y)将图像划分M行×N列的网格。 量化(灰度离散) 图片包含 {MOD}彩数目。   1 按灰度值可分为二值图像和多值图像 二值图像:每个像素灰度由0或1构成 多值图像:每个象素灰度由0~2n之间的数表示(n>1) 2 按波段量可分为单波段、彩 {MOD}或多波段数字图像   1图像读取 函数和语法 A = imread(filename,fmt) [X,map] = imread(filename,fmt)% X索引值map索引表 load filename %(对于索引图,*.mat格式的数据等)   tu=imread('football.jpg') tu=imread('forest.tif'); load woman   1图像显示 一般的方式 >> imshow(uint8(ans)) >> imread('D:Matlabwork加菲猫.jpg') >> A=imread('D:Matlabwork加菲猫.jpg'); >> imshow(uint8(A)); Matlab自带图片读取 >> load woman >> imshow(X,map)   imview('D:Matlabwork加菲猫.jpg')显示一张图片 不常用 图像显示函数及其调用方法 1)一般的方式 2)彩 {MOD}图像的显示 3)索引图的显示 4)彩 {MOD}图像的显示 5)灰度图像的显示 6)truesize的使用 7)图像显示中逻辑操作符的使用(常用于二值图像)   Matlab图像处理 1)图像的几何运算 resize不善于用subplot来进行操作 2)图像的亮度调整 3)图像中斑点的去除 4)图像的轮廓 5)图像的边界 6)图像间的运算 7)特定区域的处理   课程探究 Jpg图像压缩 图像复原 Fir低通滤波器 伪彩 {MOD} 切比雪夫滤波器 将图片转换为ASCII 车牌识别 图片处理程序   第4讲 55系列dsp基础 嵌入式产品关注性能、价格、功耗三个指标   德州仪器三大DSP系列   C55x根据功能的不同将CPU分为4个单元,即指令缓冲单元(I)、程序流程单元(P)、地址流程单元(A)和数据计算单元(D)指令缓冲单元 程序流程单元(P) 程序流程单元由程序地址产生电路和寄存器组构成。程序流程单元产生所有程序空间的地址,并控制指令的读取顺序。 地址流程单元(A) 地址流程单元包括数据地址产生电路、算术逻辑电路和寄存器组构成。 数据计算单元(D) 数据计算单元由移位器、算术逻辑电路、乘法累加器和寄存器组构成。D单元包含了CPU的主要运算部件。   指令流水线 第一阶段是取流水线,即从内存中取出32位的指令包,放入指令缓冲队(IBQ)中,然后为流水线的第二阶段提供48位的指令包。   第二阶段是指执行流水线,这部分的功能是对指令进行解码,完成数据的存取和计算。     VC5509A的主要特性 1.CPU 2.存储器 3.片上外设   引脚功能 1.并行总线引脚 2.中断引脚和复位引脚 3.位输入/输出信号引脚 4.时钟信号引脚 5.I2C引脚 6.McBSP信号引脚 7.USB引脚 8.A/D引脚 9.测试引脚 10.电源引脚   第5讲 CCS与DSP开发 CCS有两种工作模式,即 软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用于前期算法实现和调试。 硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序。(主要使用这种模式)   主机和开发板通过仿真器相连(RTDX、jtag-h)   第6讲 DSP编程基础 汇编语言的优点:程序执行效率高,硬件定时准确; 缺点:程序不够直观,可移植性和可维护性差 C语言特点:可移植性和可维护性好 程序设计是应用软件设计的基础,主要任务是利用C指令和伪指令编写源程序以完成指定的功能。   C54x C与ANSI C的不同点 1.所处理数据的性质不同 2.数据出输入输出设备不同 3.“死循环”的对待上不同 4.语法及数据结构细节上的不同 1)地址变量 所谓的地址变量实际上就是指定了具体地址的指针变量。 volatile short *mcbsp0_drr10=0x10;short sh_drr10_data;sh_drr10_data=*mcbsp0_drr10 2)I/O端口变量 ioport数据类型 porthex_num; 3)寄存器变量 寄存器变量的定义格式:registertype AR6 或 register type AR7   已初始化段: (1).text段,包含了可执行代码。 (2).cinit段,包含明显初始化的全局变量和静态变量。 (3).const段,包含字符串常数和全局变量。 (4).switch段,包含大型switch语句的跳转表 未初始化段 (1).bss段,包含了未初始化的全局变量和静态变量 (2).stack段,定义软件堆栈 (3).system段,为动态存储器函数malloc,calloc,realloc(这些函数由运行支持库提供)分配存储器空间   C54x C语言开发的存储器结构 (1)段的存储器定位 (2) 存储器模式小存储器模式:编译器默认的存储器模式。这要求.bss在128个字(一个数据页)范围内,这样编译器在编译成汇编时,不需要修改DP的值,程序代码简单,运算效率高。 高地址存放在高位低地址存放在低位。 ②大存储器模式:对.bss大小没有限制,访问变量时需要首先确定DP值,这将增加指令访问周期 高地址存放在低位,低地址存放在高位。   C54x C语言开发的寄存器约定规则 入口保存(save-on-entry) 调用保存(save-on-call)   C54x C语言中断处理函数的实现 C语言中断函数的定义 (1) c_intd 函数 C编译器约定,任何具有名为c_intd(d为0~9)的函数都被假定为一个中断程序。 缺点:可以定义的中断处理函数数目较少(只有9个),另外,函数名称与其功能的对应关系不够直观。因此,除了c_int0函数外,一般不建议使用这种定义方法。 (2 ) interrupt 函数 采用这种方法,可以对每种中断服务函数的功能,给它起一个有意义的名称,非常直观,同时,中断服务函数的个数也没有严格的限制。   TI公司提供两种形式的运行支持库: 目标代码:rts.lib 源代码:rts.src   DSP的C编程文件结构 工程文件.mak (.prj)包含: 1. CMD--用来分配存储空间 MEMORY指令定义目标存储器的位置,SECTIONS指令规定各个段放在存储器的什么位置。 2.C语言系统库rts55x.lib。系统库包含了编译器提供的所有功能,初始化C语言环境(入口地址是_c_int0),设置堆栈,标准C的函数库。 3.有且必须有一个含有main()函数的C语言源文件(.c)。系统初始化完毕后,就把控制权交给main()函数。 4.目录下的文件:.map文件(存储器映射文件)、.out文件、cc_build文件   Hello, world实例:file.c #include FILE*fptr; /* ======== main ======== */ void main() {   /*write a string to stdout */ puts("hello world! "); /* open a file on the host and write char array */ fptr= fopen("myfile.txt", "wb+"); if(fptr==NULL) { puts("error"); } fprintf(fptr,"Hello, world"); fclose(fptr); } 汇编实例:add.asm .file "addasm.asm" .data .global _c_int00 .text _c_int00: mov #10,AR0 mov #10,AR1 add AR0,AR1 loop: nop B loop .end   C+汇编实例: #include int c; void main() { c=cadd(10,10); asmadd();   }   int cadd(int a,int b) { int result; result=a+b; return result; }   定点浮点运算 浮点和定点运算 给代码和已知数求运算过程 //加法过程 x=0.5 y=3.1 Qx=15 Qy=13 Qz=13 Xq=0.5*2^15=16384 Yq=3.1*2^13=int(25395) temp = Yq<< Qx-Qy) =25395<<2 =25395*4=101580 temp=Xq+temp=16384+101580=117964 Zq=117964>>2=117964/4=29491 z=(float)Zq*2^-13=3.6   //减法过程 x=3.0 y=3.1 Z=? Qx=13 Qy=13 Qz=15 X=int(x*2^13)=3*2^13=24576 Y=int(y*2^13)=3.1*2^13=25395   temp=y<<0=25395   temp=x-temp =24576-25395=-819   Z=-819<<2=-819*4=-3276 z=-3276*2^-15=-0.1   //乘法过程 x=18.4 y=36.8 Qx=10 Qy=9 Qz=15 tmp=x=18841 Zq=18841<<(15-10+9)/18841 =18841*2^14/18841=16384 Zfloat=16384*2^-15=0.5   //除法过程 X=18.4 y=36.8 Qx=10 Qy=9 Qz=15 Xq=18.4*2^10=18841 Yq=36.8*2^9=18841 temp=(long)=18841 Zq=temp*Yq>>(10+9-5) =temp*Yq>>14 =18841*18841>>14 =21666   1、选择 2、填空 3、程序分析 给代码分析求代码功能或结果 Matlab脚本 DSPc语言代码 4、程序设计题 Matlab脚本 DSPc语言代码 5、论述综合题 上课所讨论的问题