第8章 TMS320C55x软件设计实例
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
int size = BUFSIZE;
int ain = MINGAIN; int zhy=0; int sk=64; /*sk代表所设置的bufsize大小,需修改它。输入文件 sine.dat为32点,sine11.dat, sin22.dat, sin33.dat, sin44.dat为64点的输入波形.*/
2013-8-7 东华理工大学信息与电子工程学院
8
2
3
–卷积算法的DSP实现 (1)processing1(int *input2, int *output2)
–参数:intput2、output2为两个整型指针数组。 –返回值:返回了一个“TRUE”,让主函数的while循环保 持连续。 –功能说明:对输入的input2 buffer波形进行截取m点,再 以零点的Y轴为对称轴进行翻转,把生成波形上的各点的值 存入OUTPUT2指针指向的一段地址空间中。(m点依Y轴 翻转、保存)
2013-8-7 东华理工大学信息与电子工程学院 8
/* loop forever */ while(TRUE) { /* Read input data using a probe-point connected to a host file. Write output data to a graph connected through a probe-point. */
static int processing4(int *input2, int *output1);
static void dataIO1(void); static void dataIO2(void); /* ======== main ======== */
2013-8-7 东华理工大学信息与电子工程学院 7
2013-8-7 东华理工大学信息与电子工程学院 5
#include <stdio.h> #include "volume.h"
/* Global declarations */
int inp1_buffer[BUFSIZE]; /* processing data buffers */ int inp2_buffer[BUFSIZE]; int out1_buffer[BUFSIZE]; int out2_buffer[BUFSIZE]; int out3_buffer[BUFSIZE]; int out4_buffer[BUFSIZ设计实例
FIR滤波器差分方程如下,x(n)为输入序列, y(n)为输出序列,h(k)为滤波器系数,N为滤波 N 1 器阶数。
y ( n) h( k ) x ( n k )
0
FIR滤波器的结构图
2013-8-7
东华理工大学信息与电子工程学院
16
• FIR的MATLAB设计
2013-8-7 东华理工大学信息与电子工程学院 14
8.2 有限冲激响应滤波器(FIR)的实现
• 特点和结构
– 容易实现线性相位
– 可以实现任意形状滤波器(多通带、多阻带)
– 稳定性好
– 无法直接设定阻带衰减指标
– 阶数较大
– 过渡带性能和实时性之间存在矛盾
2013-8-7 东华理工大学信息与电子工程学院 15
2013-8-7 东华理工大学信息与电子工程学院 9
} /*======== processing ======== FUNCTION: apply signal processing transform to input signal. PARAMETERS: address of input and output buffers. RETURN VALUE: TRUE. */
/* additional processing load */
// load(processingLoad); return(TRUE); }
2013-8-7 东华理工大学信息与电子工程学院 11
static int processing2(int *output2, int *output3) { //此过程将output2波形n点移位后存入output3
12
static int processing3 //此过程进行卷积运算后存入output4指向的空间 (int *input1,int *output2,int *output4) { int m=sk; m=sk; int y=zhy; y=sk1; int z,x,w,i,f,g; w=mzhy1; for(;(my)>0;) for(;m>0;m ) { i=y; { x=0; y ; i=y; z=sk1; z=0; x=0; f=sky; f=y; for(;i>0;i ,z ,f++) for(;i>=0;i ) {g=input1[z]*output2[f]; {g=input1[z]*output2[f]; x=x+g; x=x+g; } z++; out4_buffer[w]=x; f ; w++; } } *output4++ = x; //load(processingLoad); y++; return(TRUE); } } 2013-8-7 13 东华理工大学信息与电子工程学院
void main() { int *input1 = &inp1_buffer[0]; int *input2 = &inp2_buffer[0]; int *output1 = &out1_buffer[0];
int *output2 = &out2_buffer[0];
int *output3 = &out3_buffer[0]; int *output4 = &out4_buffer[0]; puts("volume example started\n");
dataIO1() ; // break point dataIO2() ; // break point /* apply gain */ processing4(input2,output1); processing1(output1, output2); processing2(output2, output3); processing3(input1,output2,output4) ; }
static int processing4(int *input2,int *output1) { int m=sk; //此过程取m点的值存入output1指向的空间 for(;m>=0;m ) { *output1+ + = *input2++ * ain; } for(;(sizem)>0;m++) {output1[m]=0; } // load(processingLoad); return(TRUE); }
• 卷积算法的MATLAB实现
– 函数conv用于计算两个有限长序列之间的卷积
2013-8-7 东华理工大学信息与电子工程学院 2
例如:已知两个序列: x(n) = [3,11,7,0,-1,4,2], -3 n 3; h(n) = [2,3,0,-5,2,1], -1 n 4 求卷积y(n)=x(n)h(n)。 要作该例子的卷积,就能用 >> x = [3, 11, 7, 0, -1, 4, 2]; >> h = [2, 3, 0, -5, 2, 1]; >> y = conv(x,h) y = 6 31 47 6 -51 -5 41 18 -22 -3 得到正确的y(n)值。
2013-8-7 东华理工大学信息与电子工程学院 4
(3)processing3(int *input1,int *output2,int*output4)
–参数:output2、output4、input1为三个整型指针数组
–功能:对输入的input2 buffer波形和输入的input1 buffer作 卷积和运算,然后把生成的波形上的各点的值存入OUTPUT4指 针指向的地址空间中。(求卷积和、保存)
• 算法
(1)翻转:先在变量坐标m上作图x(m)和h(m),将h(m)以
m=0的垂直轴为对称轴翻转成h(-m)。
(2)移位:将h(-m)移位n,即得h(n-m)。当n为正整数时, 右移n位。当n为负整数时,左移n位。
(3)相乘:再将h(n-m)和x(m)相同m值的对应点值相乘
(4)相加:把以上所有对应点的乘积叠加,即得y(n)值。
第8章 TMS320C55x软件设计实例
• 卷积算法 • 有限冲激响应滤波器(FIR)的实现 • 无限冲激响应滤波器(IIR)的实现 • 快速傅里叶变换(FFT) • 语音信号编码解码(G.711) • 数字图像的锐化 • Viterbi译码
2013-8-7 东华理工大学信息与电子工程学院 1
8.1 卷积算法
(2)processing2(int *output2, int *output3)
–参数:output2、output3为两个整型指针数组。 –返回值:返回了一个“TRUE”,让主函数的while循环保 持连续。 –功能:对输出的output2 buffer波形进行作n点移位,然 后把生成的波形上的各点的值存入OUTPUT3指针指向的地 址空间中。 (n点移位、保存)
2013-8-7 东华理工大学信息与电子工程学院 /* volume control variable */ 6
//unsigned int processingLoad = 1; /* processing routine load value */
/* Functions */
extern void load(unsigned int loadValue); static int processing1(int *output1, int *output2); static int processing2(int *output2, int *output3); static int processing3(int*input1,int*output2,int*output4);
//指向的空间
int n=zhy; size=BUFSIZE; for(;(sizen)>0;n++) { *output3++ = output2[n]; } /* for (;n>0;n ) { *output3++ = 0;} */ // load(processingLoad); return(TRUE); } 2013-8-7 东华理工大学信息与电子工程学院
–返回值:返回了一个“TRUE”,让主函数while循环保持连续。
(4)processing4(int *input2,int *output1)
–参数:output1、input2为两个整型指针数组。
–返回值:返回了一个“TRUE”,让主函数while循环保持连续。
–功能:对输入input2 buffer波形截取m点,然后把生成波形上 各点的值存入OUTPUT1指针指向的地址空间中。 (截取m点、保存)
2013-8-7 东华理工大学信息与电子工程学院 10
static int processing1(int *output1,int *output2) {
//此过程将m点翻转后存入output2指向的空间
int m=sk1;
for(;m>0;m ) { *output2++ = *output1++ * ain; }
/* ======== dataIO ======== FUNCTION: read input signal and write processed output signal. * PARAMETERS: none. * RETURN VALUE: none. */
static void dataIO1() { /* do data I/O */ return; } static void dataIO2() { /* do data I/O */ return; }