DSP笔记

DSP笔记

第1讲数字信号处理概述

ARM           高     FPGA(在纯软件的环境下开发硬件)        

DSP           中    

单片机        低

 

软解软件进行处理

硬解硬件进行处理

 

1-D 信号:单个独立变量的一维函数, e.g. 语音信号。

2-D 信号:两个独立变量的二维函数, e.g. 图像信号。

M-D 信号:多个独立变量的多维函数, e.g. 彩色视频信号(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)滤波理论(线性时不变离散时间系统,用于分离相加性组合的信号,要求信号频谱占

据不同的频段)。

数字信号处理的标志:傅立叶变换

 

频域分析

时域分析在时域上无法分析的可以在频域上分析

 

应用

GPS DVD  图像识别  指纹识别 

 

第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 =-2   x=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\b                          %注意除法的符号

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列的网格。

量化(灰度离散)      图片包含色彩数目。

 

1 按灰度值可分为二值图像和多值图像

     二值图像:每个像素灰度由0或1构成

     多值图像:每个象素灰度由0~2n之间的数表示(n>1)

2 按波段量可分为单波段、彩色或多波段数字图像

 

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:\Matlab\work\加菲猫.jpg')

>> A=imread('D:\Matlab\work\加菲猫.jpg');

>> imshow(uint8(A));

Matlab自带图片读取

>> load woman

>> imshow(X,map)

 

imview('D:\Matlab\work\加菲猫.jpg')显示一张图片 不常用

图像显示函数及其调用方法

1)        一般的方式

2)        彩色图像的显示

3)        索引图的显示

4)        彩色图像的显示

5)        灰度图像的显示

6)        truesize的使用

7)        图像显示中逻辑操作符的使用(常用于二值图像)

 

Matlab图像处理

1)        图像的几何运算  resize不善于用subplot来进行操作

2)        图像的亮度调整

3)        图像中斑点的去除

4)        图像的轮廓

5)        图像的边界

6)        图像间的运算

7)        特定区域的处理

 

课程探究

Jpg图像压缩

图像复原

Fir低通滤波器

伪彩色

切比雪夫滤波器

将图片转换为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 <stdio.h>

FILE     *fptr;

/* ======== main ======== */

void main()

{

  

   /*write a string to stdout */

   puts("hello world!\n");   

   /* 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 <csl.h>

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、论述综合题

上课所讨论的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值