c语言写的fir低通滤波器

c语言写的fir低通滤波器
c语言写的fir低通滤波器

根据fir滤波器的公式y(n)=∑h(m)x(n-m);(m: 0~(N-1)).利用MATLAB产生滤波器系数(h(n))并归一化,下面为一个LP滤波算法

void filter(void)

{

uint16 i,j;

fp32 sum;

int16 x1[2030];

fp32 h[19]={ -0.0027, -0.0025, 0.0050, 0.0157, -0.0000, -0.0471, -0.0482, 0.0838, 0.2953, 0.4013,

0.2953, 0.0838, -0.0482, -0.0471, -0.0000,0.0157, 0.0050, -0.0025, -0.0027};

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

x1[i] = data0[i];

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

{

sum=0.0;

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

{

if(i >= j)

sum+=h[j]*x1[i-j];

else

;

}

data0[i]=(int16)sum;

}

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

{

data0[i] = data0[i+20];

}

}

考虑到前19个点为不完全累加和,故抛去前19个点。(应该是前后各18个点都是不完全累加和,都应该去掉,对于数据分段进入滤波器的情况,应该把前一段的后面数据放到下一段的前面,这段时间我在解调FSK时遇到了这个问题,通过滤波器的数据的分段处理。)

设输入数据x[N],输出数据y[N],滤波器系数h[n]

1.直接法(由y(m)=h(0)*x(m)+h(1)*x(m-1)+...+h(N-1)*x(m-n-1));

void fir(short x[], short h[], short y[])

{

int i,j;

long long sum;

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

{

sum = 0;

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

sum += x[j-i] * h[i];

y[j] = sum >> 15;

}

}

乘法器使用次数:N*n

2.逆推法:

void fir(short x[], short h[], short y[])

{

int i,j;

long sum;

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

{

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

{

sum = 0;

sum = h[j] * x[i]

y[i] += sum >> 15;

}

}

}

乘法器使用次数:N*n

3.倒序法:(输入输出可以是同一量)

void fir(short x[], short h[], short y[]) {

int i,j;

long long sum;

for (j = N; j > 0; j--)

{

sum = 0;

for (i = n; i > 0; i--)

sum += x[j-i] * h[i];

y[j] = sum >> 15;

}

}

#include

#include

#define true 1

#define false 0

#define n 8

#define bufsize 100 /* the buffer size is 100 */

/* global declarations */

int in_buffer[bufsize]; /* processing data buffers */

int out_buffer[bufsize];

/* functions */

static int processing(int *input, int *output);

static void dataio(void);

static long round(long a);

void main()

{

int *input = &in_buffer[0];

int *output = &out_buffer[0];

puts("the 1st experiment started\n");

/* 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.

*/

// read the input signal.

// if the input file is sine1.dat, the signal contains 300hz,400hz and 500hz.

// if the input file is sine2.dat, the signal contains 100hz,400hz and 500hz.

// the sampling frequency is 1200hz.

dataio();

/* remove the frequency compoment of 400hz and 500hz*/

processing(input, output);

// write the output signal.

// the output file is result.dat.

dataio();

}

}

/*

* ======== processing ========

*

* function: apply a low-pass fir filter to input signal and remove the frequency higher than 350hz.

*

* parameters: address of input and output buffers.

*

* return value: true.

static int processing(int *input, int *output)

{

int i,size = bufsize;

short xx0,x,y;

// short z[n]={0,0,0,0,0,0,0,0,0};

short z[n]={0,0,0,0,0,0,0,0};

//short w[2*n+1]={22,356,155,990,466,220,777,216,777,26,466,9,155,0,22};

//short w[2*n+1]={6,457,56,1024,224,418,523,382,784,99,784,43,523};

// short

w[2*n+1]={330*2,3299*2,1982*2,6867*2,4955*2,1594*2,6607*2,1065*2,4955*2,109*2,1982*2,17*2, 330*2};

//short w[2*n+1]={661,6598,3964,13733,9910,3187,13214,2131,9910,217,3964,34,661};

// short

w[2*n+1]={58,5628,526,8192,2105,5883,4913,3829,7369,1543,7369,504,4913,102,2105,14,526,1,5 8};

//short

w[2*n+1]={28,4432,280,8192,1259,4883,3356,3975,5873,1509,7048,644,5873,142,3356,30,1259,3, 280,0,28};

// short w[2*n+1]={26,651,182,1024,545,421,909,247,909,51,545,11,182,1,26};

//short

w[2*n+1]={831,20846,5815,32768,17445,13486,29075,7888,29075,1647,17445,349,5815,21,831}; //short w[2*n+1]={208,5211,1454,8192,4361,3371,7269,1972,7269,412,4361,87,1454,5,208};

short w[2*n+1]={101,4356,810,8192,2835,3403,5670,2517,7088,605,5670,193,2835,21,810}; // short

w[2*n+1]={101,4356,810,8192,2835,3403,5670,2517,7088,605,5670,193,2835,21,810,2,101};

// short

w[2*n+1]={50,3814,454,8192,1815,3504,4235*,3084,6353,831,6353,349,4235,50,1815,8,454,0,50} ;

long y0,z0;//22222222222222

while(size--){

xx0=*input++;

x=xx0*6;

z0=(long)x<<15;

y0=0;

for(i=0;i

{

z0-=(long)w[2*i+1]*(long)z[i];

y0+=(long)w[2*i+2]*(long)z[i];

}

y0+=(long)w[0]*(z0>>15);

y0=round(y0);

for(i=n-1;i>0;i--)

z[i]=z[i-1];

z0=round(z0);

z[0]=(short)(z0>>15);

y=(short)(y0>>15);

*output++ =y;

}

/* additional processing load */

return(true);

/*

* ======== dataio ========

*

* function: read input signal and write processed output signal. *

* parameters: none.

*

* return value: none.

*/

static void dataio()

{

/* do data i/o */

return;

}

static long round(long a)

{

long x3;

x3=a&(0xffff0000);

return x3;

}

数字图像处理_旋转与幅度谱(含MATLAB代码)

数字图像处理实验一 15生医 一、实验内容 产生右图所示图像 f1(m,n),其中图像大小为256 ×256,中间亮条为128×32,暗处=0,亮处=100。 对其进行FFT: ①同屏显示原图f1(m,n)和FFT(f1)的幅度谱图; ②若令f2(m,n)=(-1)^(m+n)f1(m,n),重复 以上过程,比较二者幅度谱的异同,简述理由; ③若将f2(m,n)顺时针旋转90度得到f3(m,n),试显示FFT(f3)的 幅度谱,并与FFT(f2)的幅度谱进行比较; ④若将f1(m,n) 顺时针旋转90度得到f4(m,n),令f5(m,n) = f1(m,n) + f4(m,n),试显示FFT(f5)的幅度谱,指出其与 FFT(f1)和FFT(f4)的关系; ⑤若令f6(m,n)=f2(m,n)+f3(m,n),试显示FFT(f6)的幅度谱,并指出其与 FFT(f2)和FFT(f3)的关系,比较FFT(f6)和FFT(f5)的幅度谱。 二、运行环境 MATLAB R2014a 三、运行结果及分析 1.同屏显示原图f1(m,n)和FFT(f1)的幅度谱图:

50100150200250 100150200250 50100150200250 100150200250 2.令f2(m,n)=(-1)^(m+n )f1(m,n),对其进行FFT ,比较f2与f1幅度谱的异同,简述理由: 50100150200250 100150200250 50100150200250 100150200250 异同及理由:①空域:f2由于前边乘了系数(-1)^(m+n ),导致灰度值有正有负,而在MATLAB 的imshow 函数中默认把负值变为0(有些情况是取反),所以形成了如左图所示的黑白花纹。②频域:FFT(2)

滤波器语音信号去噪讲解

******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2013年春季学期 信号处理课程设计 题目:基于MATLAB的FIR滤波器语音信号去噪专业班级:通信工程(1)班 姓名:王兴栋 学号:10250114 指导教师:陈海燕 成绩:

摘要 语音信号在数字信号处理中占有极其重要的地位,因此选择通过对语音信号的研究来巩固和掌握数字信号处理的基本能力十分具有代表性。对数字信号处理离不开滤波器,因此滤波器的设计在信号处理中占有极其重要的地位。而MATLAB 软件工具箱提供了对各种数字滤波器的设计。本论文“在MATLAB平台上实现对语音信号的去噪研究与仿真”综合运用了数字信号处理的各种基本知识,进而对不带噪语音信号进行谱分析以及带噪语音信号进行谱分析和滤波处理。通过理论推导得出相应的结论,再通过利用MATLAB作为编程工具来进行计算机实现比价已验证推导出来的结论。在设计过程中,通过设计FIR数字滤波器和IIR数字滤波器来完成滤波处理。在设计过程中,运用了MATLAB对整个设计中的图形的绘制和一些数据的计算以及仿真。 关键字滤波器;MATLAB;仿真;滤波

前言 语音是语言的声学表现,是人类交流信息最自然、最有效、最方便的手段。随着社会文化的进步和科学技术的发展,人类开始进入了信息化时代,用现代手段研究语音处理技术,使人们能更加有效地产生、传输、存储、和获取语音信息,这对于促进社会的发展具有十分重要的意义,因此,语音信号处理正越来越受到人们的关注和广泛的研究。 语音信号是信息技术处理中最重要的一门科学,是人类社会几步的标志。那么什么是语音?语音是人类特有的功能,也是人类获取外界信息的重要工具,也是人与人交流必不可少的重要手段。那么什么又是信号?那信号是什么呢?信号是传递信息的函数。离散时间信号——序列——可以用图形来表示。 语音信号处理是一门用研究数字信号处理研究信号的科学。它是一新兴的信息科学,同时又是综合多个学科领域的一门交叉科学。语音在我们的日常生活中随时可见,也随处可见,语音很大程度上可以影响我们的生活。所以研究语音信号无论是在科学领域上还是日常生活中都有其广泛而重要的意义。 本论文主要介绍的是的语音信号的简单处理。本论文针对以上问题,运用数字信号学基本原理实现语音信号的处理,在matlab7.0环境下综合运用信号提取,幅频变换以及傅里叶变换、滤波等技术来进行语音信号处理。我所做的工作就是在matlab7.0软件上编写一个处理语音信号的程序,能对语音信号进行采集,并对其进行各种处理,达到简单语音信号处理的目的。 对语音信号的研究,本论文采用了设计两种滤波器的基本研究方法来达到研究语音信号去噪的目的,最终结合图像以及对语音信号的回放,通过对比,得出结论。

编译原理C语言词法分析器

编译原理 C语言词法分析器 一、实验题目 编制并调试C词法分析程序。 a.txt源代码: ?main() { int sum=0 ,it=1;/* Variable declaration*/ if (sum==1) it++; else it=it+2; }? 设计其词法分析程序,能识别出所有的关键字、标识符、常数、运算符(包括复合运算符,如++)、界符;能过滤掉源程序中的注释、空格、制表符、换行符;并且能够对一些词法规则的错误进行必要的处理,如:标识符只能由字母、数字与下划线组成,且第一个字符必须为字母或下划线。实验要求:要给出所分析语言的词法说明,相应的状态转换图,单词的种别编码方案,词法分析程序的主要算法思想等。 二、实验目的 1、理解词法分析在编译程序中的作用; 2、掌握词法分析程序的实现方法与技术; 3、加深对有穷自动机模型的理解。 三、主要函数 四、设计 1、主函数void main ( ) 2 3

4、整数类型判断函数 char *key1[]={" ","(",")","[","]","{","}",",",";","'"}; /*分隔符表*/

char *key2[]={" ","+","-","*","/","%","<",">","==",">=","<=","!=","!","&&","||","<<",">>","~","|","^","&","=","?:","->","++","--","、","+=","-=","*=","/="}; /*运算符表*/ int xx0[35],xx1[10],xx2[31]; int temp_key3=0,temp_c40=0,temp_c41=0,temp_c42=0,temp_c43=0; /******* 初始化函数*******/ void load() { int mm; for (mm=0;mm<=34;mm++) { xx0[mm]=0; } for (mm=0;mm<=9;mm++) { xx1[mm]=0; } for (mm=0;mm<=30;mm++) { xx2[mm]=0; } FILE *floading; if ((floading=fopen("key0、txt","w"))==NULL) { printf("Error! Can't create file : key0、txt"); return; } fclose (floading); /*建立保留字表文件:key0、txt*/ if ((floading=fopen("key1、txt","w"))==NULL) { printf("Error! Can't create file : key1、txt"); return; } /*建立分隔符表文件:key1、txt*/ if ((floading=fopen("key2、txt","w"))==NULL) { printf("Error! Can't create file : key2、txt"); return; } fclose(floading); /*建立运算符表文件:key2、txt*/ if ((floading=fopen("key3、txt","w"))==NULL) { printf("Error! Can't create file : key3、txt");

用MATLAB编程实现数字图像旋转

用MATLAB编程实现数字图像旋转 摘要:文章论述了用Matlab编程实现数字图像旋转的基本方法,从计算机几何坐标中的图像旋转矩阵表示着手,给出了图像旋转变换的推导过程,用简单综合插值方法,基本解决了数字图像旋转后出现的空洞问题,并通过Matlab编程工具进行实验验证。 关键词:数字图像旋转;移动变换;旋转矩阵变换;简单综合插值。 数字图像处理是指将图像信号转换成数字信号并利用计算机对其进行处理的过程。目前,数字图像处理的信息大多是二维信息。由于数据量大,因此对计算机的计算速度、存储容量等要求较高。随着微型计算机性能的提高,原来以大型机、小型机为主机的图像处理系统演变为以微机为主机的结构,其应用也迅速普及,当前图像处理技术在工业自动化、工业检测、遥感探测、军事、航空、生物医学等各个方面都发挥着十分重要的作用。 图像旋转是一种常用的数字图像处理技术,传统的图像旋转都是在二维空间中进行的,由于旋转后图像像素点坐标不再是整数,故旋转后必须对像素点灰度进行一维插值运算或二维插值运算,尤其是当对旋转后的图像质量要求较高时,需要采用高阶插值运算。 文章从通用的图像旋转矩阵着手,给出了图像旋转变及换简单综合插值的推导过程,并用Matlab编程工具进行实验验证图像旋转结果。 1Matlab简介 MATLAB是矩阵实验室(Matrix Laboratory)之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C、C#等语言来解算相同的事情简捷得多。 2图像旋转矩阵

根据MATLAB的加噪语音信号的滤波

《计算机仿真技术》 基于MATLAB的加噪语音信号的滤波学生姓名: 专业:电子信息工程 班级: 学号: 指导教师: 完成时间:2017年12月

一.滤波器的简述 在MATLAB环境下IIR数字滤波器和FIR数字滤波器的设计方法即实现方法,并进行图形用户界面设计,以显示所介绍迷你滤波器的设计特性。 在无线脉冲响应(IIR)数字滤波器设计中,先进行模拟滤波器的设计,然后进行模拟-数字滤波器转换,即采用脉冲响应不变法及双线性Z变化法设计数字滤波器,最后进行滤波器的频带转换。在有限脉冲响应(FIR)数字滤波器设计中,讨论了FIR线性相位滤波的特点和用窗口函数设计FIR数字滤波器两个问题。两类滤波器整个过程都是按照理论分析、编程设计、集体实现的步骤进行的。为方便分析直观者直观、形象、方便的分析滤波器的特性,创新的设计出图形用户界面---滤波器分析系统。整个系统分为两个界面,其内容主要包括四个部分:System(系统)、Analysis(分析)、Tool(工具)、Help(帮助)。 数字滤波在DSP中占有重要地位。数字滤波器按实现的网络结构或者从单位脉冲响应,分为IIR(无限脉冲响应)和FIR(有限脉冲响应)滤波器。如果IRR 滤波器和FIR滤波器具有相同的性能,那么通常IIR滤波器可以用较低的阶数获得高的选择性,执行速度更快,所有的存储单元更少,所以既经济又高效。二.设计要求 1.在matlab平台上录制一段语音信号; 2.完成语音信号的谱分析; 3.对语音信号进行加噪以及加噪后信号的谱分析; 4.选择合适的滤波器进行滤波,确定相关指标; 5.实现滤波过程,显示滤波后的结果,并进行谱分析。 三.实验内容与步骤 1、语音信号的录入

c语言语法分析器详解

#include #include #include /*******************************************/ int count=0; /*分解的产生式的个数*/ int number; /*所有终结符和非终结符的总数*/ char start; /*开始符号*/ char termin[50]; /*终结符号*/ char non_ter[50]; /*非终结符号*/ char v[50]; /*所有符号*/ char left[50]; /*左部*/ char right[50][50]; /*右部*/ char first[50][50],follow[50][50]; /*各产生式右部的FIRST和左部的FOLLOW集合*/ char first1[50][50]; /*所有单个符号的FIRST集合*/ char select[50][50]; /*各单个产生式的SELECT集合*/ char f[50],F[50]; /*记录各符号的FIRST和FOLLOW是否已求过*/ char empty[20]; /*记录可直接推出@的符号*/ char TEMP[50]; /*求FOLLOW时存放某一符号串的FIRST集合*/ int validity=1; /*表示输入文法是否有效*/ int ll=1; /*表示输入文法是否为LL(1)文法*/ int M[20][20]; /*分析表*/ char choose; /*用户输入时使用*/ char empt[20]; /*求_emp()时使用*/ char fo[20]; /*求FOLLOW集合时使用*/ /******************************************* 判断一个字符是否在指定字符串中 ********************************************/ int in(char c,char *p) { int i; if(strlen(p)==0) return(0); for(i=0;;i++) { if(p[i]==c) return(1); /*若在,返回1*/ if(i==strlen(p)) return(0); /*若不在,返回0*/ } } /******************************************* 得到一个不是非终结符的符号 ********************************************/

真正实现C语言绘制数学函数图像

用C语言画函数图像 横纵坐标单位长度比校正(3:5) 真正的余弦函数 #include #include int sishewuru(float a); void main() { int n = 450; float a[500], b[500]; int i,j; a[0] = b[0] = 0; for (i = 1; i < n; i++)

a[i] = a[i - 1] + 0.01; b[i] = cos(a[i]); } int A[500],B[500]; for (i = 0; i < n; i++) { //printf("sin(%f)=%f\n", a[i], b[i]); a[i] = 100 * a[i]; b[i] = 55 * b[i]; A[i] = sishewuru(a[i]); B[i] = sishewuru(b[i])+60; //printf("sin(%d)=%d\n", A[i], B[i]); } for ( i = 100; i >=0; i--) { for ( j = 0; j < n; j++) { if (i==B[j]) { printf("*"); } else { printf(" "); } } printf("\n"); } } int sishewuru(float a) { int m; if (a-floor(a)<0.5) { m = a; return m; } else { m = a + 1; return m; } }

1.调节输出框大小,字符显示大小 2.确定函数的定义域 3.确定定义域上的步长 4.计算函数值 5.确定函数值放大系数 6.确定定义域恰好落在显示的区间内 7.确定坐标的单位长度与字符实际长度之间的换算关系 8.确定打点的顺序与坐标的关系 定义域在),(ππ-的正弦函数图像 定义域在),(ππ-的正切函数图像

基于MATLAB的FIR滤波器语音信号去噪设计

基于MATLAB的FIR滤波器语音信号去噪设计

****************** 实践教学 ****************** 兰州理工大学 计算机与通信学院 《信号处理》课程设计题目:基于MATLAB的FIR滤波器语音信号去噪

摘要 随着信息技术的不断发展,现代信号处理正向着数字化发展,研究语音信号的滤波设计也成了现代信息处理的基本内容。本次课程设计主要内容是基于MATLAB的FIR滤波器语音信号去噪。主要运用麦克风采集一段语音信号,对其进行了时域分析和频谱分析,分析语音信号的特性,并对语音信号加入了随机噪声,采用凯塞(Kaiser)窗函数法设计了一个FIR 低通滤波器,然后对加噪的语音信号进行滤波处理。最后对滤波前后的语音信号的时域和频域特性进行对比。 关键词:MATLAB;语音信号;FIR滤波器;凯塞(Kaiser)窗

目录 第一章语音信号采样和滤波器设计的基本原理1 1.1语音信号采样的基本原理 (1) 1.1.1 采样定理 (1) 1.1.2 采样频率 (1) 1.2数字滤波器的基本理论和设计的基本原理2 1.2.1 数字滤波器的类型 (2) 1.2.2 窗口设计法 (3) 第二章语音信号去噪的总体设计 (6) 2.1 语音信号去噪的设计流程图 (6) 2.2 语音信号去噪的设计流程的介绍 (6) 第三章语音信号去噪的仿真实现及结果分析 8 3.1 语音信号的采集 (8) 3.2 加噪语音信号的频谱分析 (9) 3.3 语音信号的滤波去噪 (10) 3.4 语音信号去噪的结果分析 (12) 总结 (13) 参考文献 (14) 附录 (15) 致谢 (20)

c语言字符串左旋转

假设原数组序列为abcd1234,要求变换成的数组序列为1234abcd,即循环右移了4 位。 比较之后,不难看出,其中有两段的顺序是不变的:1234 和abcd,可把这两段看成两个整 体。右移K 位的过程就是把数组的两部分交换一下。 变换的过程通过以下步骤完成: 逆序排列abcd:abcd1234 →dcba1234; 逆序排列1234:dcba1234 →dcba4321; 全部逆序:dcba4321 →1234abcd。 伪代码可以参考清单2-35。 //代码清单2-35 Reverse(int* arr, int b, int e) { for(; b < e; b++, e--) { int temp = arr[e]; arr[e] = arr[b]; arr[b] = temp; } } RightShift(int* arr, int N, int k) {

K %= N; Reverse(arr, 0, N – K - 1); Reverse(arr, N - K, N - 1); 8 Reverse(arr, 0, N - 1); } 这样,我们就可以在线性时间内实现右移操作了。 就拿abcdef 这个例子来说(非常简短的三句,请细看,一看就懂): 1、首先分为俩部分,X:abc,Y:def; 2、X->X^T,abc->cba,Y->Y^T,def->fed。 3、(X^TY^T)^T=YX,cbafed->defabc,即整个翻转。 #include 5. #include 6. 7. void rotate(char *start, char *end) 8. { 9. while(start != NULL && end !=NULL && start

语音信号滤波去噪——使用TUKEYWIN窗设计的FIR滤波器

语音信号滤波去噪——使用TUKEYWIN窗 设计的FIR滤波器 摘要本课程设计主要使用TUKEYWIN窗设计的FIR滤波器对语音信号进行滤波去噪。课程设计的的平台为MATLAB。采集一段语音信号,绘制波形并观察其频谱,给定相应技术指标,用窗函数法设计一个满足指标的FIR滤波器,对该语音信号进行滤波去噪处理。根据滤波后的时域图和原始语音信号时域图的比较,以及滤波后信号的频谱图和原始音乐信号频谱图的比较,最后回放滤波后音乐信号,滤波后的音乐信号与原始音乐信号一样清晰,成功地实现了滤波,达到了设计的要求。 关键词课程设计;滤波去噪;FIR滤波器;TUKEYWIN窗;MATLAB 1 引言 本课程设计是采用TUKEYWIN窗设计的FIR滤波器对语音信号进行滤波去噪。通过课程设计了解FIR滤波器设计的原理和步骤,掌握用Matlab语言设计滤波器的方法,了解DSP对FIR滤波器的设计及编程方法。通过观察音乐信号滤波前后的时域波形的比较,加深对滤波器作用的理解。通过对比滤波前后波形图的比较和放滤波前后音乐信号的对比,可以看出滤波器对有用信号无失真放大具有重大意义。 1.1 课程设计目的 熟悉Matlab语言环境,掌握Matlab语言的编程规则,利用TUKEYWIN窗函数设计法来设计符合要求的FIR滤波器来实现语音信号的滤波去噪。并绘制滤波前后的时域波形和频谱图。根据图形分析判断滤波器设计的正确性。通过本次课程设计熟悉利用TUKEYWIN窗函数法设计FIR滤波器的过程。增强自己独立解决问题的能力,提高自己

的动手能力。加深对理论知识联系实际问题的理解。为以后的工作奠定坚实的基础。 1.2 课程设计要求 录制一段语音信号,绘制观察波形及频谱图。根据TUKEYWIN的性能指标合理设计FIR滤波器,对语音信号加入干扰,再用滤波器对干扰语音信号进行滤波去噪,比较滤波前后的频谱图并进行分析。再回放语音信号对比原语音信号。看滤波器是否对语音信号进行了滤波去噪。 1.3课程设计平台 MATLAB名字由MATrix和LABoratory两词的前3个字母组合而成。20世纪70年代后期,时任美国新墨西哥大学计算机科学系主任的Cleve Moler教授出于减轻学生编程负担的动机,为学生设计了一组调用LINPACK和EISPACK库程序的“通俗易用”的接口,此即用FORTRAN编写的萌芽状态的MATLAB[1]。 MATLAB软件包括五大通用功能:数值计算功能(Nemeric);符号运算功能(Symbolic);数据可视化功能(Graphic);数据图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。其中,符号运算功能的实现是通过请求MAPLE 内核计算并将结果返回到MATLAB命令窗口。该软件有三大特点:一是功能强大;二是界面友善、语言自然;三是开放性强。目前,Mathworks公司已推出30多个应用工具箱。MATLAB在线性代数、矩阵分析、数值及优化、数理统计和随机信号分析、电路与系统、系统动力学、信号和图像处理、控制理论分析和系统设计、过程控制、建模和仿真、通信系统、以及财政金融等众多领域的理论研究和工程设计中得到了广泛应用。 MATLAB在信号与系统中的应用主要包括符号运算和数值计算仿真分析。由于信号与系统课程的许多内容都是基于公式演算,而MATLAB借助符号数学工具箱提供的符号运算功能能基本满足信号与系统课程的需求。例如,解微分方程、傅里叶正反变换、拉普拉斯正反变换、z正反变换等。MATLAB在信号与系统中的另一主要应用是数值计算与仿真分析,主要包括函数波形绘制、函数运算、冲激响应与阶跃响应仿真分析、信号的时域分析、信号的频谱分析、系统的S域分析、零极点图绘制等内容。数值计算仿真分析可以帮助学生更深入理解信号与系统的理论知识,并为将来使用MATLAB进行信号处理领域的各种分析和实际应用打下基础[2]。 2 基本理论

语音信号的FIR滤波器处理课程设计

DSP课程设计报告语音信号的FIR滤波器处理 姓名:张伟槟 班级:12电信3 学号:201231190425 指导老师:徐梅宣 日期:2015.06.02~2014.06.19 华南农业大学电子工程学院

摘要 随着信息与数字技术的发展,数字信号处理已经成为当今极其重要而学科与技术领域之一。它在通信、语音、图像、自动控制、雷达、军事、航空航天、医疗和家用电器等众多领域得到了广泛的应用。在数字信号处理的基本方法中,通常会涉及到变换、滤波、频谱分析、调制解调和编码解码等处理。其中滤波是应用非常广泛的一个环节,数字滤波器的理论和相关设计也一直都是人们研究的重点之一。FIR滤波器的是非递归的,稳定性好,精度高;更重要的是,FIR滤波器在满足幅频响应要求的同时,可以获得严格的线性相位特征。因此,它在高保真的信号处理,如数字音频、图像处理、数据传输和生物医学等领域得到广泛应用。 CSS集成开发环境使用CCS内置的软件仿真simulator对程序进行编译,调试和运行,主要用于检测目标程序运行的正确性和连贯性,并能通过仿真器与目标板连接,在目标板上实时观察效果。 在本次设计中,我们选择的课题是基于DSP的语言信号的FIR滤波处理。首先利用MATLAB进行了仿真,得到滤波前后的时域波形和频谱。然后通过调用MATLAB的分析工具FDATOOL,根据仿真结果导出了滤波器的相关参数,将原始信号数据和滤波器参数输入CCS进行DSP编程。最后在DSP中实现了FIR低通滤波,并通过CCS的频谱分析功能查看了最终DSP的滤波效果。 关键词:语音信号处理 FIR滤波 MATLAB CCS

目录 1.前言 (4) 2.设计需求 (4) 3.滤波器设计原理介绍 (4) 3.1数字滤波器设计原理 (4) 3.2FIR滤波器的基本结构 (5) 3.3 滤波器的特点 (5) 3.4窗函数的介绍 (6) 4.FIR滤波器的设计 (7) 4.1FIR滤波器设计 (7) 4.2窗函数设计的基本方法 (7) 4.3滤波器的1 z算法实现 (7) 5.FIR滤波器的MATLAB设计 (8) 6.FIR滤波器的DSP实现 (10) 6.1CCS设计与仿真 (10) 6.2CCS仿真结果 (13) 6.调试问题及解决办法 (16) 7.设计感想 (16) 参考文献 (17) 8.附录 (17)

C语言编译器的设计与实现.

C语言编译器的设计与实现 01计算机4班18号任春妍2号陈俊我们设计的编译程序涉及到编译五个阶段中的三个,即词法分析器、语法分析器和中间代码生成器。编译程序的输出结果包括词法分析后的二元式序列、变量名表、状态栈分析过程显示及四元式序列程序,整个编译程序分为三部分: (1) 词法分析部分 (2) 语法分析处理及四元式生成部分 (3) 输出显示部分 一.词法分析器设计 由于我们规定的程序语句中涉及单词较少,故在词法分析阶段忽略了单词输入错误的检查,而将编译程序的重点放在中间代码生成阶段。词法分析器的功能是输入源程序,输出单词符号。我们规定输出的单词符号格式为如下的二元式:(单词种别,单词自身的值) #define ACC -2 #define syl_if 0 #define syl_else 1 #define syl_while 2 #define syl_begin 3 #define syl_end 4 #define a 5 #define semicolon 6 #define e 7 #define jinghao 8 #define s 9 #define L 10 #define tempsy 11 #define EA 12 #define EO 13 #define plus 14 #define times 15 #define becomes 16 #define op_and 17 #define op_or 18 #define op_not 19 #define rop 20 #define lparent 21 #define rparent 22 #define ident 23 #define intconst 24

数字图像处理9-图像的平移与旋转

这次作业的内容是要完成让图片绕任意一点旋转的效果,同时要了解图像旋转的原理。为了达到这一目的,我在老师的示例代码上进行了改进,并自己计算出新的变换矩阵,达到了作业中要求的效果。这里我们先来看一下旋转的效果。 旋转中心(0,0),旋转60°旋转中心(0,0),旋转120° 旋转中心(100,0),旋转120°旋转中心(0,600),旋转120° 图像的大小是690*728,旋转的角度为顺时针,因此可以看到四副图中的结果都是符合预期的。之后我们来通过代码,详细的分析这一变化实现的过程。代码如下: close all; f = imread('try.jpg'); theta = 2* pi / 3; x0=0; y0=600; T = [cos(theta) sin(theta) 0 -sin(theta) cos(theta) 0 0 0 1]; t1=[ 1 0 0

0 1 0 -x0 -y0 1]; t2=[1 0 0 0 1 0 x0 y0 1]; T=t1*T*t2; tform = maketform('affine',T); [g, xdata, ydata] = imtransform(f,tform, 'FillValue',255); imshow(g,'XData',xdata,'YData',ydata); hold on; imshow(f); axis auto; axis on; 读入图像后,先设定了三个参数,x0y0就是旋转中心的坐标,而theta就是旋转角(顺时针)。这里要详细说明一下这几个矩阵的作用,并且推导出其生成的过程。首先最主要的矩阵T,是负责旋转的矩阵。以下这个图片摘自网络,可以说较为完整的解释了这个矩阵的来历。

语音信号滤波去噪——使用汉宁窗设计的FIR滤波器要点

语音信号滤波去噪——使用汉宁窗设计的 FIR滤波器 学生姓名:指导老师: 摘要本课程设计主要是对一段语音信号,加入噪声后,用汉宁窗设计出的FIR滤波器对加入噪声后的语音信号进行滤波去噪处理。在此次课程设计中,系统操作平台为Windows XP,程序设计的操作软件为MATLAB 7.0。此课程设计首先是用麦克风采集一段语音信号,加入噪声,然后采用汉宁窗函数法设计出FIR滤波器,再用设计出的滤波器对这段加噪后的语音信号进行滤波去噪,最后对前后时域和频域的波形图进行对比分析,从波形可以看出噪声被完全滤除,达到了语音不失真的效果,说明此次设计非常成功。 关键词程序设计;滤波去噪;FIR滤波器;汉宁窗;MATLAB 7.0 1 引言 本课程设计主要是对一段语音信号,进行加噪后,用某种函数法设计出的FIR滤波器对加入噪声后的语音信号进行滤波去噪处理,并且分析对比前后时域和频域波形的程序设计。 1.1 课程设计目的 在此次课程中主要的要求是用麦克风采集一段语音信号,绘制波形并观察其频谱,给定相应技术指标,用汉宁窗设计一个满足指标的FIR滤波器,对该语音信号进行滤波去噪处理,比较滤波前后的波形和频谱并进行分析,根据结果和学过的理论得出合理的结论。与不同信源相同滤波方法的同学比较各种信源的特点,与相同信源不同滤波方法的同学比较各种滤波方法性能的优劣。 通过此次课程设计,我们能够学会如何综合运用这些知识,并把这些知识运用于实践当中,使所学知识在综合运用能力上以及分析问题、解决问题能力上得到进一步的发展,

让自己对这些知识有更深的了解。通过课程设计培养严谨的科学态度,认真的工作作风和团队协作精神。 1.2课程设计的要求 (1)滤波器指标必须符合工程实际。 (2)设计完后应检查其频率响应曲线是否满足指标。 (3)处理结果和分析结论应该一致,而且应符合理论。 (4)独立完成课程设计并按要求编写课程设计报告书。 1.3 工作平台简介 课程设计的主要设计平台式MATLAB 7.0。如下图1-1所示:MATLAB 的名称源自Matrix Laboratory ,它是美国MathWorks公司生产的一个为科学和工程计算专门设计的交互式大型软件,是一个可以完成各种精确计算和数据处理的、可视化的、强大的计算工具。它集图示和精确计算于一身,在应用数学、物理、化工、机电工程、医药、金融和其他需要进行复杂数值计算的领域得到广泛应用。它不仅是一个在各类工程设计中便于使用的计算工具,而且也是一个在数学、数值分析和工程计算等课程教学中的优秀的教学工具,在世界各地的高等院校中十分流行,在各类工业应用中更有不俗的表现。MATLAB可以在几乎所有的PC机和大型计算机上运行,适用于Windows、UNIX等各种系统平台[1]。 总的来说,该软件有三大特点。一是功能强大。具有数值计算和符号计算、计算结果和编程可视化、数学和文字统一处理、离线和在线计算等功能;二是界面友善、语言自然。MATLAB以复数处理作为计算单元,指令表达与标准教科书的数学表达式相近;三是开放性强。当学好MATLAB的同时,会更好的帮助自己去就解决一些难题,而且MATLAB拥有非常好的发展前途,对我们未来的帮助也是不可限量的。

C语言图形开发库函数graphics

函数名: fillellipse 功能: 画出并填充一椭圆 用法: void far fillellipse(int x, int y, int xradius, int yradius); 程序例: #include #include int main(void) { int gdriver = DETECT, gmode; int xcenter, ycenter, i; initgraph(&gdriver,&gmode,""); xcenter = getmaxx() / 2; ycenter = getmaxy() / 2; for (i=0; i<13; i++) { setfillstyle(i,WHITE); fillellipse(xcenter,ycenter,100,50); getch(); } closegraph(); return 0; } Graphics 类 .NET Framework 类库 Graphics 类 封装一个GDI+ 绘图图面。无法继承此类。 命名空间:System.Drawing 程序集:System.Drawing(在system.drawing.dll 中) 语法 Visual Basic(声明)

Public NotInheritable Class Graphics Inherits MarshalByRefObject Implements IDeviceContext, IDisposable Visual Basic(用法) Dim instance As Graphics C# public sealed class Graphics : MarshalByRefObject, IDeviceContext, IDisposable C++ public ref class Graphics sealed : public MarshalByRefObject, IDeviceContext, IDisposable J# public final class Graphics extends MarshalByRefObject implements IDeviceContext, IDisposable JScript public final class Graphics extends MarshalByRefObject implements IDeviceContext, IDisposable 备注 Graphics类提供将对象绘制到显示设备的方法。Graphics与特定的设备上下文关联。 通过调用从System.Windows.Forms.Control继承的对象的Control.CreateGraphics方法,或通过处理控件的Control.Paint事件并访问System.Windows.Forms.PaintEventArgs类的Graphics属性,可以获取Graphics。 继承层次结构 System.Object System.MarshalByRefObject System.Drawing.Graphics 线程安全 此类型的任何公共静态(Visual Basic 中的Shared)成员都是线程安全的,但不保证所有实例成员都是线程安全的。 平台 Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

基于MATLAB的语音信号FIR数字滤波处理

目录 1 绪论 (2) 2课程设计的具体实现 (4) 2.1 语音信号的录制 (4) 2.2 FIR滤波器的设计方法 (4) 3语音信号的时频分析 (5) 3.1语音信号载入MATLAB (5) 3.2语音信号时域和频域分析 (6) 3.3设计FIR数字滤波器 (7) 3.3.1 窗函数hamming设计带通滤波器 (8) 3.3.2 窗函数hanning设计带通滤波器 (9) 3.3.3 窗函数Blackman设计带通滤波器 (10) 3.3.4 窗函数Boxcar设计带通滤波器 (11) 3.4滤波之后的时域和频域分析 (12) 3.4.1 窗函数hamming设计带通滤波器滤波 (13) 3.4.2 窗函数hanning设计带通滤波器滤波 (13) 3.4.3 窗函数Blackman设计带通滤波器滤波 (14) 3.4.4 窗函数Boxcar设计带通滤波器滤波 (15) 3.5回放语音信号 (16)

结论 (16) 参考文献 (18) 1 绪论 数字信号处理是利用计算机或专用处理设备,以数值计算的方法对信号进行采集、抽样、变换、综合、估值与识别等加工处理,借以达到提取信息和便于应用的目的。它在语音、雷达、图像、系统控制、通信、航空航天、生物医学等众多领域都获得了极其广泛的应用。具有灵活、精确、抗干扰强、设备尺寸小、造价低、速度快等优点。 数字滤波器, 是数字信号处理中及其重要的一部分。随着信息时代和数字技术的发展,受到人们越来越多的重视。数字滤波器可以通过数值运算实现滤波,所以数字滤波器处理精度高、稳定、体积小、重量轻、灵活不存在阻抗匹配问题,可以实现模拟滤波器无法实现的特殊功能。数字滤波器种类很多,根据其实现的网络结构或者其冲激响应函数的时域特性,可分为两种,即有限冲激响应( FIR,Finite Impulse Response)滤波器

音乐信号滤波去噪—用凯塞窗设计的FIR滤波器

音乐信号滤波去噪—用凯塞窗设计的FIR 滤波器 学生姓名:指导老师: 摘要本课程设计主要是通过使用凯塞窗设计一个FIR滤波器以对音乐信号进行滤波去噪处理。本设计首先通过麦克风采集一段音乐信号,依据对该信号的频谱分析,给定相关指标。以MATLAB软件为平台,采用凯塞窗设计满足指标的FIR滤波器,以该音乐信号进行滤波去噪处理。通过对比滤波前后的波形图,深入了解滤波器的基本方法。通过程序调试及完善,该设计基本满足设计要求。 关键词滤波去噪;FIR滤波器;凯塞窗函数;MATLAB

1 引言 数字滤波器是一种用来过滤时间离散信号的数字系统,它是通过对抽样数据进行数学处理来达到频域滤波的目的。随着现代通信的数字化,数字滤波器变得更加重要。数字滤波器的种类很多,但总的来说可以分成两大类,一类是经典滤波器,另一类可称为现代滤波器。从滤波特性方面考虑,数字滤波器可分成数字高通、数字低通、数字带通和数字带阻等滤波器。从实现方法上考虑,将滤波器分成两种,一种称为无限脉冲响应滤波器,简称IIR(Infinite Impulse Response)滤波器,另一种称为FIR(Finite Impulse Response)滤波器[1]。设计FIR数字滤波器的方法有窗函数法、频率采样法和等波纹最佳逼近法等。 1.1 课程设计目的 数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。在过去的二十多年时间里,数字信号处理已经在通信等领域得到极为广泛的应用。数字信号处理是利用计算机或专用处理设备,以数字形式对信号进行采集、变换、滤波、估值、增强、压缩、识别等处理,以得到符合人们需要的信号形式。 在本次课程设计中,最主要的设计是设计FIR滤波器,FIR滤波器的设计方法主要分为两类:第一类是基于逼近理想滤波器器特性的方法包括窗函数法、频率采样法、和等波纹最佳逼近法;第二类是最优设计法。 本次的课程设计主要采用的是第一类设计方法,是利用汉宁窗函数法设计FIR滤波器对一段语音进行滤波去噪,通过这一过程,对滤波前后波形进行对比分析得到结论。此课程设计比较简单,主要是将书本中的知识运用到现实中,并且根据自己对设计题目的理解,运用软件编写出程序实现这一设计,也是我们对数字信号处理的原理进行验证的一个过程。对此,也可以加深我们对所学知识的理解,培养我们的动手能力。 1.2课程设计的要求 (1)通过利用各种不同的开发工具实现模拟信号数字化、信道编解码、基带数字信号编解码、数字信号的调制解调和语音信号的滤波去噪等课题,掌握数字信号的分析方法和处理方法。

opencv 图像翻转旋转

opencv 图像翻转、旋转 转自: https://www.360docs.net/doc/6f3438936.html,/watkinsong/article/details/9189649 1.图像左右翻转、翻转90度 opencv中并没有直接封装图像旋转任意角度的函数,一般我们可以使用仿射变换获得旋转后的图像,这时候可以进行任意角度的旋转,但是如果我们需要将图像旋转90度,例如只是对图像进行左右翻转,或者旋转90度将图像放倒,那么如果还使用仿射变换,显得有些不是很简单,有点过于复杂。实际上可以使用求转置矩阵的方式将图像旋转90度,然后可以沿着指定的坐标轴对旋转后的图像进行翻转变化。使用transpose(src, dst);对目标图像进行转置变换,可以将垂直的图像变为水平放置。然后使用flip()函数对图像进行翻转。整个过程非常简单,可以看下下面的代码就非常清晰的了解了。// ImageFlip.cpp : Defines the entry point for the console application. //#include "stdafx.h" #include "opencv/cv.h" #include "opencv/highgui.h" #include "stdio.h" #include "iostream"using namespace cv;

using namespace std;int _tmain(int argc, _TCHAR* argv[]) { Mat src = imread("lena.jpg"); Mat dst; transpose(src, dst); Mat dst2; flip(dst, dst2, 1); // flip by y axis Mat dst3; flip(dst, dst3, 0); // flip by x axis Mat dst4; flip(dst, dst4, -1); // flip by both axises imshow("src", src); imshow("dst", dst); imshow("dst2", dst2); imshow("dst3", dst3); imshow("dst4", dst4); cvWaitKey(); return 0; } 实验结果:原始图像: 转置以后: flip(dst, dst2, 1); // flip by y axis2、任意角度旋转、同时缩放(输出图像大小与输入图像大小相同,容易造成图像不全)下面这份代码用于实现对图像的缩放与旋转。

相关文档
最新文档