基于matlab的音乐信号处理和分析
1音乐信号的音谱和频谱的观察
使用windows下的录音机录制一段音乐信号或者采用其他软件截取一段音乐信号(要求:时间不超过5s,文件格式为WAV)
使用wavread语句读取音乐信号获取抽样率;(注意:读取的信号是双声道信号,即为双列向量,需要分列处理);
输出音乐信号的波形和频谱,观察现象;
使用sound语句播放音乐信号,注意不同抽样率下的音调变化,解释现象
程序:
clear all;close all;clc
[y,fs,bit]=wavread('E:\music\11'); %读取音乐信号
size(y) %看音乐信号是双列还是单列
y1=y(:,1); %取单列
fs=fs %获取音乐信号的抽样率
N=length(y1); %音乐信号的长度
Fy1=fft(y1,N); %对信号做快速傅里叶变换
w=2/N*[0:N-1];
figure %画音乐信号的波形和频谱
subplot(2,1,1);plot(y1);
grid on
title('音乐信号的波形')
xlabel('time/s')
ylabel('Magnitude')
subplot(2,1,2);plot(w,abs(Fy1));
grid on
title('音乐信号的频谱')
xlabel('Frequency/pi')
ylabel('Magnitude')
sound(y1,fs) %以抽样率fs播放音乐信号
sound(y1,2*fs) %以抽样率2fs播放音乐信号
sound(y1,1/2*fs) %以抽样率1/2fs播放音乐信号
程序运行结果如下:
音乐信号的抽样率fs=44100
音乐信号的波形和频谱如下图:
抽样率较高时,听到的音乐音调较高,速度较快;抽样率较低时,听到的音乐音调低,速度慢。由此可知,音乐信号的音调和抽样率有关。
2音乐信号的抽取(减抽样)
观察音乐信号频率的上限,选择适当的抽取间隔对信号进行减抽样(给出两种抽取间隔,代表混叠与非混叠);
输出减抽样音乐信号的波形和频谱,观察现象,给出理论解释;
播放减抽样音乐信号,注意抽样率的改变,比较不同抽取间隔下的声音,解释现象。
音乐信号的频率上限为0.2pi,这里分别采用3和60作为非混叠与混叠的抽样间隔进行抽样,程序如下:
clear all;close all;clc
[y,fs,bit]=wavread('E:\music\22');%读取音乐信号
y1=y(:,1); %取单列
x1=y1(1:180000); %截取音乐信号
d=3;j=0;
for i=1:d:length(x1)
j=j+1;
x2(j)=x1(i);
end %对音乐信号以3为间隔做减抽样
N1=length(x1); %截断的音乐信号的长度
N2=length(x2); %以3为间隔减抽样后音乐信号的长度
Fx1=fft(x1,N1); %对截断信号做快速傅里叶变换
Fx2=fft(x2,N2); %对减抽样后的信号做快速傅里叶变换
w1=2/N1*[0:N1-1];
w2=2/N2*[0:N2-1];
figure %画出截断后的信号的波形和频谱
subplot(2,1,1);plot(x1);
grid on
title('截断后的波形')
xlabel('time/s')
ylabel('Magnitude')
subplot(2,1,2);plot(w1,abs(Fx1));
grid on
title('截断信号的频谱')
xlabel('Frequency/pi')
ylabel('Magnitude')
figure %画出以3为间隔减抽样后的信号的波形和频谱
subplot(2,1,1);plot(x2);
grid on
title('对截断信号以3为间隔减抽样后的波形')
xlabel('time/s')
ylabel('Magnitude')
subplot(2,1,2);plot(w2,abs(Fx2));
grid on
title('对截断信号以3为间