matlab 音频输入画出以频率为横坐标振幅为纵坐标的图像,然后通过低通滤波器,画出滤波后的以频率为横坐标振幅为纵坐标的图像
时间: 2024-03-23 10:39:37 浏览: 66
好的,下面是相应的 Matlab 代码实现:
```matlab
% 读入音频文件,获取采样率 Fs 和音频数据 y
[y, Fs] = audioread('audio.wav');
% 计算音频信号的长度和时间向量
len = length(y);
t = (0:len-1) / Fs;
% 计算音频信号的频谱
Y = fft(y);
f = Fs*(0:(len/2))/len;
P = abs(Y/len);
P1 = P(1:len/2+1);
% 画出音频信号的频率振幅图像
figure;
plot(f,P1);
title('原始音频的频率振幅图像');
xlabel('频率 (Hz)');
ylabel('振幅');
% 设计低通滤波器
Fc = 2000; % 截止频率
Wn = Fc/(Fs/2);
[b, a] = butter(6, Wn, 'low');
% 应用低通滤波器并得到滤波后的音频信号
y_filtered = filter(b, a, y);
% 计算滤波后音频信号的频谱
Y_filtered = fft(y_filtered);
P_filtered = abs(Y_filtered/len);
P1_filtered = P_filtered(1:len/2+1);
% 画出滤波后音频信号的频率振幅图像
figure;
plot(f,P1_filtered);
title('滤波后音频的频率振幅图像');
xlabel('频率 (Hz)');
ylabel('振幅');
```
这段代码首先读入音频文件,然后使用 `fft` 函数计算其频谱,并使用 `plot` 函数画出原始音频的频率振幅图像。接着,定义了一个低通滤波器,并使用 `filter` 函数将其应用到输入音频上,得到滤波后的音频信号。最后,再次使用 `fft` 函数计算滤波后音频的频谱,并使用 `plot` 函数画出滤波后音频的频率振幅图像。
阅读全文