DSP中的卷积算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
卷积算法设计总框图
3.2 卷积算法设计的原理
1)卷积算法基础理论
卷积的基本理论和公式
卷积和:对离散系统“卷积和”也是求线性时不变系统输出响应(零状态响应)的主要方法。
卷积和的运算在图形表示上可分为四步:
A)翻褶现在亚变量坐标M上作出X(m)和H(m),将m=0的垂直轴为轴翻褶成H(-m).
B)移位将H(-m)移位n,即得H(n—m)。
当n为正整数时,右移n位。
当n为负整数时,左移n位。
C)相乘再将H(n-m)和X(m)的相同m值的对应点值相乘.
D)相加把以上所有点的对应点的乘积叠加起来,即得Y(n)值。
依上法,取n=……,-2,-1,0,1,2,3,……各值,即可得全部Y(n)值. 程序流程图
程序的自编函数及其功能
1)processing(int *input2,int *output2)
调用形式:processing1(int *input2,int *output2)
参数解释:input2、output为两个整型指针数组。
返回值解释:返回一个“TURE”,让主函数的While循环保持连续。
功能说明:对输入的input2 buffer波形进行截取m点,再以零点的Y轴为对称轴进行翻褶,把生成的波形上的各点的值存入以OUTPUT2指针开始的一段地址空间中。
2)processing2(int *output2,int *output3)
调用形式: processing2(int *output2,int *output3)
参数解释:output2、output3为两个整形指针数组。
返回值解释:返回了一个“TREN",让主函数的While循环保持连续。
功能说明:对输出的output2 buffer波形进行作n点移位,然后把生成的波形上的各点的值存入以OUTPUT3指针开始的一段空间中。
3)processing3(int *input1,int *output2,int *output4)调用形式:processing3(int *input1,int *output2,int *output4)参数解释:output2、output4、input1为三个整型指针数组。
返回值解释:返回了一个“TRUE",让主函数的While循环保持继续。
功能说明:对输入的input2 buffer波形和输入的input1 buffer做卷积和运算,然后把生成的波形上的各点的值存入以OUTPUT4指针开始的地址空间中。
4)processing4(int *input2,int *output1)
调用形式:processing4(int *input2,int *output1)
参数解释:output1、input为两个整型指针数组
返回值解释:返回了一个“TRUE”,让主函数的循环保持继续。
功能说明:对输入的input2 buffer波形截取m点,然后把生成的波形上的各点的值存入以OUTPUT1指针开始的一段地址空间中。
源程序:
#include "DSP281x_Device.h”
#include ”DSP281x_Examples.h”
#include ”f2812a。
h”
#include ”stdio。
h”
#include ”volume。
h"
int inp1_buffer[BUFSIZE];
int inp2_buffer[BUFSIZE];
int out1_buffer[BUFSIZE];
int out2_buffer[BUFSIZE];
int out3_buffer[BUFSIZE];
int out4_buffer[BUFSIZE*2];
int size = BUFSIZE;
int ain = MINGAIN;
int zhy=0;
int sk=64;
unsigned int processingLoad = 1;
static int processing1(int *output1, int *output2);
static int processing2(int *output2, int *output3);
static int processing3(int *input1,int *output2,int *output4); static int processing4(int *input2, int *output1);
static void dataIO1(void);
static void dataIO2(void);
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];
void main(void)
{ int jishu=0;
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");
while(TRUE)
{
dataIO1();
dataIO2();
processing4(input2,output1);
processing1(output1, output2);
/*processing2(output2, output3); */
processing3(input1,output2,output4) ;
jishu++;//在此处加断点
}
}
static int processing4(int *input2,int *output1)
{ int m=sk;
for(;m>=0;m--)
{
*output1++ = (*input2++) * ain;
}
for(;(size—m)〉0;m++)
{output1[m]=0;
}
}
static int processing1(int *output1,int *output2)
{
int m=sk—1;
for(;m〉0;m—-)
{
*output2++ = *output1++ * ain;
}
}
static int processing2(int *output2, int *output3)
{ int n=zhy,m;
size=64;
for(;n〈64;n++)
{ *output3++ = output2[n];
m=*output3;
}
return(TRUE);
}
static int processing3(int *input1,int *output2,int *output4) { int m=sk;
int y=zhy;
int z,x,w,i,f,g;
for(;(m—y)>0;)
{i=y;
x=0;
z=0;
f=y;
for(;i〉=0;i—-)
{g=input1[z]*output2[f];
x=x+g;
z++;
f--;
}
*output4++ = x;
y++;
}
m=sk;
y=sk-1;
w=m—zhy—1;
for(;m>0;m--)
{
y-—;
i=y;
z=sk-1;
x=0;
f=sk-y;
for(;i〉0;i——,z--,f++)
{g=input1[z]*output2[f];
x=x+g;
}
out4_buffer[w]=x;
w++;
}
}
static void dataIO1()
{
return;
}
static void dataIO2()
{
/* do data I/O */
return;
}
仿真设置
1)在程序中“dataIO1();”上单击鼠标右键选择“Toggle software breakpoint",设置软件断点:再在同一行上单击鼠标右键,选择“software breakpoint”,“edit”,来设置断点。
此时打开了一个新的窗口.最后设置成如下图所示:
2)同理,在程序中“dataIO2();”上同样操作设置。
最后设置如下图:
3)打开窗口菜单Viwe->Graph->Frequency…进行如下设置:
仿真图
1)当输入波为SIN,SIN时
SIN-—-—-—---——---—--——--inp1
SIN——-—--—————--—-—-—-——inp2
SIN--——--—-—--—-——-—-—-—out
2)当输入波为SIN11 、SIN11时
SIN11---——-—-———-——-——————inp1
SIN11----——-—--—-——--—————inp2
SIN11——---—-———--———--—-——out 3)当输入波为SIN22、SIN22时
SIN22—---——---———-------—-inp1
SIN22—--—-—-——-——--—————-—inp2
SIN22--—-—----—-——--—---——out
5)当输入波为SIN33、SIN33时
SIN33—-—-----————-—-—--—--inp1
SIN33---——---———-—--—-——-—inp2
SIN33—-—-——--———-——-—-————out 6)当输入波为SIN44、SIN44时
SIN44--——--—-——--—-—-——-—-inp1
SIN44—--—-—-——----——-——-——inp2
SIN44---—---——---———---—-—out
7)当输入波为SIN44、SIN
Sin44-——-—--————-—---inp1
Sin—---—-—---—-—---—--inp2
SIN44、SIN-———-———-Out 8)当输入波为SIN11、SIN33时
Sin33——-——-——--—--—--———------inp2
Sin11。
sin33-———---———-—--——-——Out 9)当输入波为SIN22、SIN时
Sin—-—---——--—-—---—----——-—--inp2
Sin22。
Sin--—----—-——-———---—--Out。