DSP 实验六 正弦波产生与图像增强的DSP实现.docx
- 文档编号:4415307
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:14
- 大小:153.64KB
DSP 实验六 正弦波产生与图像增强的DSP实现.docx
《DSP 实验六 正弦波产生与图像增强的DSP实现.docx》由会员分享,可在线阅读,更多相关《DSP 实验六 正弦波产生与图像增强的DSP实现.docx(14页珍藏版)》请在冰豆网上搜索。
DSP实验六正弦波产生与图像增强的DSP实现
实验六正弦波产生与图像增强的DSP实现(C语言)
一、实验目的
1.初步掌握用C语言进行DSP程序设计。
2.掌握递推法产生正弦型信号的C语言程序设计方法。
3.掌握查表法进行图像直方图变换增强的C语言程序设计方法。
二、实验环境
1.奔腾IV计算机
2.CodeComposerStudio(CCS)软件
3.matlab6.5软件
三、实验内容
*C54xDSP软件设计的方法通常有三种:
(1)用汇编语言开发。
用汇编语言开发产品,周期长,软件修改和升级困难。
(2)用C语言开发。
优点是增强软件的可读性,提高了软件的开发速度,方便软件的修改和移植。
但无法实现在任何情况下都能合理地利用DSP芯片的各种资源。
(√)
(3)用C和汇编语言混合编程开发,能更好地达到设计要求。
1.递推法产生正弦型信号
递推法产生N点余弦波和正弦波的公式:
cos(nx)=2cos(x)cos[(n-1)x]-cos[(n-2)x]
(1)
sin(nx)=2cos(x)sin[(n-1)x]-sin[(n-2)x]
(2)
其中:
x--角度步长;n---离散时间(n=0:
N)
(1)产生余弦信号(本例取x=10,N=200点)
变量:
_COSX=cos(10)=0.99390827-----角度步长x的余弦值;
数组:
1)_cosx-------存放余弦波输出值(共200点)
2)dacdata=_cosx*2047+2048------输出结果
(将余弦信号的幅度范围从-1~1调整至0~4096,成为整数)
根据公式
(1)循环,逐次计算出各点的余弦信号。
}
实验要求:
[1]将cose.c,cose.cmd及c:
\ti\c5400\cgtools\lib目录下的库文件rts.lib添加入所创建的工程:
cose.pjt中。
[2]运行程序cose.c,按照以下设置,画出输出波形dacdata:
图1
[3]分别按照以下设置,观察并写出_cosx和dacdata前10个值。
(a)(b)
图2
_cosx[0]~_cosx[9]=1.00.99939080.99756410.9945220.9902682
0.9848080.97814790.9702960.9612620.9510568
dacdata[0]~dacdata[9]=40954093409040834075406340504034
40153994
(2)设计程序,产生正弦信号(本例取x=10,N=200点)
提示:
对程序cose.c中蓝色部分进行修改:
变量:
_COSX=cos(10)=0.99390827-----角度步长x的余弦值;
数组:
1)_sinx-------存放正弦波输出值(共200点)
2)dacdata[i]=_sinx[i]*4096------输出结果(共180点)
(将余弦信号的幅度范围从-1~1调整至-2048~2048,成为整数)
3)初始值:
_sinx[0]=0.0;_sinx[1]=0.01745241;
dadata[0]=0;dacdata[1]=71。
注:
sin(10)=0.0175
根据公式
(2)循环,逐次计算出各点的正弦信号。
实验要求:
[1]设计产生正弦波的程序:
sine.c
/*源程序sine.c*/
ioportunsignedport0bfff;
#defineIOSRport0bfff
#define_COSX0.999390827
#define_SINX0.017452406
#pragmaDATA_SECTION(_SINX,"data_buf1")
float_sinx[200];
#pragmaDATA_SECTION(dacdata,"data_buf2")
intdacdata[180];
voiddelay(void);
voidmain(void)
{
unsignedinti=0;
_sinx[0]=0.000;
dacdata[0]=0;
_sinx[1]=_SINX;
dacdata[1]=_SINX*4096;
i=1;
while
(1)
{
if(i++>179)
break;
_sinx[i]=2*COSX*_sinx[i-1]-_sinx[i-2];
dacdata[i]=_sinx[i]*4096;
}
i=0;
while
(1)
{
if(i>179)
i=0;
IOSR=dacdata[i++];
delay();
}
}
voiddelay(void)
{
longintj;
for(j=0;j<800;j++)
asm("_nop");
}
/*链接命令文件sine.cmd*/(与cose.cm相同)
[2]仍按照图1设置,画出输出dacdata波形:
2.查表法进行图像直方图变换增强
(1)图像的gamma校正
gamma校正是图像对比度增强的方法之一,
公式为:
Iout=(Iin/maxgray)1/γ*maxgray(3)
其中:
Iin---输入图像的灰度值;Iout----输出图像的灰度值;maxgray=255---最大灰度值;
γ---gamma系数。
步骤:
1)在matlab中,根据(3)式编程,产生Iin和Iout,组成表格table。
%gammajiaozheng.m
clear
clc
Iin=0:
255;
maxgray=255;
r=1.54;%gamma系数
Iout=(Iin/maxgray).^(1/r)*maxgray;%gamma校正
table=[Iin'round(Iout)']%Iin和Iout组成的关系表
2)在CCS中用C语言编程,用查表法对一幅64×64的图像:
"tire.dat"进行gamma校正。
数组:
(i)in_buffer-----存放原图像的灰度值。
(ii)out_buffer----存放结果图像的灰度值。
(iii)LUT----对应于灰度:
0~255,经gamma校正后的灰度值表格。
(LUT中的值即matlab中计算得到的:
round(Iout))
查表语句:
output[i]=LUT[input[i]];(i=0~4095)
/*源程序gammajiaozheng.c*/
#include
#include
#defineTRUE1
#defineFALSE0
#defineBUFSIZE4096/*定义BUFSIZE代表4096*/
intin_buffer[BUFSIZE];/*in_buffer数组(整型数)*/
intout_buffer[BUFSIZE];/*out_buffer数组(整型数)*/
staticintgamma(int*input,int*output);/*gamma校正子程序*/
staticvoiddataIO(void);/*图像数据输入子程序*/
voidmain()
{
int*input=&in_buffer[0];/*指针input指向in_buffer[0]*/
int*output=&out_buffer[0];/*指针output指向out_buffer[0]*/
puts("the3rdexperimentstarted\n");/*显示"the3rdexperimentstarted*/
while(TRUE)/*不断循环*/
{
dataIO();/*调用dataIO子程序*/
puts("processing\n");/*在运行栏中输入processinf*/
gamma(input,output);/*对input,output进行gamma矫正*/
dataIO();
}
}
staticintgamma(int*input,int*output)/*gamma校正子程序*/
{
inti;/*定义整型变量i*/
intLUT[256]={0,7,11,14,17,20,22,25,27,29,31,33,35,37,39,40,42,44,46,47,49,50,52,53,55,56,58,59,61,62,63,65,66,68,69,70,71,73,74,75,76,78,79,80,81,83,84,85,86,87,88,90,91,92,93,94,95,96,97,98,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,131,
132,133,134,135,136,137,138,139,140,141,141,142,143,144,145,146,147,148,149,149,150,151,
152,153,154,155,155,156,157,158,159,160,160,161,162,163,164,165,165,166,167,168,169,
169,170,171,172,173,173,174,175,176,177,177,178,179,180,181,181,182,183,184,185,185,186,
187,188,188,189,190,191,191,192,193,194,194,195,196,197,197,198,199,200,200,201,202,
203,203,204,205,206,206,207,208,208,209,210,211,211,212,213,213,214,215,216,216,217,218,
218,219,220,221,221,222,223,223,224,225,225,226,227,228,228,229,230,230,231,232,232,233,234,234,235,236,236,237,238,238,239,240,240,241,242,242,243,244,244,245,246,246,247,248,248,249,250,250,251,252,252,253,254,254,255};/*gamma校正表LUT*/
for(i=0;i output[i]=LUT[input[i]]; /*对每个输入像素值查表,进行gamma校正,结果存入out_buffer中*/ } return(TRUE);/*返回主程序*/ } staticvoiddataIO() /*图像输入子程序,其实没有进行任何操作,起到等待外部输入数据的作用*/ { return;/*返回*/ } /*链接命令文件gammajiaozheng.cmd*/ -mvolume.map MEMORY { PAGE0: EPROG: origin=0x3000,len=0x1000 VECT: origin=0xff80,len=0x80 PAGE1: USERREGS: origin=0x60,len=0x1c BIOSREGS: origin=0x7c,len=0x4 IDATA: origin=0x80,len=0x2f80 } SECTIONS { .vectors: {}>VECTPAGE0 .sysregs: {}>BIOSREGSPAGE1 .trcinit: {}>EPROGPAGE0 .gblinit: {}>EPROGPAGE0 frt: {}>EPROGPAGE0 .text: {}>EPROGPAGE0 .cinit: {}>EPROGPAGE0 .pinit: {}>EPROGPAGE0 .sysinit: {}>EPROGPAGE0 .bss: {}>IDATAPAGE1 .far: {}>IDATAPAGE1 .const: {}>IDATAPAGE1 .switch: {}>IDATAPAGE1 .sysmem: {}>IDATAPAGE1 .cio: {}>IDATAPAGE1 .MEM$obj: {}>IDATAPAGE1 .sysheap: {}>IDATAPAGE1 .stack: {}>IDATAPAGE1 } 实验要求: [1]在空格中添入注释。 [2]将gammajiaozheng.c,gammajiaozheng.cmd及c: \ti\c5400\cgtools\lib目录下的库文件rts.lib添加入所创建的工程: gammajiaozheng.pjt中。 [3]运行该程序。 [4]按View--WatchWindow,选择Watch1观测窗口,添加in_buffer和out_buffer变量,观测它们的起始地址: 图3 注: 不一定是图3中显示的地址,要观察后才能得知。 [5]从文件读入数据到内存: 按File----Data----Load,按下图设置: (a)(b) 图4 注: 图4(b)中的Adress是你所观测到的in_buffer起始地址(不一定是0x0080) [6]选View---Graph----Image...并按以下设置,画出原图像和经gamma校正后的图像。 (a)(b) 图5 (2)图像的直方图均衡化 直方图均衡化的基本思想是: 将原图的直方图变换为均匀分布的形式,以增加像素灰度值的动态范围,从而达到增强整体对比度的效果。 直方图均衡化的matlab语句: [g,LUT]=histeq(f); 其中f----原图像;g---直方图均衡化后的图像; LUT---对应于灰度值0~255的均衡化后像素的灰度。 步骤: 1)在matlab中,产生直方图均衡化表: LUT。 clear clc loadtire1%调入输入图像数据tire1.dat A=tire1; M=64;N=64; f=zeros(M,N); fori=1: M%将tire1.dat形成图像f f(i,: )=A((i-1)*N+1: i*N); end f=uint8(f);%将f转换为uint8格式 [g,LUT]=histeq(f);%对f进行直方图均衡化得g,并产生LUT表。 LUT=round(LUT*255)%将LUT乘以255并四舍五入,形成整数 则LUT=[0,0,0,0,4,4,8,12,16,20,24,32,40,45,53,61,65,69,73,77,81,81,85,85,89,89,93, 93,97,97,101,101,101,105,105,109,109,113,113,113,117,117,117,121,121, 121,125,125,125,125,125,130,130,130,134,134,134,134,134,138,138,138,138, 138,142,142,142,142,142,146,146,146,146,146,150,150,150,150,150,150,154, 154,154,154,154,158,158,158,162,162,162,162,162,166,166,166,166,170,170, 170,170,174,174,174,174,174,178,178,178,178,182,182,182,182,186,186,186, 186,190,190,190,190,194,194,194,194,198,198,198,198,198,198,202,202,202, 202,202,206,206,206,206,206,206,206,210,210,210,210,210,210,210,210,215, 215,215,215,215,215,215,219,219,219,219,219,219,219,219,219,223,223,223, 223,223,223,223,223,223,227,227,227,227,227,227,227,227,227,231,231,231, 231,231,231,231,231,231,231,231,231,235,235,235,235,235,235,235,235,235, 235,239,239,239,239,239,239,239,239,239,239,243,243,243,243,243,243,243, 243,243,243,243,243,247,247,247,247,247,247,247,247,247,247,247,247,251, 251,251,251,251,251,251,251,251,251,255,255,255,255]; 2)在CCS中用C语言编程,用查表法对图像: "tire.dat"进行直方图均衡化。 实验要求: [1]编程实现对图像tire.dat的直方图均衡化。 /*源程序junhenghua.c*/ #include #include #defineTRUE1 #defineFALSE0 #defineBUFSIZE4096 intin_buffer[BUFSIZE]; intout_buffer[BUFSIZE]; staticintgamma(int*input,int*output); staticvoiddataIO(void); voidmain() { int*input=&in_buffer[0]; int*output=&out_buffer[0]; puts("the3rdexperimentstarted\n"); while(TRUE) { dataIO(); puts("processing\n"); gamma(input,output); dataIO(); } } staticintgamma(int*input,int*output) { inti; intLUT[256]={0,0,0,0,4,4,8,12,16,20,24,32,40,45,53,61,65,69,73,77,81,81,85,85,89,89,93, 93,97,97,101,101,101,105,105,109,109,113,113,113,117,117,117,121,121, 121,125,125,125,125,125,130,130,130,134,134,134,134,134,138,138,138,138, 138,142,142,142,142,142,146,146,146,146,146,150,150,150,150,150,150,154, 154,154,154,154,158,158,158,162,162,162,162,162,166,166,166,166,170,170, 170,170,174,174,174,174,174,178,178,178,178,182,182,182,182,186,186,186, 186,190,190,190,190,194,194,194,194,198,198,198,198,198,198,202,202,202, 202,202,206,206,206,206,206,206,206,210,210,210,210,210,210,210,210,215, 215,215,215,215,215,215,219,219,219,219,219,219,219,219,219,223,223,223, 223,223,223,223,223,223,227,227,227,227,227,227,227,227,227,231,231,231, 231,231,231,231,231,231,231,231,231,235,235,235,235,235,235,235,235,235, 235,239,239,239,239,239,239,239,239,239,239,243,243,243,243,243,243,243, 243,243,243,243,243,247,247,247,247,247,247,247,247,247,247,247,247,251, 251,251,251,251,251,251,251,251,251,255,255,255,255}; for(i=0;i output[i]=LUT[input[i]]; } return(TRUE); } staticvoiddataIO() { return; } .... /*链接命令文件junhenghua.cmd*/(与gammajiaozheng.cmd相同) [2]运行程序,调入数据"tire.dat",画出原图像及经过直方图均衡化的图像。 [3]将均衡化后的图像数据保存为: "junhengtire.dat"(16位有符号整数格式)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 实验六 正弦波产生与图像增强的DSP实现 实验 正弦波 产生 图像 增强 实现