文档库 最新最全的文档下载
当前位置:文档库 › DSP 优化心得

DSP 优化心得

DSP 优化心得
DSP 优化心得

C6XX优化经验总结

一、c6x的编译的常用选项

(一)c6x的编译程序为“cl6x.exe”使用的方法

Cl6x [options] [filenames]

Cl6x:编译程序

Options:编译选项

Filenames: C或汇编源文件

说明:

编译选项是一个字母或者两个字母,对大小写不敏感。

编译选项的前面需要有一个“-”符号。

一个字母的选项可以合并在一起。比如“-sgq”与“-s -g -q”相同。

两个字母的选项如果第一个字母相同也可以合并在一起。比如“-mgt”与“-mg -mt”相同。

(二)有关优化的选项

-mt:表示在程序中没有使用alaising技术,这使得编译器可以进行比较好的优化。

-o3:对文件级别进行最强的优化,一般在编译时应该使用这个选项。但是在个别情况下使用这个选项优化程序可能会出现

错误(-o2有相同现象,-o0和-o1不会出现错误)。可能是在优化循环,组织流水线的时候发生错误。如果有这种现象出现可以同时

使用-g选项,程序优化就不会出现错误,但是优化效果会下降。另外可以调整程序的表达方式,可能会避免编译器发生错误。

-pm:在程序级别进行优化。可以将所以文件联合在一起进行优化,主要有去掉没有被调用的函数、总是常数的变量以及没有使用的

函数返回值。建议由程序员自己进行这种优化工作。使用这个选项在win98下编译可能会出现找不到编译程序的情况。

-ms0:不使用冗余循环进行优化,减小程序的大小。一般情况下这个选项对程序大小的优

化作用不明显。

-mh[n]:去掉流水线的epilog,减小程序的大小。这个选项的作用比较明显。但是有可能出现读取地址超出有效范围的问题,

所以要在数据段的开始和结尾处增加一些pading,或者在分配内存时保证数组的前面和后面一段范围内都是有效的地址。

可选的参数n给出这种pading的长度字节数。

(三)保留编译和优化信息的选项

-k:保留优化后生成汇编语言文件。

-s:汇编语言文件中加入优化信息,如果没有则加入C语言源程序作为注释。

-mw:在汇编语言文件加入软件流水线信息。

(四)有关调试和剖析的选项

-g:允许符号调试,在“out”文件中包含符号信息和行号信息,可以在c语言级别进行调试和剖析。使用联合使用-g、-mt和-o3可以保

证能够进行符号调试的情况下最大限度的优化。

-mg:允许profile优化后的程序。在“out”文件中包含符号信息和很少的行号信息。允许在c语言的函数基本进行剖析。

如果联合使用这两个选项,-g选项可能被忽略,结果与只用-mg相同。

(五)其它类型

-mln:生成大内存模式的程序。

-ml0:缺省情况下将集合变量(数组和结构)作为far型。

-ml1:缺省情况下将全部函数作为far型

-ml2:等于-ml0加-ml1

-ml3:缺省情况下将全部数据和函数作为far型

(六)建议使用的编译方式

Cl6x -gk -mt -o3 -mw -ss “filename”

方式1用于程序的调试,这种方式具有比较强的优化能力,并且支持符号调试。在编译的

过程中不会发生错误。

由于生成的“out”文件中包含了符号信息和行号信息,所以比较大。

Cl6x -k -mgt -o3 -mw -ss “filename”

方式2用于程序的剖析(profile),这种方式的优化能力几乎最强(绝大多数情况下与方式3相同),

并且支持对程序进行profile。文件中只包含了符号信息和很少的行号信息,所以“out”文件比较小。

Cl6x -k -mt -o3 -mw -ss “filename”

方式3用于最终的发行版本程序,可以对程序进行最强的优化,并且去掉了全部的符号和行号信息,所以“out”文件比较小。

由多个文件组成的程序应该编写makefile,将编译参数放在该文件中,并在其中说明使用的编译器的版本号。

(七)连接参数

-heap:指定堆的大小

-stack:指定栈的大小

连接的各种选项应该统一放在“cmd”文件中

二、双重循环和多重循环的优化总结

双重循环多重循环看起来比较复杂,但实际上多重循环优化方法比较简单,就在于一个字:“拆”,一旦完成这一步之后,

多重循环就成为单层循环,优化就可以按照普通的单层循环来做了。

多重循环的特点是在优化器优化时只在最内层循环中形成一个pipeline,这样循环语句就不能充分利用C6的软件流水线,

而且对于内部循环的次数较少的情况,消耗在prolog和eplog上的cycle数也是不可忽视的。针对这种状况可以考虑将多重循环拆开形成一个单层循环,可以拆外层循环也可以拆内层循环,

一般视具体情况而定。这样就可以充分利用优化器构成的Pipeline。如下例:

void fir2(const short input[], const short coefs[], short out[])

{

int i, j;

int sum = 0;

for (i = 0; i < 40; i++)

{

for (j = 0; j < 16; j++)

sum += coefs[j] * input[i + 15 - j];

out[i] = (sum >> 15);

}

内层循环循环次数较少,运算量也不大,资源方面只占用了一个乘法器,一个cycle只使用一次乘法器,

而事实上我们可以在一个cycle内使用两个乘法器,所以还可以充分利用另外的一个乘法器。因此考虑将内层循环拆开来执行,如下:

void fir2_u(const short input[], const short coefs[], short out[])

{

int i, j;

int sum;

for (i = 0; i < 40; i++)

{

sum = coefs[0] * input[i + 15];

sum += coefs[1] * input[i + 14];

sum += coefs[2] * input[i + 13];

sum += coefs[3] * input[i + 12];

sum += coefs[4] * input[i + 11];

sum += coefs[5] * input[i + 10];

sum += coefs[6] * input[i + 9];

sum += coefs[7] * input[i + 8];

sum += coefs[8] * input[i + 7];

sum += coefs[9] * input[i + 6];

sum += coefs[10] * input[i + 5];

sum += coefs[11] * input[i + 4];

sum += coefs[12] * input[i + 3];

sum += coefs[13] * input[i + 2];

sum += coefs[14] * input[i + 1];

sum += coefs[15] * input[i + 0];

out[i] = (sum >> 15);

}

这样虽然代码长度增加了,可变成了单循环,所有的运算都参加到pipeline中来,在Piped loop kernal

中产生每一个cycle内都使用了两个乘法器,充分利用了DSP内部的资源,提高了运行效率。又如下例:

tot = 4;

for (k = 0; k < 4; k++)

{

max = 0;

for (i = k; i < 44; i += STEP)

{

s = 0;

for (j = i; j < 44; j++)

s = L_mac(s, x[j], h[j - i]);

y32[i] = s;

s = L_abs(s);

if (L_sub(s, max) > (Word32) 0)

max = s;

}

tot = L_add(tot, L_shr(max, 1));

}

在这个多层循环中一共有三层循环,而最内层的循环的运算量很小,只有一次乘累加操作,而我们知道C6中一个packet中可以做两个乘累加运算,所以为了增加内部循环的运算,减少外部循环的层数,

我们可以将第一层循环的操作拆开,其负责的运算加入到内部循环中,也就是在内层循环中一次做四次的乘累加运算,

这样将多次操作形成pipeline,提高了运行效率,优化后的C代码如下:

tot = 4;

max0=0;

max1=0;

max2=0;

max3=0;

for (i = 0; i <44; i += STEP) //STEP=4, 11 times cirs

{

//code

for (j=0;j<=40-i;j++)

{s0=(Word32)(_sadd(s0,_smpy(hh[j],xx[j+i])));

s1=(Word32)(_sadd(s1,_smpy(hh[j],xx[j+i+1])));

s2=(Word32)(_sadd(s2,_smpy(hh[j],xx[j+i+2])));

s3=(Word32)(_sadd(s3,_smpy(hh[j],xx[j+i+3])));

}

}

//code

CCS的优化:

三、16位变为32位操作,使用intrinsic函数,用const等。

1、源代码:

Word32 L_mpy_ll(Word32 L_var1, Word32 L_var2)

{

double aReg;

Word32 lvar;

/* (unsigned)low1 * (unsigned)low1 */

aReg = (double)(0xffff & L_var1) * (double)(0xffff & L_var2) * 2.0;

/* >> 16 */

aReg = (aReg / 65536);

aReg = floor(aReg);

/* (unsigned)low1 * (signed)high2 */

aReg += (double)(0xffff & L_var1) * ((double)L_shr(L_var2,16)) * 2.0; /* (unsigned)low2 * (signed)high1 */

aReg += (double)(0xffff & L_var2) * ((double)L_shr(L_var1,16)) * 2.0; /* >> 16 */

aReg = (aReg / 65536);

aReg = floor(aReg);

/* (signed)high1 * (signed)high2 */

aReg += (double)(L_shr(L_var1,16)) * (double)(L_shr(L_var2,16)) * 2.0; /* saturate result.. */

lvar = L_saturate(aReg);

return(lvar);

}

2、改编后的代码:

static inline Word32 L_mpy_ll(Word32 L_var1, Word32 L_var2)

{

Word32 aReg_hh;

Word40 aReg,aReg_ll,aReg_lh,aReg_hl;

aReg_ll = (Word40)_mpyu(L_var1, L_var2)>>16;

aReg_lh = (Word40)_mpyluhs(L_var1, L_var2);

aReg_hl = (Word40)_mpyhslu(L_var1, L_var2);

aReg_hh = _smpyh(L_var1, L_var2);

aReg = _lsadd(aReg_ll, _lsadd(aReg_lh, aReg_hl));

aReg = _lsadd(aReg>>15, aReg_hh);

return(_sat(aReg));

}

3、优化方法说明:

C6000编译器提供的intrinsic 可快速优化C代码,intrinsic用前下划线表示同调用函数一样可以调用它,即直接内联为C6000的函数。

例如,在上例的源代码中没有使用intrinsics,每一行C代码需多个指令周期,在改编后的代码中,每一行代码仅需一个指令周期。

例如,

“aReg_ll = (Word40)_mpyu(L_var1, L_var2)>>16”中“_mpyu”就是一个intrinsics函数,它表示两个无符号数的高16位相乘,

结果返回。C6000支持的所有intrinsics指令及其功能参见《TMS320C6000系列DSP的原理与应用》一书的第265、266页,

该书还提供了另外的例子。这些内联函数定义在CCS所在的C6000/CGTOOLS/Include目录下的C6X.h文件中。

下面这个例子是C6000的“Programmer's Guide”上提取的使用intrinsics优化C代码的例子。

源代码:

int dotprod(const short *a, const short *b, unsigned int N)

{

int i, sum = 0;

for (i = 0; i < N; i++)

sum += a[i] * b[i];

return sum;

}

改编后代码:

int dotprod(const int *a, const int *b, unsigned int N)

{

int i, sum1 = 0, sum2 = 0;

for (i = 0; i < (N >> 1); i++)

{

sum1 += _mpy (a[i], b[i]);

sum2 += _mpyh(a[i], b[i]);

}

return sum1 + sum2;

}

技巧:

在C语言的调试全部通过以后,可以尝试将尽可能多的语句使用intrinsics函数加以改编,尤其在循环体内,这种改编可以大幅度减少执行时间。

四、

1、源代码:

void fir_fxd1(short input[], short coefs[], short out[])

{

int i, j;

for (i = 0; i < 40; i++)

{

for (j = 0; j < 16; j++)

out[i*16+j]= coefs[j] * input[i + 15 - j];

}

}

2、改编后的代码:

void fir_fxd2(const short input[], const short coefs[], short out[])

{

int i, j;

for (i = 0; i < 40; i++)

{

for (j = 0; j < 16; j++)

out[i*16+j]= coefs[j] * input[i + 15 - j];

}

3、优化方法说明:

C6000编译器如果确定两条指令是不相关的,则安排它们并行执行。关键字const可以指定一个变量或者一个变量的存储单元保持不变。

这有助于帮助编译器确定指令的不相关性。例如上例中,源代码不能并行执行,而结果改编后的代码可以并行执行。

4、技巧:

使用const可以限定目标,确定存在于循环迭代中的存储器的不相关性。

五、

1、源代码:

void vecsum(short *sum, short *in1, short *in2, unsigned int N)

{

int i;

for (i = 0; i < N; i++)

sum[i] = in1[i] + in2[i];

}

2、改编后的代码:

void vecsum6(int *sum, const int *in1, const int *in2, unsigned int N)

{

int i;

int sz = N >> 2;

_nassert(N >= 20);

for (i = 0; i < sz; i += 2)

{

sum[i] = _add2(in1[i] , in2[i]);

sum[i+1] = _add2(in1[i+1], in2[i+1]);

}

}

3、优化方法说明:

源代码中,函数变量的定义是short *sum, short *in1, short *in2, 改编后的代码函数变量是int *sum, const int *in1, const int *in2, 整数类型由16位改编成32位,这时使用内联指令“_add2”一次可以完成两组16位整数的

加法,效率提高一倍。注意这里还使用了关键字const和内联指令_nassert优化源代码。

4、技巧:

用内联指令_add2、_mpyhl、_mpylh完成两组16位数的加法和乘法,效率比单纯16位数的加法和乘法提高一倍。

六、if...else...语句的优化

(一)

1、源代码:

if (sub (ltpg, LTP_GAIN_THR1) <= 0)

{

adapt = 0;

}

else

{

if (sub (ltpg, LTP_GAIN_THR2) <= 0)

{

adapt = 1;

}

else

{

adapt = 2;

}

}

2、改编后的代码:

adapt = (ltpg>LTP_GAIN_THR1) + (ltpg>LTP_GAIN_THR2);

(二)

1、源代码:

if (adapt == 0)

{

if (filt>5443)

{

result = 0;

else

{

if (filt < 0)

{

result = 16384;

}

else

{

filt = _sshl (filt, 18)>>16; // Q15

result = _ssub (16384, _smpy(24660, filt)>>16); }

}

}

else

{

result = 0;

}

2、改编后的代码:

filt1 = _sshl (filt, 18)>>16;

tmp = _smpy(24660, filt1)>>16;

result = _ssub(16384, tmp * (filt>=0));

result = result * (!((adapt!=0)||(filt>5443)));

(三)

1、源代码:

static Word16 saturate(Word32 L_var1)

{

Word16 swOut;

if (L_var1 > SW_MAX)

{

swOut = SW_MAX;

giOverflow = 1;

}

else if (L_var1 < SW_MIN)

{

swOut = SW_MIN;

giOverflow = 1;

}

else

swOut = (Word16) L_var1; /* automatic type conversion */

return (swOut);

}

2、改编后的代码:

static inline Word32 L_shl(Word32 a,Word16 b)

{

return ((Word32)((b) < 0 ? (Word32)(a) >> (-(b)) : _sshl((a),(b)))) ;

}

3、优化方法说明:

如果在循环中出现if...else...语句,由于if...else...语句中有跳转指令,而每个跳转指令有5个延迟间隙,

因此程序执行时间延长;另外,循环内跳转也使软件流水受到阻塞。直接使用逻辑判断语句可以去除不必要的跳转。

例如在例1的源代码最多有两次跳转,而改编后不存在跳转。例2和例3同样也去掉了跳转。

4、技巧:

尽可能地用逻辑判断语句替代if...else...语句,减少跳转语句。

七、

1、源程序

dm = 0x7FFF;

for (j = 0; j < nsiz[m]; j = add(j, 1))

{

if (d[j] <= dm)

{

dm = d[j];

jj = j;

}

}

index[m] = jj;

2、优化后的程序

dm0 = dm1 = 0x7fff;

d0 = (Word16 *)&d[0];

d1 = (Word16 *)&d[1];

# pragma MUST_ITERATE(32,256,64);

for (j = 0; j < Nsiz; j+=2)

{

n0 = *d0;

d0 += 2;

n1 = *d1;

d1 += 2;

if (n0 <= dm0)

{

dm0 = n0;

jj0 = j;

}

if (n1 <= dm1)

{

dm1 = n1;

jj1 = j+1;

}

}

if (dm1 != dm0)

{

index[m] = (dm1 < dm0)? jj1:jj0;

}

else

{

index[m] = (jj1 > jj0)? jj1:jj0;

}

3、优化说明

求数组的最小值程序,优化时为了提高程序效率在一个循环之内计算N=1,3,5..和n=2,4,6...的最小值,

然后在比较二者的大小以求得整个数组的最小值。

八、

1、源程序

for (k = 0; k < NB_PULSE; k++)

{

i = codvec[k];

j = sign[i];

index = mult(i, Q15_1_5);

track = sub(i, extract_l(L_shr(L_mult(index, 5), 1)));

if (j > 0)

{

if (i < l_subfr) code[i] = add(code[i], 4096);

codvec[k] += (2 * L_SUBFR);

}

else

{

if (i < l_subfr) code[i] = sub(code[i], 4096);

index = add(index, 16);

}

if (indx[track] < 0)

{

indx[track] = index;

}

else

{

if (((index ^ indx[track]) & 16) == 0)

{

if (sub(indx[track], index) <= 0)

{

indx[track] = shl((indx[track] & 16), 3)

+ shr(extract_l(L_mult((indx[track] & 15), NB_POS)), 1) + (index & 15); }

else

{

indx[track] = shl((index & 16), 3)

+ shr(extract_l(L_mult((index & 15), NB_POS)), 1) + (indx[track] & 15);

}

}

else

{

if (sub((indx[track] & 15), (index & 15)) <= 0)

{

indx[track] = shl((index & 16), 3)

+ shr(extract_l(L_mult((index & 15), NB_POS)), 1) + (indx[track] & 15);

}

else

{

indx[track] = shl((indx[track] & 16), 3)

+ shr(extract_l(L_mult((indx[track] & 15), NB_POS)), 1) + (index & 15); }

}

}

}

2、优化后的程序

for (k = 0; k < 8; k++)

{

i = codvec[k];

j = sign[i];

index = _smpy(i, 6554)>>16;

track = i - index*5;

con = (j > 0);

codvec[k] = codvec[k] + 110*con;

index = index + (!con)*16;

conn = (i < l_subfr);

cono = (j > 0)? 1:-1;

code[i] = code[i] + 4096*conn*cono;

n0 = index;

t0 = indx[track];

n1 = n0&16;

t1 = t0&16;

n2 = n0&15;

t2 = t0&15;

tmp0 = (_sshl(n1,19)>>16) + n2*NB_POS + t2;

tmp1 = (_sshl(t1,19)>>16) + t2*NB_POS + n2;

conp = (((n1 == t1)&&(t0 > n0))||((n1 != t1)&&(t2 <= n2)));

tmp = conp*tmp0 + (!conp)*tmp1;

if (t0 < 0)

indx[track] = n0;

else

indx[track] = tmp;

}

3、优化说明

源程序中在循环中含有许多的if结构,在优化时对if结构首先进行化简,

再将化简后的if结构用条件运算表达式进行改写,最后使循环可以Pipeline。九、

1、源程序

for (i = 0; i < n; i++)

{

max = -32767;

for (j = 0; j < n; j++)

{

if (sub (tmp2[j], max) >= 0)

{

max = tmp2[j];

ix = j;

}

}

tmp2[ix] = -32768;

tmp[i] = ix;

2、优化后的程序

if (n0>n1) {temp=n0;n0=n1;n1=temp;}

if (n1>n2) {temp=n1;n1=n2;n2=temp;}

if (n2>n3) {temp=n2;n2=n3;n3=temp;}

if (n3>n4) {temp=n3;n3=n4;n4=temp;}

if (n0>n1) {temp=n0;n0=n1;n1=temp;}

if (n1>n2) {temp=n1;n1=n2;n2=temp;}

if (n2>n3) {temp=n2;n2=n3;n3=temp;}

if (n0>n1) {temp=n0;n0=n1;n1=temp;}

if (n1>n2) {return n1;}

3、优化说明

源程序也为一个求中值的问题,由于已知循环次数固定为5,因此将循环展开使用if语句直接求取中值。

十、

1、源程序

static Word16 Bin2int (Word16 no_of_bits, Word16 *bitstream)

{

Word16 value, i, bit;

value = 0;

for (i = 0; i < no_of_bits; i++)

{

value = shl (value, 1);

bit = *bitstream++;

if (sub (bit, BIT_1) == 0)

value = add (value, 1);

}

return (value);

}

dsp优化心得

C6XX优化经验总结 一、c6x的编译的常用选项 (一)c6x的编译程序为“”使用的方法 Cl6x [options] [filenames] Cl6x:编译程序 Options:编译选项 Filenames:C或汇编源文件 说明: 编译选项是一个字母或者两个字母,对大小写不敏感。 编译选项的前面需要有一个“-”符号。 一个字母的选项可以合并在一起。比如“-sgq”与“-s -g -q”相同。 两个字母的选项如果第一个字母相同也可以合并在一起。比如“-mgt”与“-mg -mt”相同。 (二)有关优化的选项

-mt:表示在程序中没有使用alaising技术,这使得编译器可以进行比较好的优化。 -o3:对文件级别进行最强的优化,一般在编译时应该使用这个选项。但是在个别情况下使用这个选项优化程序可能会出现 错误(-o2有相同现象,-o0和-o1不会出现错误)。可能是在优化循环,组织流水线的时候发生错误。如果有这种现象出现可以同时 使用-g选项,程序优化就不会出现错误,但是优化效果会下降。另外可以调整程序的表达方式,可能会避免编译器发生错误。 -pm:在程序级别进行优化。可以将所以文件联合在一起进行优化,主要有去掉没有被调用的函数、总是常数的变量以及没有使用的 函数返回值。建议由程序员自己进行这种优化工作。使用这个选项在win98下编译可能会出现找不到编译程序的情况。 -ms0:不使用冗余循环进行优化,减小程序的大小。一般情况下这个选项对程序大小的优化作用不明显。 -mh[n]:去掉流水线的epilog,减小程序的大小。这个选项的作用比较明显。但是有可能出现读取地址超出有效范围的问题, 所以要在数据段的开始和结尾处增加一些pading,或者在分配内存时保证数组的前面和后面一段范围内都是有效的地址。 可选的参数n给出这种pading的长度字节数。 (三)保留编译和优化信息的选项 -k:保留优化后生成汇编语言文件。

DSP实验报告

实验0 实验设备安装才CCS调试环境 实验目的: 按照实验讲义操作步骤,打开CCS软件,熟悉软件工作环境,了解整个工作环境内容,有助于提高以后实验的操作性和正确性。 实验步骤: 以演示实验一为例: 1.使用配送的并口电缆线连接好计算机并口与实验箱并口,打开实验箱电源; 2.启动CCS,点击主菜单“Project->Open”在目录“C5000QuickStart\sinewave\”下打开工程文件sinewave.pjt,然后点击主菜单“Project->Build”编译,然后点击主菜单“File->Load Program”装载debug目录下的程序sinewave.out; 3.打开源文件exer3.asm,在注释行“set breakpoint in CCS !!!”语句的NOP处单击右键弹出菜单,选择“Toggle breakpoint”加入红色的断点,如下图所示; 4.点击主菜单“View->Graph->Time/Frequency…”,屏幕会出现图形窗口设置对话框 5.双击Start Address,将其改为y0;双击Acquisition Buffer Size,将其改为1; DSP Data Type设置成16-bit signed integer,如下图所示; 6.点击主菜单“Windows->Tile Horizontally”,排列好窗口,便于观察 7.点击主菜单“Debug->Animate”或按F12键动画运行程序,即可观察到实验结果: 心得体会: 通过对演示实验的练习,让自己更进一步对CCS软件的运行环境、编译过程、装载过程、属性设置、动画演示、实验结果的观察有一个醒目的了解和熟悉的操作方法。熟悉了DSP实验箱基本模块。让我对DSP课程产生了浓厚的学习兴趣,课程学习和实验操作结合为一体的学习体系,使我更好的领悟到DSP课程的实用性和趣味性。

DSP课程设计总结报告

课程设计总结报告课程名称DSP控制器及其应用 设计题目万年历设计 业专电子信息工程 班级 姓名 学号

指导教师 报告成绩 信息工程学院 年六月十三日二〇一四 录目 言前 (3) 设计要求第一章4.....................................................................................基本要求1.14.....................................................................................

系统的组成和工作原理第二章5............................................................. 芯片的工作原理VC5509APGE2.1DSPTMS3205.............................. 液晶显示器的工作原理2.2LCD16026..............................................主电路图及程序流程图第三章.. (7) 主电路图3.17...................................................................................... 程序总流程图3.27.............................................................................. 程序分块流程图3.38..........................................................................软件程序设计第四章9.............................................................................

我的首个DSPTMSFLED灯闪烁项目实验总结

买视频资料、买书、买开发板(F28335)、各种版本开发环境安装,导入工程、创建工程、了解controlSUITE,终于创建了一个工程,且是按照自己的意愿将代码在开发板上跑起来,现总结如下: 实验目的: 将开发板上可控的两个LED灯LD3、LD4实现交替闪烁,并在RAM中仿真实验; 实验步骤: 1、创建工程、且包含main.c文件

按照上面的五步操作,然后点击【finish】。 遇到的问题:在第四步如果设置新的工作空间文件夹,在点击【finish】后,应实际的去工作空间文件夹下去看一下,是否确实创建好了。

建议:在点击完【finish】后,项目框架基本创建完成,然后关闭CCS,再次进去看看是否直接进入刚刚创建好的工程。如果不能最好分析一下原因,重建一次。我在这里反复了3次,也就是重建3次才成功。如果可以进入,进入后面的步骤。 2、复制controlSUITE下C:\ti\controlSUITE\device_support\f2833x下面的DSP2833x_common和 DSP2833x_headers两个文件夹到所创建的工程目录; 复制完成后最好仔细浏览一下每个目录下都有哪些文件。 3、在项目的属性设置对话框中设置include路径如下: 4、在main.c添加如下头文件: #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File #include "DSP2833x_Examples.h" // DSP2833x Examples Include File 5、这是可以编译一下,肯定会出错,需要删除一些文件。如下 以上红圈内的文件全部删除 6、然后再编译一下,看看有什么问题就自己处理吧,呵呵。。。。。 7、现在已经有了基本的函数库、头文件,剩下就是实现LED灯的控制了。 代码如下: #include"DSP2833x_Device.h"// DSP2833x Headerfile Include File

dsp优化心得

iPone 的一句大家都耳熟能详的广告词:“一直被模仿,从未被超越” 。笔者认为主要是因为他们掌握着核心的算法和机器的优化策略。因为一般的硬件我们都买的回来,但是能否将该硬件发挥到极致,就会公司之间的差别,因为同样的硬件,如果软件执行的速度不同,那结果就会有很大的差别,所以说:真正的技术是买不来的。 所以,我们进行嵌入式开发的时候,一旦选定了DSP6000系列的芯片,就不能把它当成单片机来用,必须发挥dsp 与众不同,独一无二的性能。也就是说如何调整c 语言才能够适应这么强悍的硬件就是我们考虑的重点内容,即我们应该按照哪种既定的原则去编写C 代码才能够让dsp 真正作为dsp 在工作,发挥到dsp 的优势。 dsp 的优势在于:速度! 所以,dsp 的优化成为一门专业。 所以,我们一定要使自己在dsp 上编写的c 代码高效运行。因为制约运行速度的因素是硬件和软件。因为dsp 一旦选定,硬件也就确定了。所以,我们首先要注意如何提升软件的效率。对于软件来说,一般情况下有3 个优化等级。第一:算法上优化。第二:程序结构上的优化。第三:汇编级的优化。 我们需要的是研究前两个等级的优化。所以,在这篇文章中,我们需要研究的重点有两个:dsp 的硬件结构和在dsp 上如何优化c 代码。 dsp 的硬件结构 关于dsp 硬件结构的特色有几个:哈佛结构,流水线结构,带宽和运算方式的高效等。1.1.1 哈佛结构 哈佛结构的本质属性是数据存储器(RAM存储数据的存储器)和程序存储器(存储指令)分开。Cpu可以一边取指令,一边取数据。这样会极大的提高处理的速度,因为以前是冯诺依曼结构,总线是分时复用的,这样会降低处理的速度。 而且,dsp6000系列是基于VLIW结构的,具体来讲就说CPU可以提取通过程序从程序存储器中一次提取256bit的指令,即CPU可以一次取8条指令放在处理中。加上和8级流水线的配合,相当于8个传统的CPU一起工作。 1.1.2 流水线结构 流水线结构涉及的CPU 单元包括取指令单元(fetch ),分配指令单元(dispatch )和执行指令单元(executive )。

dsp学习心得体会

dsp学习心得体会 篇一:DSP学习总结 DSP学习总结 摘要:本总结介绍了数字信号技术(DSP)的基本结构,特点,发展及应用现状。通过分析与观察,寄予了DSP 美好发展前景的希望。 关键字:数字信号处理器,DSP,特点,应用 1 DSP介绍 数字信号处理简称DSP,是进行数字信号处理的专用芯片,是伴随着微电子学、数字信号处理技术、计算机技术的发展而产生的新器件,是对信号和图像实现实时处理的一类高性能的CPU。所谓“实时实现”,是指一个实际的系统能在人们听觉、视觉或按要求所允许的时间范围内对输入信号进行处理,并输出处理结果。 数字信号是利用计算机或专用的处理设备,以数值计算的方式对信号进行采集、变换、综合、估计与识别等加工处理,从而达到提取信息和方便应用的目的。数字信号处理的实现是以数字信号处理理论和计算技术为基础的。 2 结构

32位的C28xDSP整合了DSP和微控制器的最佳特性,能够在一个周期内完成32*32位的乘法累加运算。 所有的C28x芯片都含一个CPU、仿真逻辑以及内存和片内外设备的接口信号(具体结构图见有关书籍)。CPU的主要组成部分有: 程序和数据控制逻辑。该逻辑用来从程序存储器取回的一串指令。实时和可视性的仿真逻辑。 地址寄存器算数单元(ARAU)。ARAU为从数据存储器取回的数据分配地址。算术逻辑单元(ALU)。32位的ALU执行二进制的补码布尔运算。 预取对列和指令译码。 为程序和数据而设的地址发生器。 定点MPY/ALU。乘法器执行32位*32位的二进制补码乘法,并产生64位的计算结果。中断处理。 3 特点 采用哈佛结构。传统的冯·诺曼结构的数据总线和指令总线是公用的,因此在高运算时在传输通道上会出拥堵现象。而采用哈佛结构的DSP 芯片片内至少有4 套总线:程序的地址总线与数据总线,数据的地址总线与数据总线。由于这

dsp课程设计实验报告

DSP 课程设计实验 一、语音信号的频谱分析: 要求首先画出语音信号的时域波形,然后对语音信号进行频谱分析。在MATLAB 中,可以利用函数fft 对信号进行快速傅立叶变换,得到信号的频谱特性,从而加深对频谱特性的理解。 其程序为: >> [y,fs,bits]=wavread('I:\',[1024 5120]); >> sound(y,fs,bits); >> Y=fft(y,4096); >> subplot(221);plot(y);title('原始信号波形'); | >> subplot(212);plot(abs(Y));title('原始信号频谱'); 程序运行结果为: 二、设计数字滤波器和画出频率响应: 根据语音信号的特点给出有关滤波器的性能指标: 低通滤波器性能指标,p f =1000Hz ,c f =1200Hz ,s A =100dB ,p A =1dB ; 高通滤波器性能指标,c f =4800Hz ,p f =5000Hz ,s A =100dB ,p A =1dB ; 带通滤波器性能指标,1p f =1200Hz ,2p f =3000Hz ,1c f =1000Hz ,2c f =3200Hz ,s A =100dB , p A =1dB ;

】 要求学生首先用窗函数法设计上面要求的三种滤波器,在MATLAB中,可以利用函数firl 设计FIR滤波器;然后再用双线性变换法设计上面要求的三种滤波器,在MATLAB中,可以利用函数butte、cheby1和ellip设计IIR滤波器;最后,利用MATLAB中的函数freqz画出各种滤波器的频率响应,这里以低通滤波器为例来说明设计过程。 低通: 用窗函数法设计的低通滤波器的程序如下: >> fp=1000;fc=1200;As=100;Ap=1;fs=22050; >> wc=2*fc/fs;wp=2*fp/fs; >> N=ceil(/*(wc-wp)/2))+1; >> beta=*; >> Win=Kaiser(N+1,beta); 、 >>b=firl(N,wc,Win); >>freqz(b,1,512,fs); 程序运行结果: 这里选用凯泽窗设计,滤波器的幅度和相位响应满足设计指标,但滤波器长度(N=708)太长,实现起来很困难,主要原因是滤波器指标太苛刻,因此,一般不用窗函数法设计这种类型的滤波器。 用双线性变换法设计的低通滤波器的程序如下: >> fp=1000;fc=1200;As=100;Ap=1;fs=22050; >> wc=2*fc/fs;wp=2*fp/fs; 》 >> [n,wn]=ellipord(wp,wc,Ap,As); >> [b,a]=ellip(n,Ap,As,wn); >> freqz(b,a,512,fs); ^

DSP技术及应用实习报告

目录 1绪论 (2) 1.1实习题目 (2) 1.2课题研究的目的 (2) 1.3 DSP简介 (2) 2开发运行环境CCS (3) 3实验原理 (4) 4软件设计 (8) 4.1程序流程图 (8) 4.2源程序 (8) 4.3设计步骤 (8) 5实习心得 (19) 6参考文献 (19) 附录 (20)

1. 绪论 1.1实习题目 傅立叶变换是一种将信号从时域变换到频域的变换形式,是声学,语音,电信和信号处理等领域中一种重要的分析工具。快速傅立叶变换(FFT)是快速计算DFT的一种高效方法,FFT的出现使DFT的运算大大简化,运算时间缩短一至两个数量级之多,DSP芯片的出现使FFT的实现变得更加方便。 1.2课题研究的目的 随着电子技术和集成电路技术的飞速发展,数字信号处理已经广泛地应用于通信、信号处理、生物医学以及自动控制等领域中。离散傅立叶变换(DFT)及其快速算法FFT作为数字信号处理的基本变换,有着广泛的应用。特别是近年来,基于FFT的ODFM技术的兴起,进一步推动了对高速FFT处理器的研究。FFT算法从出现到现在已有四十多年代历史,算法理论已经趋于成熟,但是其具体实现方法却值得研究。面向高速、大容量数据流的FFT实时处理,可以通过数据并行处理或者采用多级流水线结构来实现。特别是流水线结构使得FFT处理器在进行不同点数的FFT计算时可以通过对模板级数的控制很容易的实现。分析和比较了各种FFT算法后,选择基2和基4混合频域抽取算法作为FFT处理器的而实现算法,一种高速、处理点数可变的流水线结构FFT处理器的实现方法。 1.3 DSP简介 数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。DSP有两种含义:Digital Signal Processing(数字信号处理)、Digital Signal Processor (数字信号处理器)。我们常说的DSP指的是数字信号处理器。数字信号处理器是一种适合完成数字信号处理运算的处理器。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。 数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。 数字信号处理是以众多学科为理论基础的,它所涉及的范围及其广泛。例如,在数学领域,微积分、概率统计、随机过程、数值分析等都是数字信号处理的基本工具,与网络理论、信号与系统、控制论、通信

DSP实验二

实验三 IIR 滤波器设计 一、实验目的: 1.认真复习滤波器幅度平方函数的特性,模拟低通滤波器的巴特沃思逼近、切比雪夫型逼近方法;复习从模拟低通到模拟高通、带通、带阻的频率变换法;从模拟滤波器到数字滤波器的脉冲响应不变法、双线性变换法的基本概念、基本理论和基本方法。 2掌握巴特沃思、切比雪夫模拟低通滤波器的设计方法;利用模拟域频率变换设计模拟高通、带通、带阻滤波器的方法.。 3.掌握利用脉冲响应不变法、双线性变换法设计数字滤波器的基本方法;能熟练设计巴特沃思、切比雪夫低通、带通、高通、带阻数字滤波器。 4.熟悉利用MATLAB 直接进行各类数字滤波器的设计方法。 二、实验内容 a. 设计模拟低通滤波器,通带截止频率为10KHz,阻带截止频率为16KHz,通带最大衰减1dB,阻带最小衰减20dB。 (1) 分别用巴特沃思、切比雪夫I、切比雪夫II 型、椭圆型滤波器分别进行设计,并绘制所设计滤波器的幅频和相频特性图。 (2) 在通带截止频率不变的情况下,分别用n=3,4,5,6 阶贝塞尔滤波器设计所需的低通滤波器,并绘制其相应的幅频响应和相频响应图。 %%%%%%%%%----巴特沃思-----%%%%%%% clc;clear all; omegap=10000*2*pi;omegas=16*10^3*2*pi; Rp=1;As=20; [N,omegac]=buttord(omegap,omegas,Rp,As,'s');%低通的节次 [b,a]=butter(N,omegac,'s'); [H,w]=freqs(b,a); %设计滤波器的幅频和相频特性图 subplot(211) plot(w/2*pi/1000,20*log10(abs(H)))

DSP课程设计报告

共享知识分享快乐 盛年不重来,一日难再晨。及时宜自勉,岁月不待人。 数据采集处理和控制系统设计 一课程设计要求 1.基本DSP硬件系统设计要求 ①基本DSP硬件系统以TMS320C54x系列为核心处理器,包括最小系统、存储器扩展、显示器、键盘、AD、DA等电路模块; ②硬件设计画出主要芯片及电路模块之间的连接即可,重点考查电路模块方案设计与系统地址分配; ③设计方案以电路示意图为主,辅以必要的文字说明。 2.基本软件设计要求 ①看懂所给例程,画出例程输出波形示意图; ②修改例程程序,使之输出其它波形,如方波、三角波、锯齿波等均可; ③设计方案以程序实现为主,辅以必要的文字说明。 3.课程设计报告要求 ①硬件系统设计:设计思路、设计系统功能、主要芯片选型及使用方法、设计方案说明、电路示意图 ②软件系统设计:示例程序功能解读及输出波形示意图、设计软件功能、设计思路、实现源码(带程序注释) ③报告总结 二系统分析 利用实验箱的模拟信号产生单元产生不同频率的信号,或者产生两个频率的信号的叠加。在DSP 中采集信号,并且对信号进行频谱分析,滤波等。通过键盘或者串口命令选择算法的功能,将计算的信号频率或者滤波后信号的频率在LCD 上显示。主要功能如下: (1)对外部输入的模拟信号采集到DSP 内存,会用CCS 软件显示采集的数据波形。 (2)对采集的数据进行如下算法分析: ①频谱分析:使用fft 算法计算信号的频率。 ②对信号进行IIR 滤波或FIR 滤波,并且计算滤波前后信号的频率。 ③外部键盘或者从计算机来的串口命令选择算法功能,并且将结果在 LCD 上显示。 绘制出DSP系统的功能框图、使用AD(Altium Designer)绘制出系统的原理图和PCB 版图。 在 DSP 中采集信号,用CCS 软件显示采集的数据波形,以及对采集的数据进行算法分析。 三硬件设计 3.1 硬件总体结构

DSP实习报告模板

DSP应用技术实习报告 课程课题:基于DSP的键盘控制数字图像处理 方式及LCD显示 专业班级:电子信息科学与技术 学生姓名: 指导教师:邹修国李林徐友杨红兵 完成时间:

一、课程内容: ?掌握直方图统计的原理和程序设计 ?了解边缘检测的算法和用途 ?了解锐化的算法和用途 ?了解取反的算法和用途 ?掌握直方图均衡化增强的原理和程序设计 ?了解液晶显示器的显示控制原理及编程方法 ?了解键盘的使用原理及编程方法 二、设计功能及工作原理 能够实现功能: ?数字图像直方图统计 ?数字图像边缘检测(Sobel算子) ?数字图像的锐化(LAPLACE算子) ?数字图像的取反 ?数字图像直方图均衡化增强 通过键盘的输入可以控制图像处理的方式,并且LCD显示何种处理方式。 工作原理: ◆灰度直方图是灰度值的函数,描述的是图像中具有该灰度值的像素的个数,其横坐标表 示像素的灰度级别,纵坐标表示的是该灰度出现的频率。 ◆边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,也包括方向的确定。大多 数使用基于方向导数掩模求卷积的方法。 ◆图像的锐化处理就是使模糊的图像变得更加清晰起来,拉普拉斯锐化法属于常用的一种 微分锐化方法。 ◆求反处理的图像与原来的图像黑白颠倒,取得类似照片底片的效果。 ◆直方图增强的方法就是压缩直方图中比例少的像素所占用的灰度范围,多出来的灰度空 间按照统计比例分配给直方图中比例高的像素使用。 三、设计过程 1.各种功能工程的分别建立: ?数字图像直方图统计 ?数字图像边缘检测(Sobel算子) ?数字图像的锐化(LAPLACE算子) ?数字图像的取反 ?数字图像直方图均衡化增强 ?键盘输入 ?液晶显示器控制显示 2.将各个功能模块进行组合: 1)打开键盘输入的工程文件,浏览key.c文件内容; 2)打开数字图像直方图统计的工程文件,将Histo.c主函数内的处理部分的代码复制到 key.c文件的case1语句后; 3)打开数字图像边缘检测的工程文件,将Image.c主函数内的处理不放入内的代码复制 到key.c文件的case2语句后;

dsp心得体会

dsp心得体会 篇一:dsp实验报告心得体会 TMS320F2812x DSP原理及应用技术实验心得体会 1. 设置环境时分为软件设置和硬件设置,根据实验的需要设置,这次实验只是 软件仿真,可以不设置硬件,但是要为日后的实验做准备,还是要学习和熟悉硬件设置的过程。 2. 在设置硬件时,不是按实验书上的型号选择,而是应该按照实验设备上的型 号去添加。 3. 不管是硬件还是软件的设置,都应该将之前设置好的删去,重新添加。设置好的配置中 只能有一项。 4. CCS可以工作在纯软件仿真环境中,就是由软件在PC机内存中构造一个虚拟的 DSP环境,可以调试、运行程序。但是一般无法构造DSP 中的外设,所以软件仿真通常用于调试纯软件算法和进行效率分析等。 5. 这次实验采用软件仿真,不需要打开电源箱的电源。 6. 在软件仿真工作时,无需连接板卡和仿真器等硬件。 7. 执行write_buffer一行时。如果按F10执行程序,则程序在mian主函数中运行,

如果按F11,则程序进入write_buffe函数内部的程序运行。 8. 把str变量加到观察窗口中,点击变量左边的“+”,观察窗口可以展开结构变 量,就可以看到结构体变量中的每个元素了。 9. 在实验时,显示图形出现问题,不能显示,后来在Graph Title 把Input的大写 改为input,在对volume进行编译执行后,就可以看到显示的正弦波图形了。 10. 在修改了实验2-1的程序后,要重新编译、连接执行程序,并且必须对.OUT 文件进行重新加载,因为此时.OUT文件已经改变了。如果不重新加载,那么修改执行程序后,其结果将不会改变。 11. 再观察结果时,可将data和data1的窗口同时打开,这样可以便于比较,观察 结果。 12. 通过这次实验,对TMS320F2812x DSP软件仿真及调试有了初步的了解与认识,因为做 实验的时候都是按照实验指导书按部就班的,与真正的理解和掌握还是有些距离的。但是这也为我们日后运用这些知识打下了基础,我觉得实验中遇到的问题,不要急于问老师或者同学,先自己想办法分析原因,想办法解决,这样对

dsp实验报告5

一、实验原理: 1、无限冲击响数字滤波器的基础理论; 2、模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3、双线性变换的设计原理。 二、实验内容: 1、复习有关巴特沃斯滤波器设计和用双线性变换法设计IIR数字滤波器的知识; 2、阅读本实验所提供的样例子程序; 3、运行CCS软件,对样例程序进行跟踪,分析结果; 4、填写实验报告。 5、样例程序实验操作说明 1)正确完成计算机、DSP仿真器和实验箱连接后,开关K9拨到右边,即仿真器选择连接右边的CPU:CPU2; 2)“A/D转换单元”的拨码开关设置: JP3 3)检查:计算机、DSP仿真器、实验箱是否正确连接,系统上电; 4)置拨码开关S23的1、2拨到OFF,用示波器分别观测模拟信号源单元的2号孔“信号源1”和“信号源2”输出的模拟信号,分别调节信号波形选择、信号频率、信号输出幅值等旋钮,直至满意,置拨码开关S23的1到ON,两信号混频输出; 三、程序分析: cpu_init(); //CPU初始化 fs = 25000; //设置采样频率为2500HZ nlpass = 0.18; //设置通带上限频率归一化参数为0.18 nlstop = 0.29; //设置阻带下限截止频率归一化参数为0.29 biir2lpdes(fs,nlpass,nlstop,a,b); 根据双线性变换法求滤波器的系数a和b set_int(); //调用低通滤波器子程序对信号进行滤波 中断程序注释: interrupt void int1()

{ in_x[m] = port8002; //读取port8002端口的数值 in_x[m] &= 0x00FF; //取后八位送入X[m] m++; //每取一个数字m加1 intnum = m; if (intnum == Len) //当取到128个字节时,重新读取port8002端口的数值 { intnum = 0; xmean = 0.0; for (i=0; i

dsp课程设计实验报告总结

DSP课程设计总结(2013-2014学年第2学期) 题目: 专业班级:电子1103 学生姓名:万蒙 学号:11052304 指导教师: 设计成绩: 2014 年6 月

目录 一设计目的----------------------------------------------------------------------3 二系统分析----------------------------------------------------------------------3 三硬件设计 3.1 硬件总体结构-----------------------------------------------------------3 3.2 DSP模块设计-----------------------------------------------------------4 3.3 电源模块设计----------------------------------------------------------4 3.4 时钟模块设计----------------------------------------------------------5 3.5 存储器模块设计--------------------------------------------------------6 3.6 复位模块设计----------------------------------------------------------6 3.7 JTAG模块设计--------------------------------------------------------7 四软件设计 4.1 软件总体流程-----------------------------------------------------7 4.2 核心模块及实现代码---------------------------------------8 五课程设计总结-----------------------------------------------------14

DSP实验报告

学校代码学号分类号密级 DSP实验报告 院系名称 专业名称 年级 学生姓名 指导老师 年月日

实验一数据存储实验 一、实验目的 1. 掌握 TMS320C54X 程序空间的分配; 2. 掌握 TMS320C54X 数据空间的分配; 3. 能够熟练运用TMS320C54X 数据空间的指令。 二、实验设备 计算机,CCS 3.1版软件,DSP仿真器,E300实验箱,DSP-54XP CPU板。 三、实验系统相关资源介绍 1. 本实验指导书是以TMS320VC5416为例,介绍其相关的内部和外部存储器资源。对于其他类型的CPU请参考查阅相关的数据手册。) 下面给出TMS320VC5416的存储器分配表: 对于数据存储空间而言,映射表相对固定。值得注意的是内部寄存器都映射到数据存储器空间内。因此在编程时这些特定的空间不能作其他用途。 对于程序空间而言,其映射表和CPU 的工作模式有关。当MP/MC 引脚为高电平时,CPU 工作在微处理器模式;当MP/MC引脚为低电平时,CPU工作在微计算机模式。具体的MP和MC模式下的程序和数据映射关系如上图所示。 2. 样例程序实验操作简单说明: 本实验程序将对0x1000 开始的8 个地址空间,填写入0xAAAA 的数据,然后读出,并存储到以0x1008开始的8个地址空间,在CCS中可以观察DATA存储器空间地址0x1000~0x100F 值的变化。 四、实验步骤与内容 1. 在进行 DSP实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示: 2. E300 底板的开关SW4 的第1位置ON,其余位置OFF,SW5全部置ON,其余开关不做设置要求。 3. 上电复位 在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的“红色指示灯”应点亮,否则DSP开发系统与计算机连接存

DSP语音信号处理课程设计(精)

DSP语音信号处理课程设计报告书 语音信号处理GUI工具箱设计 指导老师:专业:电子信息工程 班级: 姓名:学号: 设计时间: 2011年10月12日至 地点: 摘要 语音信号处理是研究数字信号处理技术和语音信号进行处理的一门学科,是一门新型的学科,是在多门学科基础上发展起来的综合性技术,它涉及到数字信号处理、模式识别、语言学。语音信号处理是研究用数字信号处理技术对语音信号处理的一门学科。处理的目的是要得到一些语音参数以便高效的传输或存储;或者是通过处理的某种运算以达到某种用途的要求。语音信号处理又是一门边缘学科。如上所诉,它是“语言语音学”与“数字信号处理”两个学科相结合的产物。 语音信号处理属于信息科学的一个重要分支,大规模集成技术的高度发展和计算机技术的飞速前进,推动了这一技术的发展。在数字音频技术和多媒体技术迅速发展的今天,传统的磁带语音录放系统因体积大、使用不便、放音不清晰而受到了巨大挑战。本次课程设计提出的体积小巧,功耗低的数字化语音存储与回放系统,可以有效的解决传统的语音录放系统在电子与信息处理的使用中受到的限制。 本文提出了语音信号处理课程建设的实验环节中的一些考虑,作为专业课程的学习,实验内容不能仅仅停留在验证性实验上,还应增加实验延伸的设计要求,是学生加深对理论分析认识的同时,强调培养学生的实际动手能力和知识综合运用能力。从而提高语音信号的教学和实验的质量。实验内容采用MATLAB编程实现,不仅易于语音信号处理的实现,更易引导学生完成实验延伸的设计。 目录 第一章绪论 (1) 1.1课程设计的目的及意义 (1) 1.2设计要求 (1) 1.3 研究内容 (1) 第二章语音信号处理理论基础 (3) 第三章系统方案论证 (4) 2.1 设计方案 (4) 2.2 GUI界面功能介绍 (4) 2.3 GUI界面的具体操作 (5)

DSP实验报告

数字信号处理课程实验报告 题目:P30-2-6和P63-3-22-d 信道编码 专业:xxx 学号:xxx 姓名:xx

一、书上习题运算 一、实验内容 2.6一个特定的线性和时不变系统,描述它的差分方程如下:y(n)+0.1y(n-1)-0.06y(n-2) = x(n)-2x(n-1)求系统脉冲响应的前10个样本。 如果此系统输入为x(n)=[5+3cos(0.2πn)+4sin(0.6πn)]μ(n),在0≤n≤20求出y(n)的响应。 3.22计算下列序列的N点循环卷积z(n)。 D x1(n)=nR N(n);x2=(N-n)R N(n);N=10 二、实验程序代码 2.6程序: function[x,n]=impseq(np,ns,nf) if ns>np|ns>nf|np>nf error('输入位置参数不满足ns<=np<=nf') else n=[ns:nf]; x=[(n-np)==0]; end a=[1,0.1,0.06];b=[1-2]; x=impseq(0,0,20); h=filter(b,a,x); n=0:20; x=5+3*cos(0.2*pi*n)+4*sin(0.6*pi*n); y=conv(h,x) stem(y) 3.22程序: function y=circonvt(x1,x2,N) x1=[x1,zeros(1,N-length(x1))]; x2=[x2,zeros(1,N-length(x2))]; m=[0:N-1]; x2m=x2(mod(-m,N)+1); H=toeplitz(x2m,[0,x2(2:N)]); y=x1*H; n=0:9; x1=n; x2=10-n; y=circonvt(x1,x2,10) stem(y) 三、实验结果 2.6

课程设计的总结报告

课程设计的总结报告 ----WORD文档,下载后可编辑修改---- 下面是小编收集整理的范本,欢迎您借鉴参考阅读和下载,侵删。您的努力学习是为了更美好的未来! 课程设计的总结报告篇一首先我们由衷的感谢老师提供给我们这样一个锻炼自己的机会,经过这四周的学习,本次课程设计即将结束,总的来说,经过这门课的学习收获还是相当大的。回顾这段时间的课程设计,至今我仍感慨万分。的确,从选材到开始制作,从理论到实践,在四周的实训日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。 通过这次课程设计使我们都更加懂得并亲身体会到了理论与实际相结合的重要性,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从实践中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到很多问题,可以说是困难重重,并且在设计的过程中发现了自己的很多不足之处,发现自己对之前所学过的知识理解得不够深刻,掌握得不够牢固,有待加强。 生活就是这样,汗水预示着结果但是也见证着收获,劳动是人类生存、生活永恒不变的话题,通过实训,我才真正领略到“艰苦奋斗”这一词的真正含义。我想说,设计确实有些辛苦,但苦中也有乐,在如今单一的理论学习中,很少有机会能有实践的机会,但我们可以。而且设计也是一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契,多少欢乐在这里洒下。我想说,之前的时间确实很累,但当我们看到自己所做的劳动成果时,心中也不免产生兴奋。也许有人不喜欢这类的工作,也许有人认为编程的工作有些枯燥,但我们认为无论干什么,只要人生活的有意义就够了,而且这也是最主要的,社会需要我们,我们也可以为社会而工作。 我们的工作是一个团队的工作,团队需要个人,个人也离不开团队,必须发扬团结协作的精神,某个人的离群都可能导致整项工作的失败。实训中只有一个人知道原理是远远不够的,必须让每个人都知道,否则一个人的错误,就有可能导致整个项目失败,团结协作是我们实训成功的一项非常重要的保证。而这次实

DSP实习实验报告

M A T L A B上机实习报告 姓名: 班级: 指导老师: 2009.12.13

一、实验课程名称:数字信号处理 二、实验目的 掌握应用MATLAB 解决数字信号处理问题的方法,即熟悉应用MATLAB 处理数字信号处理问题相关的函数。 三、实验设备 安装有MATLAB 软件的计算机 四、实验内容 编写MATLAB 程序,实现下列题目: 实验一: 设线性时不变(LTI )系统的冲激响应为h(n),输入序列为x(n) 1、h(n)=(0.8)n ,0≤n ≤4; x(n)=u(n)-u(n-4) 2、h(n)=(0.8)n u(n), x(n)=u(n)-u(n-4) 3、h(n)=(0.8)n u(n), x(n)=u(n) 求以上三种情况下系统的输出y(n)。 实验二: 1、设有离散序列 x(n)=cos(0.48πn)+cos(0.52πn) 分析下列三种情况下的幅频特性。 (1) 采集数据长度N=16,分析16点的频谱,并画出幅频特性。采集数据长度N=16,并 补零到64点,分析其频谱,并画出幅频特性。 (2) 采集数据长度N=64,分析64点的频谱,并画出幅频特性。 观察三幅不同的幅频特性图,分析和比较它们的特点及形成原因。 2、实现序列的内插和抽取所对应的离散傅里叶变换。(选做) ()()n R n n n x 128]365.1cos 36[cos ?? ? ??+??? ??=ππ 求()()n x n x 41=和()?? ? ??=42n x n x 对应的128点傅里叶变换,比较三个结果所得到的幅频特性,分析其差别产生的原因。 实验三: 1、设计一个Butterworth 数字低通滤波器,设计指标如下: 通带截止频率:0.2π,幅度衰减不大于1分贝 阻带截止频率:0.3π,幅度衰减大于15分贝 2、让不同频率的正弦波通过滤波器,验证滤波器性能。 3、分析不同滤波器的特点和结果。 4、编程设计实现IIR 滤波器。

DSP学习心得

数字信号处理—DSP课程学习的认识 今年学习了DSP这门课程后,有了一些自己的认识和见解,并且体会到了它强 大的功能和作用,它不但在高端的技术领域有很重要的地位,如通信、雷达、声纳、语音合成和识别、图像处理、高速控制等;而且在生活中有它不小的作用,如,影视、仪器仪表、医疗设备、家用电器等众多领域。 但是,由于DSP技术发展很快,生产DSP芯片的厂家又多,这既是它的优点同时又是缺点,因为这样会导致产品更新换代的周期越来越短,还有,每一种芯片,都有其独特的硬件结构和一套专门的指令系统与开发工具,这更加的带来了学习DSP技术的困难。在我自己的学习体系里,有自己的一点经验可以用来辅助的学习这门课程。古时候的一个习语说的是“窥一斑而知全豹”这个同时可以用来指导学习DSP,尽管它的更新换代很快,但也只是为了完善它而更好用和借助其它的技术为它添加一些别的功能而使其更强大,其实质的理论还没有变话,所以,我们可以就其某一个芯片的知识来指导其它的芯片的学习和利用。这里,以TMS320系列DSP芯片为例来进行知识的梳理。 x(t)→抗混叠滤波器→A/D→数字信号处理器→D/A→低通滤波器→y(t) 数字信号处理系统简化框图 这个作为基本的理论模型,然后开始主要内容:1.1,TMS320系列DSP芯片的概述﹑分类及应用、平台;1.2,主要特性有①CPU,②存储器,③指令系统,④在片外围电路,⑤电源,⑥在片仿真接口,⑦速度、组成框图;1.3,总线结构; 1.4,存储器空间分配、存储器(程序存储器、数据存储器);1.5,中央处理单元中,算术逻辑运算单元①ALU的输入,②ALU的输出,③溢出处理,④进位位,⑤双16 位算术运算,累加器A和B(保存累加器的内容、累加器移位和循环移位、专用指令),桶形移位器乘法器/加法器单元,比较、选择和存储单元,指数编码器,CPU状态和控制寄存器;1.6,数据寻址方式①立即寻址,②绝对寻址,③累加器寻址,④直接寻

DSP课设论文

课程设计说明书(2011/2012学年第一学期) 课程名称:DSP控制器及其应用 题目:分频发生器 专业班级:通信工程 学生姓名: 学号: 指导教师: 设计周数:2周 设计成绩: 2012年1月5日

一、课程设计目的 通过本次的课程设计使学生增进对DSP的认识,加深对单DSP理论方面的理解, 使学生掌握DSP在实际生活中的应用。使学生了解和掌握用DSP实现分频发生器的设计方法、过程,为以后更多的设计打下良好基础,并且通过这次设计使我们对DSP应用的基本操作方法有了一定的了解,对于以后的发展打下了基础,所以本次课程设计对于学生的动手能力的提高有着很大的帮助并达到以下目的: (1)使学生增进对DSP F2812电路的感性认识,加深对理论方面的理解。 (2)使学生掌握软硬件的有关知识等。 (3)让同学们认识分频器器的工作原理和方法 (4)使学生了解和掌握软硬件设计过程、方法及实现,为以后设计和实现应用系统打下良好基础。 (5)通过简单课题的设计练习,可使学生了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。 二、课程设计正文 2.1系统分析 2.1.1设计任务 本次设计名为分频发生器,也可以称为键盘输入分频输出装置,要求用9个按键,组成3行3列键盘,采用扫描按键的方法控制蜂鸣器发出对应的声音从而实现按键控制蜂鸣器发出不同频率的声音。 2.1.2性能指标 硬件部分: 1、按照系统设计要求绘制(3行3列按键及分明器)电路图。 2、按照电路图统筹安排各元器件在电路板上的分布,并焊接电路板。 3、了解各引脚功能,将电路板与TMS320F2812相关引脚相连接。 软件部分: 1、搞清楚各个引脚功能,调入引脚头文件。 2、了解了各引脚控制的行列后,编写键盘扫描程序。 3、编写延时程序,实现按键去抖。 最终实现键盘输入分频输出,并由蜂鸣器发出不同频率的响声。 2.2系统整体设计 2.2.1硬件设计组成框图

相关文档