AD信号采集与语音信号处理.docx
《AD信号采集与语音信号处理.docx》由会员分享,可在线阅读,更多相关《AD信号采集与语音信号处理.docx(28页珍藏版)》请在冰点文库上搜索。
AD信号采集与语音信号处理
摘要··········································
1基于USB总线的A/D卡的报告·············
1.1USB总线简介··································
1.2USB总线结构·················
1.3USB总线信号环境····························
1.4USB数据传输类型····························
1.5信息包······································
1.6USB接口的数据采集系统的设计实现···············
1.7A/D转换电路·································
2DA卡的工作原理与外部接线···············
2.1DA卡的工作原理···································
2.2DA卡外部接线···································
2.3DA卡数据输出程序···································
3音乐信号的采集、处理与分析···············
3.1音乐信号的获取································
3.2音乐信号的频谱分析································
3.3分别参加锋利噪声和平缓噪声···············
3.4设计滤波器,滤波处理································
3.5音乐回放································
3.6低音音乐信号的处理分析································
摘要
信号处理是对各种形式的信息进行信息获取、变换、存储、传输、交换、应用等环节中的信号与信息的处理,是信息科学的重要组成局部,信息处理的应用日益广泛。
本文主要研究DA信号的生成和音乐器信号的处理。
对于DA信号的生成,我们利用USB数据采集器的A/D,D/A转换功能利用电脑对USB2833输入数字信号经D/A,A/D转换后输回电脑来实现。
对于音乐信号的处理,我们根据任务书的要求采集上下音歌曲并对其加噪声,利用matlab读取信号,并分析了加噪与不加噪信号频谱的区别,在此根底上设计了滤波器滤除噪声,对滤波后信号进行了分析并与无噪声的信号比照,两者无太大差异说明滤波效果良好。
关键词:
USB2833、matlab、频谱分析、滤波器
一、基于USB总线的A/D卡的报告
1.1USB〔通用串行总线〕简介
信息技术的飞速开展和数字化的广泛应用,数据采集也愈加重要,传统的外设与主机的通信口一般采用ISA、PCI、CPCI等标准,基于这些接口的产品,安装麻烦,价格昂贵,并受电脑插槽数量、地址中断资源限制,且可扩展性差,USB的出现很好的解决了以上问题。
USB是一种快速的双向的、同步传输的、廉价的并可以进行热拔插的串行接口。
USB接口使用方便,可以连接多个不同的设备,而过去的串口和并口只能接一个设备。
速度快是USB技术的突出特点之一,全速USB接口的最高传输率可达12Mb/s,比串口快了整整100倍,而执行USB2.0标准高速USB接口速率更是到达7480Mb/s,这使得高分辨率、真彩色的大容量图像的实时传送成为可能。
USB接口支持多个不同设备的串列连接,一个USB接口理论上可以连接127个USB设备。
连接方式也十分灵活,既可以使用串行连接,也可以使用集线器(Hub)把多个设备连接在一起,再同Pc机的USB接口相接。
普通的使用串口、并口的设备都需要单独的供电系统,而USB设备那么不需要。
正是由于USB的这些特点.使其获得了广泛的应用。
1.2USB总线结构
USB的总线结构是采用阶梯式星形〔tieredstar〕的拓扑〔topology〕结构,如图1和图2所示。
每一个星形的中心是集线器,而每一个设备可以通过集线器上的接口来加以连接。
从图中可以看到USB的设各包含了两种类型:
USB集线器与USB设各。
位于最顶端的就是Host〔主机端〕。
从Host的联机往下连接至Hub〔集线器〕,再由集线器按阶梯式以一层或一阶的方式往下扩展出去,连接在下一层的设各或另一个集线器上。
事实上,集线器也可视为一种设各。
而其中最大层数为6层〔包括电脑内部的根集线器〕。
每一个星形的外接点的数目可加以变化,一般集线器具有2、4或7个接口。
图1USB总线的阶梯式星形结构
图2USB总线的拓扑结构
1.3数据采集卡采集数据的过程和原理
数据采集(DAQ),是指从传感器和其它待测设备等模拟和数字被测单元中自动采非电量或者电量信号,送到上位机中进行分析,处理。
数据采集系统是结合基于电脑或者其他专用测试平台的测量软硬件产品来实现灵活的、用户自定义的测量系统。
数据采集卡,即实现数据采集(DAQ)功能的电脑扩展卡,可以通过USB、PXI、PCI、PCIExpress、火线(IEEE1394)、PCMCIA、ISA、CompactFlash、485、232、以太网、各种无线网络等总线接入个人电脑。
1.3.1数据采集卡采集数据的过程:
(1)根据所处理的信号合理确定采样频率、抗混叠滤波器和采样样本数
(2)模入信号类型及连接方式的设立
(3)信号调理〔包括放大、隔离、滤波、鼓励、线性化等〕
1.3.2数据采集卡的工作原理
〔1〕模入通道的选择及其衰减和AD放大器增益选择电路采用程序控制。
〔2〕中心控制电路采用可编程器件GAL,从而使数据采集卡的结构紧凑,电路简洁,且GAL芯片的软件编程可根据硬件的需要随时调整。
〔3〕AD的启动有程序启动和定时启动两种方式,AD转换结束识别有程序查询和中断两种方式。
〔4〕DA的参考电压通过控制电路引用AD的基准电压。
二、DA卡的工作原理及外部接线
2.1DA卡的工作原理
为了把一个数字量变成模拟量,必须把每一位上的代码按照权来转换为对应的模拟量,再把各模拟量相加,这样,得到的总的模拟量对应于给定的数据。
在集成电路中,通常采用T型网络实现数字量往模拟电流的转换,再利用运算放大器来完成模拟电流到模拟电压的转换。
所以,要把一个数字量变为模拟电压,实际上需要两个环节:
即先把数字量变为模拟电流,这是由D/A转换器完成的;再将模拟电流变为模拟电压,这是由运算放大器完成的。
在D/A转换时涉及的参数包括分辨率、转换精转换速率、建立时间、线性误差等。
DA转换器的内部电路构成无太大差异,一般按输出是电流还是电压、能否作乘法运算等可分为电压输出型(如TLC5620)、电流输出型(如THS5661A)、乘算型(如AD7533)、一位DA转换器四类。
2.2DA卡外部接线
DA卡的外部接线包括数字信号输入输出端、模拟信号输入输出端、模拟地、数字地、电源等。
2.3DA卡数据输出程序
DA卡数据输出程序用VisualC++2021软件编写。
重要步骤见如下分析:
〔1〕程序初始化之后产生正弦波数据,如下:
for(inti=0;i<256;i++)
{
SinData[i]=5000*sin((float)(2*3.1415/256*i));//产生正弦信号,用于输出
}
〔2〕选择输出电压范围和DA通道:
OutputRange=SelectOutputRange();//选择输出电压范围
printf("PleaseInputnDAChannel[0~3]:
");
scanf("%d",&nDAChannel);//选择DA通道
〔3〕将SinData[]数组中的正弦波形数据转换为电压值:
nDAData=(WORD)(SinData[k]/(5000.00/4096));
〔4〕将转化后的电压值通过USB总线送给DA卡输出:
bRetStatus=USB2833_WriteDeviceDA(hDevice,OutputRange,nDAData,nDAChannel);
//通过USB写数据到DA卡
完整程序见附录n。
三、音乐信号采集与处理
在这个过程中,我们对高、低音乐信号分别进行采集,加噪、傅里叶变换、频谱分析、滤波并比较了无噪声、加噪声、去噪声后信号的差异,
3.1音乐信号的获取
在Matlab中直接采用麦克和声卡采集高音歌曲和低音歌曲。
高音歌曲低音歌曲又分别包含参加锋利、平缓噪声的音乐和原始音乐,共采集6个音乐信号。
我们把录制的音乐时间控制在5s左右。
代码如下,
Fs=100000;%采样率
recObj=audiorecorder(Fs,16,2);%采样率为44000Hz,采样点的比特数为16
%audiorecorder是针对声卡采集声音信号的一个函数
disp('Startspeaking.')
recordblocking(recObj,8);%录音,录音时间为8s
disp('EndofRecording.');
play(recObj);%回放录音数据
myRecording=getaudiodata(recObj);%获取录音数据
plot(myRecording);%绘制录音数据波形
%xlabel('时间(s)');%设置x轴
ylabel('信号(V)');%设置y轴
title('声卡采集得到的数据');%设置标题
3.2音乐信号的频谱分析
用audioread函数读取文件,采样频率为Fs0=44100.画出采样后音乐信号的时域波形和频谱图。
现在我们先对高音进行处理、分析。
代码如下,
[x0,Fs0]=audioread('C:
\DocumentsandSettings\Administrator\桌面\2021课程设计\程序\tygn.wav');%高音
%读取高音,x0为读出的语音数据,Fs0为采样频率
N=length(x0);%语音的长度
y0=x0/max(abs(x0));%归一化,让最大值为1
t0=0:
N-1;%时间坐标
figure
(1),
subplot(311);plot(t0/Fs0,y0(1:
N),'k');
axis([07-11]);
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([02300050]);
xlabel('原始高音(频率/Hz)');ylabel('幅度');
图1
3.3分别参加锋利噪声和平缓噪声
考虑到采集环境和麦克精确度等不确定因素对采集数据可靠性的影响,为便于更好的对问题分析,我们采用了软件加噪的方法。
代码如下,
%加锋利噪音
fori=1:
N
y1(i)=y0(i)+(sin(2*pi*1800*i/Fs0)+cos(2*pi*2000*i/Fs0))/20;
end
%加平缓噪音
fori=1:
Ny2(i)=y0(i)+(sin(2*pi*100*i/Fs0)+cos(2*pi*150*i/Fs0)+sin(2*pi*200*i/Fs0))/10;
End
加完噪声后再画出各自的频谱图如下,
图2
3.4设计滤波器,滤波处理
根据上面的频谱图,选择适宜的滤波器并确定相应的性能指标。
对参加锋利噪声的音乐信号,我们选择了两种低通滤波器,巴特沃斯低通滤波器和契比雪夫滤波器。
用上述滤波器分别对参加锋利噪声的音乐信号进行滤波,画出滤波之后的频谱图并与滤波之前的进行比照分析。
对参加平缓噪声的音乐信号,我们选择了契比雪夫高通滤波器,同样经滤波之后做出频谱图与滤波之前的比照。
代码如下,
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和反归一化截止频率Wn
[b,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));%转换成dB
figure(3),
plot(w,h);title('所设计巴特沃斯IIR低通滤波器的通带曲线');gridon;
axis([02300-9010]);
y1d=filter(b,a,y1);%滤波函数
sound(y1d,Fs0);%加锋利噪音的高音滤波之后
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([02300050]);
xlabel('加锋利噪音高音(频率/Hz)');ylabel('幅度');
图3
图4
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);
%查看设计滤波器的曲线
[h,w]=freqz(b,a,256,Fs0);
h=20*log10(abs(h));
figure(3),
plot(w,h);
axis([02300-9010]);
title('所设计契比雪夫低通滤波器的通带曲线');gridon;
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*pi/Fs0;Ws=2*fs*pi/Fs0;
%设计切比雪夫滤波器;
[n,wn]=cheb1ord(Wp/pi,Ws/pi,Ap,As);
fprintf('滤波器的阶数N=%.0f\n',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('所设计契比雪夫高通滤波器的通带曲线');gridon;
axis([02300-9010]);
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,H0(1:
N/2),'k');
axis([02300050]);
xlabel('原始高音(频率/Hz)');ylabel('幅度');
subplot(312);
plot(f*Fs0/N,H1d(1:
N/2),'k');
axis([02300050]);
xlabel('加锋利噪音高音经低通滤波(频率/Hz)');ylabel('幅度');
subplot(313);
plot(f*Fs0/N,H2g(1:
N/2),'k');
axis([02300050]);
xlabel('加平缓噪音高音经高通滤波(频率/Hz)');ylabel('幅度');
图5
图6
图7
比较图3与图5,可以发现契比雪夫滤波器比巴特沃斯的优势是它的滚降更加陡峭,在截止频率处更接近于理想的,但在通带〔阻带〕内频率响应有等幅波动,而巴特沃斯滚降不够陡峭,但在通带内是平坦的。
3.5在Matlab中,用函数sound()对音乐进行回放,与滤波之前的原始音乐,参加锋利噪声、平缓噪声的音乐比较。
3.6低音音乐信号的处理分析与高音的类似,在此不再赘述,在附录直接给出代码与图像。
附录1
%低音处理
closeall
clearall
clc
[x0,Fs0]=audioread('C:
\DocumentsandSettings\Administrator\桌面\2021课程设计\程序\nan.wav');%原始低音
%读取低音,x0为读出的语音数据,Fs0为采样频率
N=length(x0);%语音的长度
y0=x0/max(abs(x0));%归一化,让最大值为1
fori=1:
N
y1(i)=y0(i)+(sin(2*pi*1800*i/Fs0)+cos(2*pi*2000*i/Fs0))/40;%加锋利噪音
end
fori=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,y0(1:
N),'k');
axis([07-22]);
xlabel('原始低音(时间/s)');ylabel('幅度');
subplot(312);plot(t0/Fs0,y1(1:
N),'k');
%axis([07-11]);
xlabel('加锋利噪音低音(时间/s)');ylabel('幅度');
subplot(313);plot(t0/Fs0,y2(1:
N),'k');
%axis([07-11]);
xlabel('加平缓噪音低音(时间/s)');ylabel('幅度');
z0=fft(y0);%z=fftshift(z);
H0=z0.*conj(z0)/N;
z1=fft(y1);%z1=fftshift(z1);
H1=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([02300020]);
xlabel('原始低音(频率/Hz)');ylabel('幅度');
subplot(312);plot(f*Fs0/N,H1(1:
N/2),'k');
axis([02300020]);
xlabel('加锋利噪音低音(频率/Hz)');ylabel('幅度');
subplot(313);plot(f*Fs0/N,H2(1:
N/2),'k');
axis([02300020]);
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和反归一化截止频率Wn
fprintf('滤波器的阶数N=%.0f\n',n);
[b,a]=butter(n,Wn);%b,a分别为模拟滤波器的分子、分母按降幂排列的多项式系数。
b是滤波器的阶数
disp('分子系数b:
');fprintf('%.4e\n',b);
disp('分母系数a:
');fprintf('%.4e\n',a);
%查看设计滤波器的曲线
[h,w]=freqz(b,a,512,Fs0);%将滤波器在0-Fs0/2频率范围内选取512个频率点记录在f中,相应的频率响应记录在w中
h=20*log10(abs(h));%转换成dB
figure(3),
plot(w,h);title('所设计巴特沃斯IIR低通滤波器的通带曲线');gridon;
axis([02300-9010]);
y1b=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('%.4e\n',b);
disp('分母系数a:
');fprintf('%.4e\n',a);
%查看设计滤波器的曲线
[h,w]=freqz(b,a,256,Fs0);%将滤波器在0-Fs0/2频率范围内选取512个频率点记录在f中,相应的频率响应记录在w中
h=20*log10(abs(h));%转换成dB
figure(3),
plot(w,h);
axis([02300-9010]);
xlabel('频率f/Hz');ylabel('幅度/dB');
title('所设计契比雪夫低通滤波器的通带曲线');gridon;
y1d=filter(b,a,y1);%滤波函数
sound(y1d,Fs0);%加锋利噪音的低音经滤波之后
z1d=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