基于Matlab的歌曲音频信号采样及其处理(上)

 (如需交流,请关注公众号:神马观止)      
今天看了一本关于数字信号分析和处理的书,想通过一个实例来实践一下。于是我选取了石进的《夜的钢琴曲·三十》,不过我硬盘里保存的是MP3格式,需要先转换为WAV,然后才能进行采样。可以下载一个MP3转换器,我使用的是这样一款转换软件:
将歌曲文件拖入对话框,然后进行转换,即可得到适宜Matlab操作的WAV格式。
       下面编写程序进行读取和采样,采样频率选为44100Hz,并且只截取前1000000个采样点数据进行分析:
%读取WAV文件
[xt,fs,B] = wavread('myNight.wav');
data = xt(1:1000000);  %截取

%将截取的音频保存为WAV
wavwrite(data,fs,'myData.wav');
%将数据保存到TXT
fid = fopen('myData.txt','w');
fprintf(fid,'%d\r\n',data);
fclose(fid);

dataFFT = fft(data);
magX = abs(dataFFT);
figure(1);
plot(data);
figure(2);
plot(magX);
        进而可以得到《夜的钢琴曲·三十》最初的一段音频和数据文件,画出时域波形和频谱,即可观察相关时频域特征。


        还可以通过叠加白噪声,然后设计低通滤波器进行处理滤除高频噪声。下面是叠加噪声并进行处理的程序:
Ts = 1/fs;%采样周期
M = length(data);%音频信号长度

m = 0:M-1;
sigma = mean(data.*data);%噪声方差
v = sqrt(sigma)*randn([M,1]);%噪声生成
x = data+v;%受宽带噪声干扰的音频信号
wavwrite(x,fs,'noise.wav');

f=[0:M/2]*fs/M;
X = fft(x);
magX1 = abs(X);%受噪声污染音频信号的频谱
figure;
plot(x);
figure;
plot(magX1);
      叠加噪声之后的时域波形和频谱如图所示:

其实这里所叙述的只是非常简单的内容,不过对于在处理录音的音频文件时,滤除部分噪声还是能够起到一定的作用的。下面我将低通滤波器的设计代码段附上:
% 窗函数方法计算滤波器系数
wc=2*pi*2000/fs;%截止频率
Nwin = 147;%滤波器长度
hwin = fir1(Nwin-1,wc/pi);%计算低通滤波器系数;
[Hwin f1]=freqz(hwin,1,44100,fs);%计算低通滤波器频率响应
magHwin = abs(Hwin);%幅频响应
phaHwin = angle(Hwin);%相频响应
phaHwin = 180*unwrap(phaHwin)/pi;
nwin = 0:Nwin-1;

figure;%绘图,低通滤波器特性
stem(nwin,hwin);grid;
xlabel('n');ylabel('Impulse response of LPF');
figure;
semilogx(f1,20*log10(magHwin));grid on;
xlabel('Frequency (Hz)');ylabel('Magnitude response (dB)');
figure;
plot(f1,phaHwin);grid on;
xlabel('Frequency (Hz)');ylabel('Phase response (degree)');
下面是基于窗函数方法设计的FIR低通滤波器,其单位冲击响应、幅频特性和相频特性如下图所示:

       本人也是初学者,主要想扎实数字信号分析与处理,以后能够进一步学习语音识别、基于EMG的HCI研究以及雷达相关的信号处理。同时为以后学习图像处理打下基础。

你可能感兴趣的:(数字信号处理,信号分析与处理,matlab)