以下命令基于 Octave,理论上可用于 MATLAB,但实际是否能正常工作未验证。Octave 是 MATLAB 的开源替代。
使用 audioread 函数读取音频文件,Alarm01.wav 是 Windows 10 系统目录 C:\Windows\Media 下的一个音频文件。
[a, fs] = audioread('Alarm01.wav');
所读取到文件包含左声道数据和右声道数据,提取右声道数据:
r = a(:,2);
绘制波形:
t=[0:length(r)-1]*(1.0/fs);
subplot(2,2,1);
plot(t,r);
对右声道音频做傅里叶变换:
x = fft(r);
绘制谱:
f=[0:length(x)-1]*(fs/length(x));
subplot(2,2,2);
plot(f(1:length(x)/2),abs(x)(1:length(x)/2));
假设要将1000Hz以上的音频过滤掉,使用 fir1 函数生成滤波系数:
b = fir1(30, 1000/fs/2);
figure 2;
freqz(b);
figure 3;
stem(b);
调用 filter 函数执行滤波:
r1 = filter(b, 1, r);
figure 1;
subplot(2,2,3);
plot(t,r);
再次做傅里叶变换:
x1=fft(r1);
subplot(2,2,4);
plot(f(1:length(x1)/2),abs(x1)(1:length(x1)/2));
调用 play 播放音频,用耳朵感觉一下滤波前后的声音:
p = audioplayer(r, fs);
play(p);
p1=audioplayer(r1,fs);
play(p1);
% 加载音频
% 使用 audioread 函数读取音频文件,Alarm01.wav 是 Windows 10 系统目录 C:\Windows\Media 下的一个音频文件。
[a, fs] = audioread('Alarm01.wav');
% 所读取到文件包含左声道数据和右声道数据,提取右声道数据:
r = a(:,2);
% 绘制波形:
t=[0:length(r)-1]*(1.0/fs);
subplot(2,2,1);
plot(t,r);
% 分析音频谱
% 对右声道音频做傅里叶变换:
x = fft(r);
% 绘制谱:
f=[0:length(x)-1]*(fs/length(x));
subplot(2,2,2);
plot(f(1:length(x)/2),abs(x)(1:length(x)/2));
% 获得滤波系数
% 假设要将1000Hz以上的音频过滤掉,使用 fir1 函数获取滤波系数:
b = fir1(30, 1000/fs/2);
figure 2;
freqz(b);
figure 3;
stem(b);
% 滤波
% 调用 filter 函数执行滤波:
r1 = filter(b, 1, r);
figure 1;
subplot(2,2,3);
plot(t,r);
% 分析滤波后的音频
% 再次做傅里叶变换:
x1=fft(r1);
subplot(2,2,4);
plot(f(1:length(x1)/2),abs(x1)(1:length(x1)/2));
% 播放音频
% 调用 play 播放音频,用耳朵感觉一下滤波前后的声音:
p = audioplayer(r, fs);
play(p);
p1=audioplayer(r1,fs);
play(p1);