AD信号采集与语音信号处理.doc

上传人:doc321 文档编号:14926935 上传时间:2022-02-24 格式:DOC 页数:25 大小:275KB
返回 下载 相关 举报
AD信号采集与语音信号处理.doc_第1页
第1页 / 共25页
AD信号采集与语音信号处理.doc_第2页
第2页 / 共25页
AD信号采集与语音信号处理.doc_第3页
第3页 / 共25页
AD信号采集与语音信号处理.doc_第4页
第4页 / 共25页
AD信号采集与语音信号处理.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《AD信号采集与语音信号处理.doc》由会员分享,可在线阅读,更多相关《AD信号采集与语音信号处理.doc(25页珍藏版)》请在三一文库上搜索。

1、目录摘要1 基于USB总线的A/D卡的报告 1.1 USB总线简介 1.2 USB总线结构 1.3 USB总线信号环境 1.4 USB数据传输类型 1.5 信息包 1.6 USB接口的数据采集系统的设计实现 1.7 A/D转换电路2 DA卡的工作原理与外部接线 2.1 DA卡的工作原理 2.2 DA卡外部接线 2.3 DA卡数据输出程序3音乐信号的采集、处理与分析 3.1音乐信号的获取 3.2音乐信号的频谱分析 3.3分别加入尖锐噪声和平缓噪声 3.4设计滤波器,滤波处理 3.5音乐回放 3.6低音音乐信号的处理分析摘要信号处理是对各种形式的信息进行信息获取、变换、存储、传输、交换、应用等环节

2、中的信号与信息的处理,是信息科学的重要组成部分,信息处理的应用日益广泛。本文主要研究DA信号的生成和音乐器信号的处理。对于DA信号的生成,我们利用USB数据采集器的A/D,D/A转换功能利用计算机对USB2833输入数字信号经D/A,A/D转换后输回计算机来实现。对于音乐信号的处理,我们根据任务书的要求采集高低音歌曲并对其加噪声,利用matlab读取信号,并分析了加噪与不加噪信号频谱的区别,在此基础上设计了滤波器滤除噪声,对滤波后信号进行了分析并与无噪声的信号对比,两者无太大差别表明滤波效果良好。关键词:USB2833、matlab、频谱分析、滤波器一、基于USB总线的A/D卡的报告1.1 U

3、SB(通用串行总线)简介信息技术的飞速发展和数字化的广泛应用,数据采集也愈加重要,传统的外设与主机的通信口一般采用ISA、PCI、CPCI等标准,基于这些接口的产品,安装麻烦,价格昂贵,并受计算机插槽数量、地址中断资源限制,且可扩展性差,USB的出现很好的解决了以上问题。USB是一种快速的双向的、同步传输的、廉价的并可以进行热拔插的串行接口。 USB接口使用方便,可以连接多个不同的设备,而过去的串口和并口只能接一个设备。速度快是USB技术的突出特点之一,全速USB接口的最高传输率可达12Mbs,比串口快了整整100倍,而执行USB 2.0标准高速USB接口速率更是达到7480 Mbs,这使得高

4、分辨率、真彩色的大容量图像的实时传送成为可能。 USB接口支持多个不同设备的串列连接,一个USB接口理论上可以连接127个USB设备。连接方式也十分灵活,既可以使用串行连接,也可以使用集线器(Hub)把多个设备连接在一起,再同Pc机的USB接口相接。普通的使用串口、并口的设备都需要单独的供电系统,而USB设备则不需要。正是由于USB的这些特点使其获得了广泛的应用。1.2 USB总线结构USB的总线结构是采用阶梯式星形(tiered star)的拓扑(topology)结构,如图1和图2所示。每一个星形的中心是集线器,而每一个设备可以通过集线器上的接口来加以连接。从图中可以看到USB的设各包含了

5、两种类型:USB集线器与USB设各。位于最顶端的就是Host(主机端)。从Host的联机往下连接至Hub(集线器),再由集线器按阶梯式以一层或一阶的方式往下扩展出去,连接在下一层的设各或另一个集线器上。事实上,集线器也可视为一种设各。而其中最大层数为6层(包括计算机内部的根集线器)。每一个星形的外接点的数目可加以变化,一般集线器具有2、4或7个接口。图1 USB总线的阶梯式星形结构图2 USB总线的拓扑结构1.3 数据采集卡采集数据的过程和原理数据采集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单元中自动采非电量或者电量信号,送到上位机中进行分析,处理。数据采集系统是结合基于计算机或

6、者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。 数据采集卡,即实现数据采集(DAQ)功能的计算机扩展卡,可以通过USB、PXI、PCI、PCI Express、火线(IEEE1394)、PCMCIA、ISA、Compact Flash、485、232、以太网、各种无线网络等总线接入个人计算机。1.3.1 数据采集卡采集数据的过程:(1) 根据所处理的信号合理确定采样频率、抗混叠滤波器和采样样本数(2) 模入信号类型及连接方式的设立(3) 信号调理(包括放大、隔离、滤波、激励、线性化等)1.3.2 数据采集卡的工作原理(1)模入通道的选择及其衰减和AD放大器增益选择电路采

7、用程序控制。(2)中心控制电路采用可编程器件GAL,从而使数据采集卡的结构紧凑,电路简洁,且GAL芯片的软件编程可根据硬件的需要随时调整。(3)AD的启动有程序启动和定时启动两种方式,AD转换结束识别有程序查询和中断两种方式。(4)DA的参考电压通过控制电路引用AD的基准电压。二、DA卡的工作原理及外部接线2.1 DA卡的工作原理为了把一个数字量变成模拟量,必须把每一位上的代码按照权来转换为对应的模拟量,再把各模拟量相加,这样,得到的总的模拟量对应于给定的数据。在集成电路中,通常采用T型网络实现数字量往模拟电流的转换,再利用运算放大器来完成模拟电流到模拟电压的转换。所以,要把一个数字量变为模拟

8、电压,实际上需要两个环节:即先把数字量变为模拟电流,这是由D/A转换器完成的;再将模拟电流变为模拟电压,这是由运算放大器完成的。在D/A转换时涉及的参数包括分辨率、转换精转换速率、建立时间、线性误差等。DA转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等可分为电压输出型(如TLC5620)、电流输出型(如THS5661A)、乘算型(如AD7533)、一位DA转换器四类。2.2 DA卡外部接线DA卡的外部接线包括数字信号输入输出端、模拟信号输入输出端、模拟地、数字地、电源等。2.3 DA卡数据输出程序DA卡数据输出程序用Visual C+ 2008软件编写。重要步骤见如

9、下分析: (1)程序初始化之后产生正弦波数据,如下: for(int i=0;i256;i+) SinDatai=5000*sin(float)(2*3.1415/256*i); /产生正弦信号,用于输出 (2)选择输出电压范围和DA通道: OutputRange = SelectOutputRange(); /选择输出电压范围 printf(Please Input nDAChannel03:); scanf(%d, &nDAChannel); /选择DA通道(3)将SinData数组中的正弦波形数据转换为电压值: nDAData = (WORD)(SinDatak/(5000.00/409

10、6); (4)将转化后的电压值通过USB总线送给DA卡输出: bRetStatus = USB2833_WriteDeviceDA(hDevice, OutputRange, nDAData, nDAChannel); /通过USB写数据到DA卡完整程序见附录n。 三、音乐信号采集与处理在这个过程中,我们对高、低音乐信号分别进行采集,加噪、傅里叶变换、频谱分析、滤波并比较了无噪声、加噪声、去噪声后信号的差异,3.1音乐信号的获取 在Matlab中直接采用麦克和声卡采集高音歌曲和低音歌曲。高音歌曲低音歌曲又分别包含加入尖锐、平缓噪声的音乐和原始音乐,共采集6个音乐信号。 我们把录制的音乐时间控制

11、在5s左右。代码如下,Fs=100000;%采样率recObj = audiorecorder(Fs,16,2);%采样率为44000Hz,采样点的比特数为16%audiorecorder是针对声卡采集声音信号的一个函数disp(Start speaking.)recordblocking(recObj,8); %录音,录音时间为8sdisp(End of Recording.);play(recObj); % 回放录音数据myRecording= getaudiodata(recObj); % 获取录音数据plot(myRecording); % 绘制录音数据波形%xlabel(时间(s);

12、 % 设置x轴ylabel(信号(V); % 设置y轴title(声卡采集得到的数据); % 设置标题 3.2音乐信号的频谱分析 用audioread函数读取文件,采样频率为Fs0=44100.画出采样后音乐信号的时域波形和频谱图。现在我们先对高音进行处理、分析。代码如下,x0,Fs0=audioread(C:Documents and SettingsAdministrator桌面2015课程设计程序tygn.wav);%高音%读取高音,x0为读出的语音数据,Fs0为采样频率N=length(x0); %语音的长度y0=x0/max(abs(x0); %归一化,让最大值为1t0=0:N-1;

13、%时间坐标figure(1),subplot(311);plot(t0/Fs0,y0(1:N),k);axis(0 7 -1 1);xlabel(原始高音 (时间/s);ylabel(幅度);z0=fft(y0);%z=fftshift(z); %快速傅里叶变换H0=z0.*conj(z0)/N; %能量f=0:N/2-1; %频率坐标figure,subplot(311);plot(f*Fs0/N,H0(1:N/2),k);%傅里叶变换的频谱图是对称的,这由实序列的对称性决定axis(0 2300 0 50);xlabel(原始高音 (频率/Hz);ylabel(幅度);图13.3分别加入尖

14、锐噪声和平缓噪声 考虑到采集环境和麦克精确度等不确定因素对采集数据可靠性的影响,为便于更好的对问题分析,我们采用了软件加噪的方法。代码如下,%加尖锐噪音for i=1:N y1(i)=y0(i)+(sin(2*pi*1800*i/Fs0)+cos(2*pi*2000*i/Fs0)/20;end%加平缓噪音for i=1:N y2(i)=y0(i)+(sin(2*pi*100*i/Fs0)+cos(2*pi*150*i/Fs0)+sin(2*pi*200*i/Fs0)/10;End 加完噪声后再画出各自的频谱图如下, 图23.4设计滤波器,滤波处理根据上面的频谱图,选择合适的滤波器并确定相应的性

15、能指标。对加入尖锐噪声的音乐信号,我们选择了两种低通滤波器,巴特沃斯低通滤波器和契比雪夫滤波器。用上述滤波器分别对加入尖锐噪声的音乐信号进行滤波,画出滤波之后的频谱图并与滤波之前的进行对比分析。对加入平缓噪声的音乐信号,我们选择了契比雪夫高通滤波器,同样经滤波之后做出频谱图与滤波之前的对比。代码如下,1. %巴特沃斯IIR低通滤波器Fs0=44100;Ap=3;As=30;%通带最大衰减,阻带最小衰减fp=1400;fs=1850;%通带截止频率,阻带截止频率Wp=2*fp*pi/Fs0;Ws=2*fs*pi/Fs0;n,Wn=buttord(Wp/pi,Ws/pi,Ap,As);%确定最小阶

16、数n和反归一化截止频率Wnb,a=butter(n,Wn);%b,a分别为模拟滤波器的分子、分母按降幂排列的多项式系数。b是滤波器的阶数%查看设计滤波器的曲线h,w=freqz(b,a,512,Fs0);%将滤波器在0-Fs0/2频率范围内选取512个频率点记录在f中,相应的频率响应记录在w中h=20*log10(abs(h); %转换成dBfigure(3),plot(w,h);title(所设计巴特沃斯IIR低通滤波器的通带曲线);grid on;axis(0 2300 -90 10);y1d=filter(b,a,y1); %滤波函数sound(y1d,Fs0);%加尖锐噪音的高音滤波之

17、后z1d=fft(y1d); %z=fftshift(z);H1d=z1d.*conj(z1d)/N;%conj()是求共轭,计算能量 f=0:N/2-1;figure(9);subplot(312);plot(f*Fs0/N,H1d(1:N/2),k);axis(0 2300 0 50);xlabel(加尖锐噪音高音 (频率/Hz);ylabel(幅度); 图3 图42. %契比雪夫低通Fs0=44100;Ap=0.1;As=30;fp=1400;fs=1800;Wp=2*pi*fp/Fs0;Ws=2*pi*fs/Fs0;% 设计切比雪夫滤波器;n,wn=cheb1ord(Wp/pi,Ws/

18、pi,Ap,As);b,a=cheby1(n,Ap,Wp/pi);%查看设计滤波器的曲线h,w=freqz(b,a,256,Fs0);h=20*log10(abs(h);figure(3),plot(w,h);axis(0 2300 -90 10);title(所设计契比雪夫低通滤波器的通带曲线);grid on;y1d=filter(b,a,y1);sound(y1d,Fs0);%加尖锐噪音z1d=fft(y1d);%z=fftshift(z);H1d=z1d.*conj(z1d)/N; 3. %契比雪夫高通Fs0=44100;Ap=1;As=40;fp=400;fs=120;Wp=2*fp

19、*pi/Fs0;Ws=2*fs*pi/Fs0; % 设计切比雪夫滤波器;n,wn=cheb1ord(Wp/pi,Ws/pi,Ap,As);fprintf(滤波器的阶数N=%.0fn,n);b,a=cheby1(n,Ap,Wp/pi,high);%查看设计滤波器的曲线h,w=freqz(b,a,512,Fs0);h=20*log10(abs(h);figure(4),plot(w,h);title(所设计契比雪夫高通滤波器的通带曲线);grid on;axis(0 2300 -90 10);y2g=filter(b,a,y2);z2g=fft(y2g);%z=fftshift(z);H2g=z2

20、g.*conj(z2g)/N;f=0:N/2-1;figure(5);subplot(311);plot(f*Fs0/N,H0(1:N/2),k);axis(0 2300 0 50);xlabel(原始高音 (频率/Hz);ylabel(幅度);subplot(312);plot(f*Fs0/N,H1d(1:N/2),k);axis(0 2300 0 50);xlabel(加尖锐噪音高音经低通滤波 (频率/Hz);ylabel(幅度);subplot(313);plot(f*Fs0/N,H2g(1:N/2),k);axis(0 2300 0 50);xlabel(加平缓噪音高音经高通滤波 (频

21、率/Hz);ylabel(幅度);图5图6图7比较图3与图5,可以发现契比雪夫滤波器比巴特沃斯的优势是它的滚降更加陡峭,在截止频率处更接近于理想的,但在通带(阻带)内频率响应有等幅波动,而巴特沃斯滚降不够陡峭,但在通带内是平坦的。3.5在Matlab中,用函数sound()对音乐进行回放,与滤波之前的原始音乐,加入尖锐噪声、平缓噪声的音乐比较。3.6低音音乐信号的处理分析与高音的类似,在此不再赘述,在附录直接给出代码与图像。附录1%低音处理close allclear allclcx0,Fs0=audioread(C:Documents and SettingsAdministrator桌面2

22、015课程设计程序nan.wav);%原始低音%读取低音,x0为读出的语音数据,Fs0为采样频率N=length(x0); %语音的长度y0=x0/max(abs(x0); %归一化,让最大值为1 for i=1:N y1(i)=y0(i)+(sin(2*pi*1800*i/Fs0)+cos(2*pi*2000*i/Fs0)/40;%加尖锐噪音end for i=1:N y2(i)=y0(i)+(sin(2*pi*50*i/Fs0)+cos(2*pi*100*i/Fs0)/40;%加平缓噪音end t0=0:N-1;%时间坐标figure(1),subplot(311);plot(t0/Fs0

23、,y0(1:N),k);axis(0 7 -2 2);xlabel(原始低音 (时间/s);ylabel(幅度);subplot(312);plot(t0/Fs0,y1(1:N),k);%axis(0 7 -1 1);xlabel(加尖锐噪音低音 (时间/s);ylabel(幅度);subplot(313);plot(t0/Fs0,y2(1:N),k);%axis(0 7 -1 1);xlabel(加平缓噪音低音 (时间/s);ylabel(幅度);z0=fft(y0);%z=fftshift(z);H0=z0.*conj(z0)/N;z1=fft(y1);%z1=fftshift(z1);H

24、1=z1.*conj(z1)/N; z2=fft(y2);%z=fftshift(z);H2=z2.*conj(z2)/N;f=0:N/2-1; %频率坐标figure(2),subplot(311);plot(f*Fs0/N,H0(1:N/2),k);%傅里叶变换的频谱图是对称的,这由实序列的对称性决定axis(0 2300 0 20);xlabel(原始低音 (频率/Hz);ylabel(幅度);subplot(312);plot(f*Fs0/N,H1(1:N/2),k);axis(0 2300 0 20);xlabel(加尖锐噪音低音 (频率/Hz);ylabel(幅度);subplot

25、(313);plot(f*Fs0/N,H2(1:N/2),k);axis(0 2300 0 20);xlabel(加平缓噪音低音 (频率/Hz);ylabel(幅度);%sound(y0,Fs0);%原始低音%sound(y1,Fs0);%加尖锐低音%sound(y2,Fs0);%加平缓低音%1. %巴特沃斯IIR滤波器Fs0=44100;Ap=3;As=30;fp=1400;fs=1850;Wp=2*fp*pi/Fs0;Ws=2*fs*pi/Fs0;n,Wn=buttord(Wp/pi,Ws/pi,Ap,As);%确定最小阶数n和反归一化截止频率Wnfprintf(滤波器的阶数N=%.0fn

26、,n);b,a=butter(n,Wn);%b,a分别为模拟滤波器的分子、分母按降幂排列的多项式系数。b是滤波器的阶数disp(分子系数b:);fprintf(%.4en,b);disp(分母系数a:);fprintf(%.4en,a);%查看设计滤波器的曲线h,w=freqz(b,a,512,Fs0);%将滤波器在0-Fs0/2频率范围内选取512个频率点记录在f中,相应的频率响应记录在w中h=20*log10(abs(h); %转换成dBfigure(3),plot(w,h);title(所设计巴特沃斯IIR低通滤波器的通带曲线);grid on;axis(0 2300 -90 10);y

27、1b=filter(b,a,y1); %滤波函数sound(y1b,Fs0);%加尖锐噪音的高音滤波之后z1b=fft(y1b); %z=fftshift(z);H1b=z1b.*conj(z1b)/N;%conj()是求共轭,计算能量 2. %契比雪夫低通Fs0=44100; %采样频率Ap=0.1;As=30;fp=1400;fs=1800;Wp=2*pi*fp/Fs0;Ws=2*pi*fs/Fs0;% 设计切比雪夫滤波器;n,wn=cheb1ord(Wp/pi,Ws/pi,Ap,As);b,a=cheby1(n,Ap,Wp/pi);disp(分子系数b:);fprintf(%.4en,b

28、);disp(分母系数a:);fprintf(%.4en,a);%查看设计滤波器的曲线h,w=freqz(b,a,256,Fs0); %将滤波器在0-Fs0/2频率范围内选取512个频率点记录在f中,相应的频率响应记录在w中h=20*log10(abs(h); %转换成dBfigure(3),plot(w,h);axis(0 2300 -90 10);xlabel(频率f/Hz);ylabel(幅度/dB);title(所设计契比雪夫低通滤波器的通带曲线);grid on;y1d=filter(b,a,y1); %滤波函数 sound(y1d,Fs0); %加尖锐噪音的低音经滤波之后 z1d=

29、fft(y1d) %z=fftshift(z);H1d=z1d.*conj(z1d)/N; %conj()是求共轭,计算能量%3. %契比雪夫高通Fs0=44100;Ap=1;As=40;fp=200;fs=10;Wp=2*fp*pi/Fs0;Ws=2*fs*pi/Fs0;% 设计切比雪夫滤波器;n,wn=cheb1ord(Wp/pi,Ws/pi,Ap,As);fprintf(滤波器的阶数N=%.0fn,n);b,a=cheby1(n,Ap,Wp/pi,high);disp(分子系数b:);fprintf(%.4en,b);disp(分母系数a:);fprintf(%.4en,a);%查看设计

30、滤波器的曲线h,w=freqz(b,a,512,Fs0);h=20*log10(abs(h);figure(4),plot(w,h);axis(0 2300 -90 10);xlabel(频率f/Hz);ylabel(幅度/dB);title(所设计契比雪夫高通滤波器的通带曲线);grid on;y2g=filter(b,a,y2); %滤波函数 z2g=fft(y2g);%z=fftshift(z);H2g=z2g.*conj(z2g)/N;f=0:N/2-1;figure(5);subplot(311);plot(f*Fs0/N,H1b(1:N/2),k);axis(0 2300 0 50

31、);xlabel(加尖锐噪音高音经巴特沃斯IIR低通滤波器滤波之后 (频率/Hz);ylabel(幅度);subplot(312);plot(f*Fs0/N,H1d(1:N/2),k);axis(0 2300 0 20);xlabel(加尖锐噪音低音经契比雪夫低通滤波器滤波 (频率/Hz);ylabel(幅度);subplot(313);plot(f*Fs0/N,H2g(1:N/2),k);axis(0 2300 0 20);xlabel(加平缓噪音低音经雪夫高通滤波器滤波 (频率/Hz);ylabel(幅度); % 图1图2图3 图4图5附录2#include stdafx.h#includ

32、e windows.h#include stdio.h#include conio.h#include USB2833.h#include math.hint SelectOutputRange(void);int k=0;int main(int argc, char* argv)HANDLE hDevice;int DeviceLgcID;char strErrorMsg256; float SinData256; /用来存放正弦信号数据DWORD dwErrorCode;int OutputRange=0;int nDAChannel=0;BOOL bRetStatus; / 函数的返回

33、值char Key;SHORT nDAData;float Voltage=0;DeviceLgcID = 0;hDevice = USB2833_CreateDevice(DeviceLgcID); / 创建设备对象for(int i=0;i=4096)nDAData = 4095;printf(nDAData = %dn, nDAData);bRetStatus = USB2833_WriteDeviceDA(hDevice, OutputRange, nDAData, nDAChannel); /通过USB写数据到DA卡if(!bRetStatus) printf(USB2833_Wri

34、teDeviceDA failn);/如果写操作失败,则报错_getch();goto ExitRead0; k+; if(k=256)k=0; /开始下一个周期的正弦波 goto Repeat;ExitRead0:USB2833_ReleaseDevice(hDevice); / 释放设备对象return 0;/ 获取用户选择的输入量程int SelectOutputRange(void)LONG OutputRange;Repeat:printf(n);printf(0. 0V +5Vn);printf(1. 0V +10Vn);printf(2. 0V +10.8Vn);printf(3

35、. -5V +5Vn);printf(4. -10V +10Vn);printf(5. -10.8V +10.8Vn);printf(Please Select Input Range0-5:);scanf(%d, &OutputRange);if (OutputRange5) goto Repeat; / 判断用户选择的量程是否合法,不合法,则重新选择return OutputRange;参考文献 1 Stormy Attaway.MATLAB编程与工程应用.北京:电子工业出版社,2013 2 桂志国,陈友兴,张权,楼国红,郝慧艳.数字信号处理.北京:科学出版社,20103 杨顺辽,李永全.

36、数字信号处理实现与实践.武汉:华中科技大学出版社,20114 王彬.MATLAB数字信号处理.北京:机械工业出版社,2010心得体会:通过这次课程设计,我们更深的理解了DA的工作原理和音乐信号处理的具体过程。DA数据输出程序的修改与调试,充分锻炼了我们的编程能力,也让我们更深层次的领略了编程之美。对有噪声音乐信号的去噪过程,让我们更熟练的掌握了高通与低通滤波器的设计,在用MATLAB设计滤波程序时,我们对整个滤波过程逐渐清晰,同时再次感受了MATLAB这个数学工具的强大。此次课程设计是对我们所学课本知识的一次升华,虽然过程很艰辛,但我们痛并快乐着,因为解决问题之后是难以抑制的喜悦。困难总会有的,但办法也总会有的,我们总会在困难面前变得强大。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1