y=dct(x);üT变换 axes(handles.axes2); plot(abs(y)) title('输入信号的DCT变换'); else if slect3%选择DWT变换 [cA,cD]=dwt(x,'db1');%DWT变换 %近似系数CA1和细节系数CD1 axes(handles.axes2); plot(1:(N+1)/2,abs(cA),1:(N+1)/2,abs(cD)) legend('cA','cD'); title('输入信号的DWT变换'); end end end % --- Executes on button press in radiobutton4. function radiobutton4_Callback(hObject, eventdata, handles) %选择低通滤波 set(handles.edit9,'Enable','off');%截止低频输入框灰暗显示 set(handles.edit10,'Enable','on');%截止高频输入框使能 % --- Executes on button press in radiobutton5. function radiobutton5_Callback(hObject, eventdata, handles) %选择低通滤波 set(handles.edit9,'Enable','on');%截止低频输入框使能 set(handles.edit10,'Enable','off');%截止高频输入框灰暗显示 % --- Executes on button press in radiobutton6. function radiobutton6_Callback(hObject, eventdata, handles) %选择低通滤波 set(handles.edit9,'Enable','on');%截止低频输入框使能 set(handles.edit10,'Enable','on');%截止高频输入框使能 function edit9_Callback(hObject, eventdata, handles) %截止低频输入 % --- Executes during object creation, after setting all properties. function edit9_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit10_Callback(hObject, eventdata, handles)
31
%截止高频输入 % --- Executes during object creation, after setting all properties. function edit10_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in pushbutton3. function pushbutton3_Callback(hObject, eventdata, handles) %实现低通、高通、带通滤波,得到输出信号的频域特性和时间序列 global N;%全局变量 global x; P=5;%滤波结束 slect4=get(handles.radiobutton4,'value');%滤波类型选择 slect5=get(handles.radiobutton5,'value'); slect6=get(handles.radiobutton6,'value'); if slect4%选择低通滤波 fs=str2num(get(handles.edit10,'string'));%得到截止高频 [b,a]=butter(P,fs/N);%巴特沃斯低通滤波器 y=filter(b,a,x);%滤波后信号 axes(handles.axes3); plot(y) title('低通滤波时间序列'); Y=fft(y,N);%滤波后信号频域特性 axes(handles.axes4); plot(abs(Y(1:(N+1)/2))); title('低通滤波频域特性'); else if slect5%选择高通滤波 fc=str2num(get(handles.edit9,'string'));%得到截止低频 [b,a]=butter(P,fc/N,'high');%巴特沃斯高通滤波器 y=filter(b,a,x);%滤波后信号 axes(handles.axes3); plot(y) title('高通滤波时间序列'); Y=fft(y,N);%滤波后信号频域特性 axes(handles.axes4); plot(abs(Y(1:(N+1)/2))); title('高通滤波频域特性'); else if slect6%选择带通滤波 fc=str2num(get(handles.edit9,'string'));%得到截止
32
低频 fs=str2num(get(handles.edit10,'string'));%得到截止高频 [b,a]=butter(P,[fc/N,fs/N]);%巴特沃斯带通滤波器 y=filter(b,a,x);%滤波后信号 axes(handles.axes3); plot(y) title('带通滤波时间序列'); Y=fft(y,N);%滤波后信号频域特性 axes(handles.axes4); plot(abs(Y(1:(N+1)/2))); title('带通滤波频域特性'); end end end % --- Executes on button press in pushbutton4. function pushbutton4_Callback(hObject, eventdata, handles) %输入一段叠加了噪声的语音信号,显示其频谱特性,通过滤波对其降噪,得到输出信号的频域特性和时间序列。 global N;%全局变量 global x4; global fs; axes(handles.axes5); plot(x4);%原始语音信号 title('原始语音信号时间序列'); sound(x4,fs);%试听原始语音信号 pause(5);%停留5秒 x=awgn(x4,30);%在语音信号中加入高斯白噪声,信噪比为30dB axes(handles.axes6); plot(x); title('添加噪声后的信号时间序列'); sound(x,fs);%试听加噪语音信号 pause(5);%停留5秒 [b,a]=butter(1,0.2);%产生阶数为1的巴特沃斯低通滤波器 y=filter(b,a,x);%连续5次低通滤波 y=filter(b,a,y); y=filter(b,a,y); y=filter(b,a,y); y=filter(b,a,y);%降噪后的语音信号 axes(handles.axes7);
33
plot(y); title('降噪后的信号时间序列'); sound(y,fs);%试听降噪后的语音信号 pause(5);%停留5秒 Y=fft(y,N);%降噪后的语音信号频域特性 axes(handles.axes8); plot(abs(Y(1:(N+1)/2))); title('降噪后的信号频域特性'); function varargout = renliang(varargin) % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @ renliang _OpeningFcn, ... 'gui_OutputFcn', @ renliang _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 % End initialization code - DO NOT EDIT % --- Executes just before renliang is made visible. function renliang _OpeningFcn(hObject, eventdata, handles, varargin) % Choose default command line output for renliang handles.output = hObject; % Update handles structure guidata(hObject,handles); % UIWAIT makes renliang wait for user response (see UIRESUME) % --- Outputs from this function are returned to the command line. function varargout = renliang _OutputFcn(hObject, eventdata,
34
handles) % Get default command line output from handles structure varargout{1} = handles.output; % --- Executes on button press in checkbox1. function checkbox1_Callback(hObject, eventdata, handles) %正弦波输入 % --- Executes during object creation, after setting all properties. function checkbox1_CreateFcn(hObject, eventdata, handles) function edit1_Callback(hObject, eventdata, handles) %正弦波幅值 % --- Executes during object creation, after setting all properties. function edit1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end function edit6_Callback(hObject, eventdata, handles) %正弦波频率 % --- Executes during object creation, after setting all properties. function edit6_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end % --- Executes on button press in checkbox1. function checkbox2_Callback(hObject, eventdata, handles) %方波输入 % --- Executes during object creation, after setting all properties. function checkbox2_CreateFcn(hObject, eventdata, handles) function edit2_Callback(hObject, eventdata, handles) %方波幅值 % --- Executes during object creation, after setting all properties. function edit2_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'),
35