数字信号处理在wav信号分析方面的应用
2015-01-28张土前
张土前
数字信号处理在wav信号分析方面的应用
张土前
随着计算机技术的不断发展应用,声音信号逐渐实现了数字化,采用傅里叶变化,信号可以转化为振幅函数和频率函数,本文先简单分析傅里叶变换原理,进而分析数字信号处理在wav信号分析中的应用,希望能为信号分析处理提供参考。
MATLAB是一种商业数学软件,常使用在算法开发、数字化可视化中,具有高效的数值计算及符号计算能力,具有完备的图形处理功能,应用工具箱功能丰富,是实现wav信号数字化处理的有效软件,本文主要分析基于MATLAB的wav信号分析。
音频信号基础
声音是由分子的振动生成,自然界的声音会随着各种因素的变化而出现变化,声波的强弱程度采用振幅来表示,音调采用频率表示,高频信号代表声音非常尖锐,低频信号则意味着声音低沉。在日常生活中,人们听到的声音并不是一种单频率的声音,很多都是不同的频率和振幅组合而成。频率低于20Hz的信号为亚音,人们能够听到的声音频率在20Hz~20kHz。
傅里叶变换原理分析
Wav信号在采用数字信号处理中必须经过傅里叶变化,应用傅里叶变换目前有两个问题需要解决,数学中傅里叶变化的信号为连续信号,但是计算机职能处理数字信号,另外在数学处理中常采用无穷大概念,在实际的计算中,无穷大计算难以在计算机中实现。假设在Δt间隔时间内,连续均匀采样,变换为F(k)=Σf(n)e-j2πkm/N/N,f(n)=Σf(k)e-j2πkm/N/N,这个公式表示在计算机处理中,信号被看做周期信号来处理,信号周期相同,因此对音频文件采用中,经过傅里叶变换后,采样点不变。声音文件持续时间t=NΔt,采样频率f=1/Δt,在傅里叶变换中,k分别对应抽样值,Δf=1/(N Δt),其中Δf代表频率。
数字信号处理在wav信号分析中的应用
利用MATLAB熟悉处理软件,MATLAB集成了fft等函数,应用方面,数学运算能力强大。主要包括声音的采集、持续音的频谱分析和时变音短视频普分析,MATLAB提供了快速傅里叶变换的含糊,在windows系统中读入文件,采用fft求幅度值,观察正弦分量,求取频谱的反傅里叶反变换,分析波形变化,构造正弦信号。在应用MATLAB之前,需要明白声音信号属于一维信号,输入输出函数需要可以控制频率,fft()代表以微信号的变换,ifft()代表一维信号逆向傅里叶变换。
信号采取对应MATLAB代码(部分):[y,fs]=wavread(‘ding.wav’);yr= yr (1:1024);figure(‘numbertitle’,’off’,1024µãFFT');plot(linspace(-pi,pi,1024);yr1024=real(ifft(YR1024))。Wav文件的一次性傅里叶变换中选择一个wav文件作为分析的对象,选择每个windows系统为对象,在分析声波主要频率中先执行(部分)sound(w,fs,bits);size(y);plot(w(:,1)); Figure= fft(y, 32768);grid;[m.k]=max(abs(y)) ,将信号size(y)语句转变,此时需要处理大量的数据,求出频谱的最大值和对应的位置,得到两个峰值代表的频率,然后执行语句(部分):[m2,k2]=max(abs(Y(4000:5000)));f2=(4000+k2)*fs/N ,得到频率,完成声波主要频率的分析。
在得到声波的频谱后,需要得到相应的时域值,在这里采用傅里叶反变换,重构正弦信号主要是找到幅度最大的正弦分量,用作后期与原始信号相比较之用,对应MATLAB代码(部分):[y,fs]=wavread(‘ding.wav’);yr=yr(1:1024);yr1024= real (ifft(YR1024));MAXSIN=zeros(1,1024);MAXSIN(1026-peaki)=maxpeak;subplot(2,1,1)plot(maxsin);wavplay(yr1024);wavplay(maxsin)。分析时变音短时频谱,利用“load chirp”载入matlab自带时变音,从信号中截取一个点,对应MATLAB代码(部分):loadchirp %y,Fslen= length(y);seg=y((i-1)*1024+1:i*1024);plot(linspace(-pi,pi,1024),fftshift(abs(fft(seg))))。
在对wav信号分析中采取一次性傅里叶变化存在点数过大的问题,由于语音是分音节的,因此需要采取分段分析,执行[w,fs,bits]=wavread(‘c:windows mediading.wav’)得到文件的时域波形,执行(部分):u=w(:,1);length(u)/1024 z(i,:)=(fft(u(1024*(i-1)+ 1:1024*i),1024))’;figure;mesh(abs(z(:,1:200))’),实现分段分析。
在MATLAB中采用wavread函数读入ding.wav,采用wavrecord录制声音,采用wavplay播放声音,实现声音的采集。读入声音文件后将声音信号进行fft变化,将图形畸形对称转换,显示频谱,比较频谱图,发现fft变换图形形状类似,与原始信号图形基本保持一致,仅仅是在幅度上存在差别,验证结果正确,表示变换后的精度明显提高。
在利用频谱中最大幅度对应的频率重构正弦信号中,[maxpeak,peaki]函数用来确定最大幅度值和响应的位置,MAXSIN函数则是求取另外一个最大幅度值的函数,在取样点有限情况下产生镜像,取镜像中通过代码MAXSIN(1026-peaki)实现。通过载入时变音得到幅度谱,经过fft进行对称转换,每幅图都能够得到镜像。
结束语
综上所述,本文主要分析数字信号处理在wav信号分析中的应用,MATLAB中有限点的fft变换会产生镜像,想要构造信号频谱的镜像,还需要考虑到直流分量问题,随着计算机技术的不断应用,数字信号处理技术将会得到更广泛的使用。
10.3969/j.issn.1001-8972.2015.09.016