admin管理员组

文章数量:1567917

2023年12月12日发(作者:)

信号与系统课程设计(论文)

设计(论文)题目变声器的设计与实现

学院名称

专业名称

学生姓名

学生学号

任课教师

设计(论文)成绩

教务处制

2016年11月 10 日

摘要

变声器的原理是通过改变输入声音频率,进而改变声音的音色,音调,是输出声音在感官上与原声音不同。变声器是借助对声音音色和音调的双重改变而使输出声音改变。

目前,变声器被运用在各个领域,比如保护人生安全,防止打击报复,还有各种软件上都有变声软件。在实验室里我们有两个方法到达变声的目的。一是通过MATLAB编写程序对声音信号的时频域进行分析,通过傅里叶变换进行频谱分析,得到声音的特征,将男女生的声音进行对比,得出男女生声音的主要频段,分析男女生声音的特征;再对所得信号进行滤波处理,最后改变声音的音色和音调,到达变声的目的。二是通过硬件来实现,我们用RTS0072B来实现变声,可以减少变声的步骤,但是需要硬件电路板来实现变声电路[1]。

关键词:MATLAB;RTS0072B;变声

目录

摘要........................................................................................................................ 2

第1章引言............................................................................................................ 4

1.1设计背景.................................................................................................. 4

1.2设计目的.................................................................................................. 4

1.3设计要求.................................................................................................. 4

第2章实验原理.................................................................................................... 5

第3章基于MATLAB的语音信号分析 ................................................................ 6

3.1 常见声音信号的频率范围..................................................................... 6

3.2 声音信号的时域和频域分析(程序详见附录(1)) ........................ 6

3.3 声音信号的滤波处理(程序详见附录(2)) .................................... 7

第4章基于STC89C52的变声器设计.................................................................. 9

4.1硬件实现.................................................................................................. 9

4.1.1实验器材..................................................................................... 9

4.1.2 实验原理图................................................................................ 9

4.1.3 RST0072B芯片......................................................................... 10

4.1.4 ISD1700存储芯片................................................................... 11

4.1.5 硬件实物图.............................................................................. 11

4.2软件实现................................................................................................ 12

第5章实验总结.................................................................................................. 13

参考文献.............................................................................................................. 14

附录...................................................................................................................... 15

第1章引言

1.1设计背景

变声器是通过改变输入音频的音色、音调,并将变声后的音频输出的工具。根据变声器材质不同,变声器分为变声器硬件和变声器软件。变声器硬件,即通过硬件实现变声的工具,譬如,知名动画名侦探柯南中,柯南侦破案件时扮演毛利小五郎时,使用的蝴蝶结,就是一种变声器,柯南正是通过这一蝴蝶结,模拟成毛利小五郎的声音,进行案件侦破的,这一变声器可称之为蝴蝶结变声器。

1.2设计目的

设计出一种能够实现变声功能的电路并做出实物,达到预期的变声效果,并实现不同频率的变声功能。

1.3设计要求

(1)分析声音信号的常见频率范围;

(2)在matlab中实现声音信号的时域和频域分析;

(3)在matlab中对声音信号进行滤波处理;

(4)进行变声器电路设计,仿真;

(5)变声器硬件电路制作,实现。

第2章实验原理

变声器是通过改变输入声音频率,进而改变声音的音色、音调,使输出声音在感官上与原声音不同。变声器是借助对声音音色和音调的双重复合改变,实现输出声音的改变的。通过自己发音,共振峰频率的改变是基本重采样实现的,从重采样原理知道,这也同时引发了基频的变化,为保证基频变化和共振频率变化的独立、互不相关,在基频移动是必须考虑抵消重采样带来的偏移,理论上只要基频检测足够精确,确保可以保证基频改变和共振峰频率改变间的互不相关,通过搬移和改变基频、语速,实现变声。

第3章基于MATLAB的语音信号分析

3.1常见声音信号的频率范围

声音是由物体振荡产生的,以声波的形式在介质中传播,介质主要分为固体,液体和气体。声波振动耳内的听小骨,他就是我们察觉到的声音。人耳听觉的频率范围:从20HZ----20KHZ,低于20HZ的次声波一般听不见,高于20KHZ的超声波也听不见。其中低频段(30-150HZ);中低频(150-500HZ);中高频段(500-5000HZ);高频段(5000-20kHZ)。而人声的频率范围是300Hz-3400Hz,不同的人或乐器产生的声音频率是不一样的,通过对声音的研究才能更好的对声音信号进行处理。

3.2声音信号的时域和频域分析(程序详见附录(1))

图3-1 男生声音信号处理图

通过对采集到的声音信号进行时域和频域的分析可以得出声音信号的时域和频率分布,通过对采集信号进行fft()傅里叶变换过后,可以得到声音信号 的频谱图。列如对男生和女生说话的声音进行时域和频域的分析,可以很轻易的看出男生说话时的频率,从图1-1男生声音信号处理图中,可以得出男声信号的频率分布。再通过男声和女声的对比,如图1-2 男女生声音频对比图可以得出女性音频要比男性音频高,这和我们实际生活中也是一样,女性说话要比男性音调高。

图 3-2 男女声音频对比图

3.3声音信号的滤波处理(程序详见附录(2))

在信号传输过程中,由于实验条件或各种客观条件的原因,语言处理系统都不可避免的受到各种噪声的的干扰。噪声不但降低了语言质量和语言的可懂度,而且还导致该系统性能的急剧恶化,严重是使整个系统无法正常工作。数字信号处理经过几十年的发展,在国内已经取得了很大的进展。到目前为止,已经比较成熟的去噪方法有切比雪夫去噪法,双线性变换去噪法,穿函数去噪法,巴特沃兹去噪法等,滤波电路的作用就是允许某段频率范围内的信号通过,而阻止或削弱其他频率范围的信号。有源滤波电路由电阻、电容和集成运算放大器组成,又称为有源滤波器。有源滤波器能 够在滤波的同时还能对信号起放大作用,这是无源滤波无法做到的。根据滤波电路通过或者 阻止信号频率范围不同,可将滤波电路分为低通、高通、带通河带阻电路。我们此次采取的是巴特沃兹去噪法[2]。 如图1-3滤波曲线图所示,就是通过滤波器处理的信号特性曲线。

通过调用matlab自带的“buttord”滤波器函数来实现低通滤波.巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,但是在阻频带则是逐渐下降为零,因此存在一段缓冲过渡区。在matlab中,函数[n,wn]=buttord(wp,ws,rp,rs);[b,a]=butter(n,wn,’low’); 用来创建巴特沃斯低通滤波器。

图3-3滤波特性曲线图

第4章基于STC89C52的变声器设计

4.1硬件实现

4.1.1实验器材

1

2

3

4

5

6

7

类型

RTS0072B

话筒

扬声器

电容电阻

ISD1700存储芯片

STC89C52

表4-1 实验器材表

数量

1

1

1

若干

1

1

4.1.2 实验原理图

图4-1 实验原理图

4.1.3 RST0072B芯片

变声器是通过改变输入音频的音色、音调,并将变声后的音频输出的工具。

语音转换是指改变一个说话人的语音个性特征,使之具有另外一个说话人的语音个性特征。 语音转换拥有很广泛的应用空间,例如:1、在文语转换系统中应用.2可以在电影配音中应用。3、语音转换的思想可以用于恢复受损语音,帮助声道受损的说话人的语音提高可懂度。4、可用于在保密通信中进行语音个性化的伪装。RTS0072b是一种单片封装图CMOS大规模集成电路设计的语言转换IC,他可以将声音移调转换成另外一个声音,通过将输入的正常速率的声音信号进行非正常速率的编码转换,这是通过输入音频信号抽样后的转换成数字信号,并重组数字信号以产生不同的声音。本次实验所用到的芯片是RTS0072b,他的封装如图4-2所示。部分引脚作用如下:

1)RDOUT:音频信号输出 图4-2 RTS0072b封装图

2)ROSCO: 读振荡器输出脚

3)WOSCI: 写振荡输入

4)ROSCI: 读振荡器输入脚

5)IN: 音频信号输入

6)AVDD: 模拟电源正

4.1.4 ISD1700存储芯片

ISD1700 系列芯片提供多种功能,包括可定制的信息操作指示音效,芯片内含有自动增益控制,麦克风前置扩大器,震荡器与内存等系统功能。可录、放音十万次,存储内容可以断电 保留一百年;两种控制方式,两种录音入方式,两种放;录音输出方式 可处理多达255段以上信有丰富多样的工作状态提示多种采样频率对应多种录放时间 音质好,电压范围宽,应用灵活,价廉物美[3]。如图4-3所示是存储芯片ISD1700的封装图。部分引脚左右如下:

1)VCCP:喇叭输出

2)AUD/AUX:单端点流输出

3)ROSC: 接地端

4)VCCA: 模拟电路电源

5)MIC-: 麦克风输入

6)MOSI: SPI接口的数据输入端

7)VCCD: 数字电路电源

4.1.5 硬件实物图

图4-3 ISD1700封装图

图4-4 硬件实物图

4.2软件实现

单片机源程序详见附录(3)

第5章 实验总结

本次课程设计时变声器的设计和实现,要求我们用matlab对声音信号进行时域,频域分析,在进行滤波处理,最后需要自己动手进行电路焊接。本次实验综合了很多知识,比如信号与系统,单片机等,所有综合性很强,花了很多时间才做出来的原因,主要是焊接电路很费时间和精力,焊了很多次都没有成功。变声器的原理是通过改变输入声音频率,进而改变声音的音色和音调,是输出声音在感官上与原音不同。本次采集的信号为男女声,通过对两种信号的分析,得出男声主要分布在较低的频段,而女声主要分布在较高的频段。经过滤波处理,噪声等无用信号被滤除。

通过这次课程设计,我对理论知识掌握得更加牢固,而且将理论和实践结合在一起,提高了自己的实践能力,并且认识到同学之间的合作是多么的重要。通过查阅知识,我提高了自己如何在众多的资料中查找资料的能力。这次课设给我提供了很好的机会,将知识与实践结合起来,提高了自己的能力。

参考文献

[1]陈家焱,陈东娇,张达响.基于matlab的声音信号采集与分析处理[J]. 计算机与现代化,2005,118(6).

[2]李彦哲,关恩明,张显民. 巴特沃兹有源低通滤波器的设计[J]. 科技论坛,中国电子科技集团第49研究所,黑龙江,哈尔滨,150001.

[3]曾婷,万星宇. ISD系列语音芯片原理与应用设计.四川大学制造科学与工程学院,成都,610065.

附录

(1)clear all;

[y0,Fs0]=audioread('3');

sound(y0,Fs0);

a=round(length(y0));

y01=fft(y0);y011=abs(y01);

t0=linspace(0,a/Fs0,a);

subplot(2,1,1);plot(t0,y0);title('(时域波形)');

xlabel('时间 t/s');

ylabel('幅度 n');

f0=linspace(0,Fs0,a);

subplot(2,1,2);plot(f0,y011);title('(频域波形)');

xlabel('频率 f/hz');

ylabel('幅度 n');

(2)fc=1000; %设定滤波器各参数

fst=1500;

rp=1; rs=30;

wp=fc*2/Fs0; %将模拟指标转换为数字指标

ws=fst*2/Fs0;

[n,wn]=buttord(wp,ws,rp,rs); %滤波器的最小阶数n,wn为系统的频带

[b,a]=butter(n,wn,'low');

figure(3); %绘制低通滤波器特性曲线

freqz(b,a); title('低通滤波器特性曲线');

x2=filter(b,a,y0);

%sound(x2,fs);

figure(4);

y2=abs(fft(x2));%滤波后的频谱

subplot(2,1,1);

plot(x2); %绘制滤波后的信号

title('滤波后语音信号时序图')

subplot(2,1,2); %绘制滤波后的音频频谱

plot(y2); title('滤波后语音信号频域图')

fc=1000; %设定滤波器各参数

fst=1500;

rp=1; rs=30;

wp=fc*2/Fs1; %将模拟指标转换为数字指标

ws=fst*2/Fs1;

[n,wn]=buttord(wp,ws,rp,rs); %滤波器的最小阶数n,wn为系统的频带

[b,a]=butter(n,wn,'low');

figure(5); %绘制低通滤波器特性曲线

freqz(b,a); title('低通滤波器特性曲线');

x3=filter(b,a,y1);

%sound(x2,fs);

figure(6);

y3=abs(fft(x3));%滤波后的频谱

subplot(2,1,1);

plot(x3); %绘制滤波后的信号

title('滤波后语音信号时序图')

subplot(2,1,2); %绘制滤波后的音频频谱

plot(y3); title('滤波后语音信号频域图')

(3)#include "REG52.h"

//************************宏定义***************************//

#define uchar unsigned char

#define uint unsigned int

//**************ISD1700状态寄存器及各个标志位定义*****************//

unsigned char bdata SR0_L; // SR0 寄存器

unsigned char bdata SR0_H;

unsigned char bdata SR1; // SR1 寄存器

unsigned char APCL=0,APCH=0; // APC 寄存器

unsigned char PlayAddL=0,PlayAddH=0; // 放音指针低位,高位

unsigned char RecAddL=0,RecAddH=0; // 录音指针低位,高位

sbit CMD=SR0_L^0; // SPI指令错误标志位

sbit FULL=SR0_L^1; // 芯片存储空间满标志

sbit PU=SR0_L^2; // 上电标志位

sbit EOM=SR0_L^3; // EOM标志位

sbit INTT=SR0_L^4; // 操作完成标志位

sbit RDY=SR1^0; // 准备接收指令标志位

sbit ERASE=SR1^1; // 擦除标志位

sbit PLAY=SR1^2; // 播放标志位

sbit REC=SR1^1; // 录音标志位

/**************************************************

* ISD1700 SPI指令函数声明 *

**************************************************/

unsigned char ISD_SendData(unsigned char dat); //向CPU发送&读回数据

unsigned char ISD_Devid (void); //读取APC寄存器内容

void ISD_PU(void); //上电

void ISD_STOP(void);// 发送STOP命令

void ISD_Reset(void);//复位

void ISD_Clr_Int(void); //清除中断标志

void ISD_Rd_Status(void);//读取状态寄存器内容

void ISD_Rd_Playptr(void);//读取放音指针

void ISD_PD(void); //下电

void ISD_Rd_Recptr(void);//读取录音指针

void ISD_Play(void); //放音

void ISD_Rec(void); //录音

void ISD_Erase(void) ; //擦出

void ISD_G_Erase(void); //全部擦出

void ISD_Rd_APC(void); //读取APC 寄存器内容

void ISD_WR_APC2(unsigned char apcdatl,apcdath); //设置APC2

void ISD_WR_NVCFG(unsigned char apcdatl,apcdath);

//将APC数据写入NVCFG寄存器中

void ISD_LD_NVCFG(void);//将NVCFG数据载入APC寄存器中

void ISD_FWD(void); //放音指针下跳一段,指向下一段语音的起始地址

void ISD_CHK_MEM(void); //空间检查

void ISD_EXTCLK(void); //启用/关闭 外部时钟模式

void ISD_SET_PLAY (unsigned char Saddl,Saddh,Eaddl,Eaddh);//定点播放

void ISD_SET_Rec (unsigned char Saddl,Saddh,Eaddl,Eaddh);//定点录音

void ISD_SET_Erase(unsigned char Saddl,Saddh,Eaddl,Eaddh);//定点擦出

//**********************端口定义**************************//

sbit SS=P1^0;

sbit SCK=P1^1;

sbit MOSI=P1^2;

sbit MISO=P1^3;

sbit Key_AN= P0^0;

sbit Key_STOP= P0^4;

sbit Switch_PR=P2^0; //PLAY=0;REC=1;

void main(void)

{

uchar i;

Cpu_Init(); // CPU及系统变量初始化

delay(1); ISD_Init(); // ISD初始化

while(1)

{

if(Key_AN==0)

{

delay(10);

if(Key_AN==0)

{

if(Switch_PR==1) PR_flag=1; //进行录音

else PR_flag=0; // 进行放音

ISDWORK();

}

}

if(Key_STOP==0)

{ delay(20);

if (Key_STOP==0)

{ for (i=100;i>0;i--)

{if (Key_STOP==1)

{flag=0x80; ISDWORK();ISD_Init();break;}

delay(30);}

if (flag==0x80)

{flag=00;continue;}

Erase_flag=1; ISDWORK();

}

}

}

}

//******************CPU初始化******************//

void cpu_init (void)

{

P1 = 0xFF;P2 = 0xFF;P3 = 0xFF;

TMOD = 0x01;//定时器初始化,工作于方式1

EA = 0;//关中断

fang = 0;//标志位归0

}

//******************芯片系统初始化******************//

void isd_init (void)

{

uchar i = 2;SS = 1;SCK = 1;MOSI = 0;

do {isd_pu (); isd_rd_status ();}while(CMD_ERR||(!PU));

isd_wr_apc2 (0x40,0x04);

do {isd_rd_status ();} while(RDY==0);

}

//******************isd1760的相关操作******************//

void isdwork (void)

{uchar i;

switch (fang)

{

case 0x00:

{

do { isd_rd_status (); } while(RDY==0);

delayms(10);isd_play ();delayms(2);

do

{

isd_rd_status ();

if(STOP==0)

{

delayms (10);

if(STOP==0)

{LED = 1;

isd_clr_int ();isd_stop ();isd_reset ();isd_pd ();isd_init ();

return;}

}

}while(PLAY==1);

LED = 1;isd_clr_int ();

do {isd_rd_status ();} while(RDY==0);

delayms (10);isd_fwd ();

do {isd_rd_status ();} while(RDY==0);

}break;

case 0x02:

{

isd_clr_int ();

do {isd_rd_status ();} while(RDY==0);

delayms(10);isd_rec ();delayms(2);

do {isd_rd_status ();} while(AN==0);

isd_clr_int ();isd_stop ();}break;

case 0x10:

{

do {isd_rd_status ();} while(RDY==0);

delayms (10);isd_g_erase ();delayms (2);

do {isd_rd_status ();} while(RDY==0);

case 0x80:

{

isd_clr_int ();isd_stop ();isd_reset ();isd_pd ();

}break;

}

}

在本次课程设计中,我们通过阅读RTS0072b和ISD1700的器件手册,了解了它们的用途与用法,在老师和同学的帮助下完成了本次课程设计,本次课程设计总计完成了8块电路板,但是都失败了,最后在老师的鼓励下完成了本次试验,学生真的非常感谢老师。

学习心得

2016年 1 月 5 日

学生(签名):

本人郑重声明所呈交的课程报告是本人在指导教师指导下进行的研究工作及诚信承诺

取得的研究成果。据我所知,除了文中特别加以标注的地方外,论文中不包含其他人已经发表或撰写过的研究成果。与我一同工作的同学对本文研究所做的贡献均已在报告中作了明确的说明并表示谢意。

学生(签名):

任课

教师

评语

成绩评定:

任课教师(签名):

年 月 日

本文标签: 声音信号变声进行频率