赞
踩
以下命令基于 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));
滤波前:
滤波后:
可以看到 1000Hz 以上的信号被过滤掉了。
调用 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);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。