设计一个滤波器,滤波嘈杂环境音,保留人声,保留相应的频谱图,能整的可以联系我

关注引自免费微信小程序:皆我百晓生
为了帮助您完成这个任务,我们首先需要编写一些MATLAB代码来实现音频的读取、显示波形图、计算频谱以及设计和应用FIR滤波器。下面是一个详细的步骤指南。
第一步:读取音频
首先,我们需要从.wav文件中读取音频数据。使用audioread函数可以实现这一目标。这里提供一个简单的例子:
% 读取音频文件
[signal, fs] = audioread('quiet_room_recording.wav'); % 将'quiet_room_recording.wav'替换为您实际的文件名
% 显示音频数据长度和采样率
disp(['Signal length: ', num2str(length(signal)), ' samples']);
disp(['Sampling frequency: ', num2str(fs), ' Hz']);
第二步:绘制波形图
接下来,我们可以使用plot函数绘制音频信号的波形图。
% 绘制波形图
t = (0:length(signal)-1)/fs; % 计算时间轴
figure;
plot(t, signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Quiet Room Recording Waveform');
grid on;
第三步:计算频谱
使用periodogram函数计算信号的频谱。
% 计算频谱
[Pxx, f] = periodogram(signal, hamming(length(signal)), [], fs); % 使用汉明窗进行窗函数处理
% 绘制频谱图
figure;
plot(f, 10*log10(Pxx));
xlabel('Frequency (Hz)');
ylabel('Power/Frequency (dB/Hz)');
title('Quiet Room Recording Spectrum');
grid on;
第四步:设计FIR滤波器
设计一个低通滤波器,用于过滤高频噪声,保留人声频段。假设人声主要集中在80Hz到3500Hz之间。使用fir1函数创建一个线性相位FIR滤波器。
% 设计滤波器
cutoff_freq = [80 3500]; % 频率范围
order = 100; % 滤波器阶数
firlowpass = fir1(order, cutoff_freq/(fs/2)); % 创建低通滤波器
% 应用滤波器
filtered_signal = filter(firlowpass, 1, signal);
第五步:滤波后的波形图和频谱 重复第二步和第三步,分别绘制滤波后的波形图和频谱图。
% 绘制滤波后波形图
figure;
plot(t, filtered_signal);
xlabel('Time (s)');
ylabel('Amplitude');
title('Filtered Signal Waveform');
grid on;
% 计算滤波后频谱
Pxx_filtered, f_filtered = periodogram(filtered_signal, hamming(length(filtered_signal)), [], fs);
% 绘制滤波后频谱图
figure;
plot(f_filtered, 10*log10(Pxx_filtered));
xlabel('Frequency (Hz)');
ylabel('Power/Frequency (dB/Hz)');
title('Filtered Signal Spectrum');
grid on;
将上述代码放入单独的.m文件中运行,就可以得到所需的波形图和频谱图。然后,根据您的实际需求调整滤波器参数,以优化噪音抑制效果。最后,记得将生成的音频文件、代码和报告整理成指定格式提交。