题目十一: 数字音频回声系统的处理实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通信系统工程应用训练实验报告题目:数字音频回声系统的处理
专业:通信工程
姓名: 吕迪
学号:13024219
指导教师:孙恩昌
完成日期:2016年6月6日
一、实验目的
(1)加深对IIR滤波器基本原理的理解;
(2)学习利用IIR滤波器的C语言程序;
(3)了解数字音频回声处理的方法,提高分析和解决问题的能力。
二、实验内容
下面是一个对实际效果模拟的组合方案,如图3所示。其中左面的子系统是延迟相加模块,滤波器参数分别为
1)α=0.75,b=1,R=29
2)α=0.75,b=0.9,R=37
3)α=0.75,b=0.8,R=44
4)α=0.75,b=0.7,R=50
右面的子系统是第二个延迟相加模块,参数为
1)α=0.75,R=27
2)α=0.75,R=31
输入一个脉冲信号,观察输出信号的波形(脉冲响应)。
图3 数字音频回声系统模拟
三、实验思路及流程图
四、实验结果
单位冲击响应时延29滤波后图形
单位冲击响应时延37滤波后图形
单位冲击响应时延44滤波后图形
单位冲击响应时延55滤波后图形
滤波后求和后图形
求和后时延27滤波后图形
再次时延31滤波后图形
DFT变换后频谱图
五、实验程序
#include "stdafx.h"
#include"D:\x_math.cpp"
#include"D:\x_graph.cpp"
void Filter1(int t,double x[]); //延迟相加模块一
void Filter2(double a,double b,double x[],int c0); //延迟相加模块二
void Filter3(double a,double b,double x[]); //延迟相加模块三
void plotgri2test(COLORREF gridcolor,COMPLEX p[],int N); //二维绘图函数
double a[60];
double b[60];
double c[60];
double d[60];
int main(int argc, char* argv[])
{
int i;
double x1[60];
COMPLEX X2[60],X3[60];
FILE *txtfile1;
FILE *txtfile2;
FILE *txtfile3;
FILE *txtfile4;
FILE *txtfile5;
FILE *txtfile6;
FILE *txtfile7;
x1[0]=1; //在零时刻提供一个脉冲
for(i=1;i<60;i++)x1[i]=0;
for(i=0;i<60;i++)a[i]=0;
window2("IIR数字滤波器-29",-2,3,70,-1,"t","f(t)");
HPEN pen1=CreatePen(PS_SOLID,5,BLACK),oldpen=(HPEN)SelectObject(win2.hdc,pen1);//创建画笔
HPEN pen2=CreatePen(PS_SOLID,1,RED);
HPEN pen3=CreatePen(PS_SOLID,5,BLUE);
xy2(GREEN);//画xy轴。
Filter1(29,x1);
SelectObject(win2.hdc,pen3);
for(int n=0;n<60;n++)
{
line2(n,0,n,a[n]);
}
SelectObject(win2.hdc,pen2);
for( n=0;n<60;n++)
{
line2(n,0,n,x1[n]);
}
getch();//等待
for(i=0;i<60;i++){
b[i]=a[i];
} //将结果存进数组b,进行求和
txtfile1=fopen("1.txt","w");
for(n=0;n<60;n++){
fprintf(txtfile1,"%lf,",a[n]);
}//将滤波结果存至txt文档
fclose(txtfile1);
frame2(win2.xstr,win2.ystr);//清除用户绘图区域,重画边框window2("IIR数字滤波器-37",-2,3,70,-1,"t","f(t)");
xy2(GREEN);//画xy轴。
Filter1(37,x1);
SelectObject(win2.hdc,pen3);
for( n=0;n<60;n++)
{
line2(n,0,n,a[n]);
}
SelectObject(win2.hdc,pen2);
for( n=0;n<60;n++)
{
line2(n,0,n,x1[n]);
}
getch();//等待
for(i=0;i<60;i++){
b[i]=b[i]+0.9*a[i];
}//进行求和
txtfile2=fopen("2.txt","w");
for(n=0;n<60;n++){
fprintf(txtfile2,"%lf,",a[n]);
}//将滤波结果存至txt文档
fclose(txtfile2);
frame2(win2.xstr,win2.ystr);//清除用户绘图区域,重画边框