当前位置:文档之家› 音频信号去噪报告

音频信号去噪报告

xlabel('时间轴,单位s');
subplot(2,1,2);
plot((-N/2+1:N/2)*Fs/N/f,Z1,'b');
axis([-25 25 -60 40]);
set(gca,'XTick',-25:5:25),grid on;
set(gca,'YTick',-60:20:40),grid on;
title('叠加噪声后信号的频谱');
xlabel('频率轴,单位kHz');
ylabel('单位:dB');
%%设计低通滤波器
wn=0.15;%滤波器归一化截止频率为0.15
n=128;%滤波器阶数为128
hh=fir1(n,wn,'low');
figure(3);
freqz(hh);%绘制滤波器的频率响应图
figure(2);%原始音频信号叠加噪声后时域图、频谱图
subplot(2,1,1);
plot(t,y1,'r');
axis([0 95 -1 1]);
set(gca,'XTick',0:5:95),grid on;
set(gca,'YTick',-0.8:0.2:0.8),grid on;
title('叠加噪声后信号的波形');
title('原始声音信号频谱图');
xlabel('频率轴,单位kHz');
ylabel('单位:dB');
%%原始音频加噪处理
SNR=16;
y1=awgn(x1,SNR,'measured');%对音频信号叠加高斯白噪声,信噪比为16
Ym=max(max(max(y1)),max(abs(min(y1))));%找出极值
plot(t,x1,'r');
axis([0 95 -1 1]);%设置坐标轴范围
set(gca,'XTick',0:5:95),grid on;%设置x坐标轴刻度,绘制方格线
set(gca,'YTick',-0.8:0.2:0.8),grid on;%设置y坐标轴刻度,绘制方格线
title('原始声音信号波形');
Z=z/Zm;
figure(4);
subplot(2,1,1);
plot(t,z1,'r');
axis([0 95 -1 1]);
set(gca,'XTick',0:5:95),grid on;
set(gca,'YTick',-0.8:0.2:0.8),grid on;
title('滤波后信号的波形');
%%对加噪音频信号进行滤波处理
z1=filter(hh,1,y1);%使含有噪声的信号通过一个已设计的低通滤波器hh
Z0=fft(z1,N);
Z1=10*log(abs(fftshift(Z0)));、
z=[z1 x2];、
Zm=max(max(max(z)),max(abs(min(z))));、
t=0:1/Fs:(length(x1)-1)/Fs;%取时域横轴t
N = 1024; %fft点数
f=10^3;%取频率轴单位为KHz
X0=fft(x1,N);
X1=10*log(abs(fftshift(X0)));%用对数表示原始音频信号的频谱
figure(1);%原始音频信号时域图、频谱图
subplot(2,1,1);
五、心得体会
用MATLAB处理声音文件时,在生成声音文件的过程中需要将音量标准化,否则在后面的步骤中会出现声音过小而分辨不出声音是否变化的情况,数字滤波中,由于设计的滤波器为低通滤波器,故滤波后,对高频有很大衰减。在满足采样定律条件下,实现数据抽取,在原采样率下波形变密、频谱变宽且幅度减半,但在新采样率下波形和频谱都很好。在语音信号处理过程中,MATLAB兼顾了专用工具软件的简单性和计算机程序语言的灵活性,特别是处理效果的可视性和可感知,有利于理解语音信号处理的本质,有利于激发学习和研究兴趣,也有利于培养我们MATLAB软件的操作技能。
三、实验步骤:
仿真程序audio_signal.m:
clear all
%%读取原始音频文件
[x,Fs]=audioread('C:\Users\yhtcp\Desktop\音频信号去噪\music.wav');%默认采样频率Fs为44100Hz
x1=x(:,1);%1声道数据
x2=x(:,2);%2声道数据
Y=y1/Ym;%归一化处理
audiowrite('C:\Users\yhtcp\Desktop\音频信号去噪\music_noise.wav',Y,Fs);%生成原始信号叠加噪声后的wav格式音频文件,试听叠加噪声效果
Y0=fft(y1,N);
Y1=10*log(abs(fftshift(Y0)));%用对数表示噪声信号的频谱
(2)声道分离合并与组合
立体声或双声道音频信号有左右两个声道,利用MATLAB实现双声道分离、两路声道合并和两个单声道组合成一个双声道等效果,实际上是利用了MATLAB的矩阵抽取、矩阵相加和矩阵重组运算。
(3)数字滤波
数字滤波是常用的音频处理技术。先利用fir1函数,设计一个数字低通滤波器,再用Filter或Filter2函数即可实现滤波处理。调用的Filter函数格式是:Y =filte(B,A,X) 。其中,B和A是滤波器传输函数的分子和分母系数,X是输入变量,Y是实现滤波后的输出变量。
xlabel('时间轴,单位s');
subplot(2,1,2);
plot((-N/2+1:N/2)*Fs/N/f,X1,'b');
axis([-25 25 -60 40]);
set(gca,'XTick',-25:5:25),grid on;
set(gca,'YTick',-60:20:40),grid on;四Biblioteka 结果与分析:1.实验结果:
Figure 1
Figure2
Figure3
Figure4
2.实验分析
通过对处理后的音频文件试听,可知噪声加入后,听觉上歌曲声音明显变差,而采用低通滤波的方法滤除噪声后歌曲声音明显变清晰。
同时实验过程总结一下三点:
(1)音量标准化
在实际生成语音信号的过程中常有音轻问题,因此在生成声音过程中需要对声音电平进行量化处理,使音量实现标准化。利用Matlab很容易实现音量标准化,即最大电平对应最高量化比特。基本步骤是:1.利用wavread函数将WAV文件转换成列数组变量:2.求出数组变量的极值并对所有元素作归一化处理;3.用wavwrite函数还原成音量标准化的WAV文件。
title('滤波后的信号频谱');
xlabel('频率轴,单位kHz');
ylabel('单位:dB');
audiowrite('C:\Users\yhtcp\Desktop\音频信号去噪\music_recover.wav',Z,Fs);%生成原始信号叠加噪声后又经滤波后的wav格式音频文件,试听滤波后效果
xlabel('时间轴,单位s');
subplot(2,1,2);
plot((-N/2+1:N/2)*Fs/N/f,Y1,'b');
axis([-25 25 -60 40]);
set(gca,'XTick',-25:5:25),grid on;
set(gca,'YTick',-60:20:40),grid on;
一、实验目的:
1、熟悉MATLAB语言的基本用法;
2、掌握MATLAB语言中音频数据与信息的读取与播放方法;
3、掌握在MATLAB中设计滤波器的方法;
4、掌握噪声产生的方法;
5、掌握MATLAB语言中信号频谱的绘制方法。
二、实验原理:
选取一段.wav格式的音乐或歌曲,用MATLAB将选取的音频文件读出来,在读出的音频信号中加入随机高斯噪声,再将带有噪声的音乐信号通过低通滤波器滤除噪声,还原音乐。
相关主题