语音信号加噪频域分析与滤波处理(MATLAB GUI)
- 读入一段语音信号(或音乐信号)。
- 在语音信号中分别加入以下几种噪声:
- (a) 白噪声;(b) 单频噪声(正弦干扰);© 多频噪声(多正弦干扰);
- 绘出叠加噪声前后的语音信号时域和频坡波形图,播放语音信号,从听觉上进行对比,分析并体会含噪语音信号频域和时域波形的改变。
- 根据信号的频谱特性,设计IIR数字滤波器;
- 分析得到信号的赖谱,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化;
- 回放语音信号。
GUI功能界面如图所示
部分代码展示
function varargout = task2voice(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @task2voice_OpeningFcn, ...
'gui_OutputFcn', @task2voice_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
clc;
%% --- Executes just before task2voice is made visible.
function task2voice_OpeningFcn(hObject, ~, handles, varargin)
% Choose default command line output for task2voice
handles.output = hObject;
guidata(hObject, handles);
%% --- Outputs from this function are returned to the command line.
function varargout = task2voice_OutputFcn(hObject, ~, handles)
varargout{1} = handles.output;
%% --- Executes on button press in openfile.
function openfile_Callback(hObject, ~, handles)
[filename, ~] =uigetfile({'*.mp3';'*.wav';'*.*'},'打开音频');
fle=filename;
[s,fs]=audioread(fle); % 读入数据文件
h = waitbar(0,'等待...');
steps = 100;
for step = 1:steps
waitbar(step / steps)
end
close(h)
s=s-mean(s); % 消除直流分量
s=s/max(abs(s)); % 幅值归一化
N=length(s); % 求出数据长度
time=(0:N-1)/fs; % 求出时间刻度
%%打开axes1的句柄 进行axes1的操作
axes(handles.p1);
plot(time,s,'k'); % 画出纯语音信号的波形图
title('纯语音信号'); ylabel('幅值');
y=s;
%画出原始语音做FFT变换后频谱图
Y1=fft(y);
Y=abs(Y1);
axes(handles.p3)
plot(Y,'k');
xlabel('频率');
ylabel('幅值');
title('原始语音做FFT变换后频谱图');
IIR高通滤波结果
IIR带通滤波结果
联系方式