基于MATLAB的数字信号处理.docx

上传人:b****5 文档编号:6753582 上传时间:2023-01-10 格式:DOCX 页数:41 大小:392.91KB
下载 相关 举报
基于MATLAB的数字信号处理.docx_第1页
第1页 / 共41页
基于MATLAB的数字信号处理.docx_第2页
第2页 / 共41页
基于MATLAB的数字信号处理.docx_第3页
第3页 / 共41页
基于MATLAB的数字信号处理.docx_第4页
第4页 / 共41页
基于MATLAB的数字信号处理.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

基于MATLAB的数字信号处理.docx

《基于MATLAB的数字信号处理.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的数字信号处理.docx(41页珍藏版)》请在冰豆网上搜索。

基于MATLAB的数字信号处理.docx

基于MATLAB的数字信号处理

MATLAB的综合实验

一、实验目的及要求

培养学生利用Matlab解决专业问题的能力。

二、实验设备(环境)及要求

1.计算机

2.Matlab软件编程实验平台

三、实验内容

1、编程实现一个数字信号处理的仿真系统。

要求具有界面并实现以下功能:

1)能产生(得到)并选择各种数字信号(sin、方波、三角波、语音、噪声及其叠加);

2)具有DFT、DCT和DWT变换功能,并对各种信号进行变换;

3)设计滤波器实现低通、高通、带通滤波,得到输出信号的频域特性和时间序列;

4)输入一段叠加了噪声的语音信号,显示其频谱特性,通过变换或滤波对其降噪,得到输出信号的频域特性和时间序列。

四、设计思想

本系统包含有三个主要部分:

信号产生与变换模块,滤波器模块和语音噪声处理。

信号产生与变换通过输入信号频率和采样频率实现正弦、方波、三角波、语音信号的产生以及噪声的叠加,系统设定信号持续时间为0.05s,语音信号为截取了一段2s的声音信号。

同时对各个信号进行DFT,DCT和DWT变换,且变换点数N=256,同时设定DWT变换时的小波类型为db1。

滤波器模块设计了四个IIR滤波器(巴特沃斯、切比雪夫Ⅰ型,切比雪夫Ⅱ型和椭圆滤波器),并分别实现低通,高通和带通。

界面设计了各种滤波器所需参数的输入模块。

系统设定待滤波信号持续时间为0.05s,包含有3个频率成分,S=sin(2*pi*f*t)+sin(2*pi*5*f*t)+sin(2*pi*8*f*t),其中f为输入信号频率,S通过低通、带通、高通滤波器之后,分别得到频率为f,5f和8f的正弦信号,实现信号滤波。

语音噪声处理部分是一个复选框按钮,通过巴特沃斯低通滤波器对其进行降噪,设计中通过观察噪声语音信号的频谱得到低通滤波器的截止频率和阻带起始频率,并合理输入通带衰减与阻带衰减,最终得到理想的降噪结果。

数字滤波器设计过程中用到了如下的一些matlab设计函数:

buttord、butter,cheb1ord、cheby1,cheb2ord、cheby2,ellipord、ellip。

五、程序代码(界面除外)及注释

functionvarargout=zuoye(varargin)

gui_Singleton=1;

gui_State=struct('gui_Name',mfilename,...

'gui_Singleton',gui_Singleton,...

'gui_OpeningFcn',@zuoye_OpeningFcn,...

'gui_OutputFcn',@zuoye_OutputFcn,...

'gui_LayoutFcn',[],...

'gui_Callback',[]);

ifnargin&&ischar(varargin{1})

gui_State.gui_Callback=str2func(varargin{1});

end

ifnargout

[varargout{1:

nargout}]=gui_mainfcn(gui_State,varargin{:

});

else

gui_mainfcn(gui_State,varargin{:

});

end

functionzuoye_OpeningFcn(hObject,eventdata,handles,varargin)

handles.output=hObject;

guidata(hObject,handles);

functionvarargout=zuoye_OutputFcn(hObject,eventdata,handles)

varargout{1}=handles.output;

functionedit1_show_Callback(hObject,eventdata,handles)

functionedit1_show_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionedit2_show_Callback(hObject,eventdata,handles)

functionedit2_show_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

functionnoise_radiobutton_Callback(hObject,eventdata,handles)

%------------信号产生部分--------------

functionsignal_popupmenu_Callback(hObject,eventdata,handles)

val=get(hObject,'value');

globalf;

globalfs;

globalsin_1;

globalnoise_sin;

globalsquare_1;

globalnoise_square;

globalsawtooth_1;

globalnoise_sawtooth;

globalsound_1;

globalnoise_sound;

globaln;

n=0:

1/fs:

0.05;%设定信号持续时间为0.05s

switchval

case1

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit2_show,'string','叠加噪声的正弦波','FontSize',12);

y=sin(2*pi*f*n);

noise_sin=y+rand(size(n));

axes(handles.axes2);

plot(n,noise_sin,'linewidth',1.5);

xlabel('t/s');

gridon;

else

set(handles.edit1_show,'string','正弦波波形','FontSize',12);

sin_1=sin(2*pi*f*n);

axes(handles.axes1);

plot(n,sin_1,'linewidth',2);

xlabel('t/s');

gridon;

end

case2

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit2_show,'string','叠加噪声的方波','FontSize',12);

y=square(2*pi*f*n,50);

noise_square=y+rand(size(n));

axes(handles.axes2);

plot(n,noise_square,'linewidth',1.5);

xlabel('t/s');

gridon;

else

set(handles.edit1_show,'string','方波波形','FontSize',12);

square_1=square(2*pi*f*n,50);

axes(handles.axes1);

plot(n,square_1,'linewidth',2);

xlabel('t/s');

set(handles.axes1,'Ylim',[-1.5,1.5]);

gridon;

end

case3

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit2_show,'string','叠加噪声的三角波','FontSize',12);

y=sawtooth(2*pi*f*n);

noise_sawtooth=y+rand(size(n));

axes(handles.axes2);

plot(n,noise_sawtooth,'linewidth',1.5);

xlabel('t/s');

gridon;

else

set(handles.edit1_show,'string','三角波波形','FontSize',12);

sawtooth_1=sawtooth(2*pi*f*n);

axes(handles.axes1);

plot(n,sawtooth_1,'linewidth',2);

xlabel('t/s');

gridon;

end

case4

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit2_show,'string','叠加噪声的语音信号','FontSize',12);

[y,fs1,bit]=wavread('vo.wav');

y1=y(:

1);%单声道处理

noise_sound=y1+rand(length(y1),1);

sound(noise_sound,fs1,bit);

axes(handles.axes2);

N1=length(y1);

ts=(0:

N1-1)/fs1;

plot(ts,noise_sound);

xlabel('t/s');

gridon;

else

set(handles.edit1_show,'string','语音信号','FontSize',12);

[y,fs1,bit]=wavread('vo.wav');

sound_1=y(:

1);%单声道处理

sound(sound_1,fs1,bit);

axes(handles.axes1);

N1=length(sound_1);

ts=(0:

N1-1)/fs1;

plot(ts,sound_1);

xlabel('t/s');

gridon;

end

end

functionsignal_popupmenu_CreateFcn(hObject,eventdata,handles)

ifispc&&isequal(get(hObject,'BackgroundColor'),get(0,'defaultUicontrolBackgroundColor'))

set(hObject,'BackgroundColor','white');

end

%----------信号变换-------------------

functiontransform_popupmenu_Callback(hObject,eventdata,handles)

globalsin_1;

globalnoise_sin;

globalsquare_1;

globalnoise_square;

globalsawtooth_1;

globalnoise_sawtooth;

globalsound_1;

globalnoise_sound;

globaln;

globalfs;

globalN;

N=256;%DFT,DCT变换的点数

k1=(1:

N).*fs/N;

val=get(hObject,'value');

val_signal=get(handles.signal_popupmenu,'value');

switchval_signal

case1

switchval

case1

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声的正弦信号DFT','FontSize',12);

ifN>length(noise_sin)

n=0:

N-1;

noise_sin=[noise_sin,zeros(1,N-length(noise_sin))];

end

k=0:

N-1;

WN=exp(-j*2*pi/N);

nk=n'*k;

WNnk=WN.^nk;

Xk=noise_sin*WNnk;

axes(handles.axes1);

stem(k1,abs(Xk));

xlabel('f/Hz');

gridon;

else

set(handles.edit2_show,'string','正弦信号的DFT','FontSize',12);

ifN>length(sin_1)

n=0:

N-1;

sin_1=[sin_1,zeros(1,N-length(sin_1))];

end

k=0:

N-1;

WN=exp(-j*2*pi/N);

nk=n'*k;

WNnk=WN.^nk;

Xk=sin_1*WNnk;

axes(handles.axes2);

stem(k1,abs(Xk));

xlabel('f/Hz');

gridon;

end

case2

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声的正弦信号DCT','FontSize',12);

Xk=dct(noise_sin);

axes(handles.axes1);

stem(abs(Xk));

gridon;

else

set(handles.edit2_show,'string','正弦信号的DCT','FontSize',12);

Xk=dct(sin_1);

axes(handles.axes2);

stem(abs(Xk));

gridon;

end

case3

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声正弦信号的DWT','FontSize',12);

[Xk1,Xk2]=dwt(noise_sin,'db1');

axes(handles.axes1);

plot(Xk1,'--r','linewidth',2);

holdon;

gridon;

plot(Xk2,'linewidth',2);

legend('近似分量','细节分量');

holdoff

else

set(handles.edit2_show,'string','正弦信号的DWT','FontSize',12);

[Xk1,Xk2]=dwt(sin_1,'db1');

axes(handles.axes2);

plot(Xk1,'--r','linewidth',2);

gridon;

holdon;

plot(Xk2,'linewidth',2);

legend('近似分量','细节分量');

holdoff

end

end

case2

switchval

case1

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声的方波信号DFT','FontSize',12);

ifN>length(noise_square)

n=0:

N-1;

noise_square=[noise_square,zeros(1,N-length(noise_square))];

end

k=0:

N-1;

WN=exp(-j*2*pi/N);

nk=n'*k;

WNnk=WN.^nk;

Xk=noise_square*WNnk;

axes(handles.axes1);

stem(k1,abs(Xk));

xlabel('f/Hz');

gridon;

else

set(handles.edit2_show,'string','方波信号的DFT','FontSize',12);

ifN>length(square_1)

n=0:

N-1;

square_1=[square_1,zeros(1,N-length(square_1))];

end

k=0:

N-1;

WN=exp(-j*2*pi/N);

nk=n'*k;

WNnk=WN.^nk;

Xk=square_1*WNnk;

axes(handles.axes2);

stem(k1,abs(Xk));

xlabel('f/Hz');

gridon;

end

case2

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声的方波信号DCT','FontSize',12);

Xk=dct(noise_square);

axes(handles.axes1);

stem(abs(Xk));

gridon;

else

set(handles.edit2_show,'string','方波信号的DCT','FontSize',12);

Xk=dct(square_1);

axes(handles.axes2);

stem(abs(Xk));

gridon;

end

case3

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声的方波信号DWT','FontSize',12);

[Xk1,Xk2]=dwt(noise_square,'db1');

axes(handles.axes1);

plot(Xk1,'--r','linewidth',2);

holdon;

gridon;

plot(Xk2,'linewidth',2);

legend('近似分量','细节分量');

holdoff

else

set(handles.edit2_show,'string','方波信号的DWT','FontSize',12);

[Xk1,Xk2]=dwt(square_1,'db1');

axes(handles.axes2);

plot(Xk1,'--r','linewidth',2);

gridon;

holdon;

plot(Xk2,'linewidth',2);

legend('近似分量','细节分量');

holdoff

end

end

case3

switchval

case1

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声的三角波DFT','FontSize',12);

ifN>length(noise_sawtooth)

n=0:

N-1;

noise_sawtooth=[noise_sawtooth,zeros(1,N-length(noise_sawtooth))];

end

k=0:

N-1;

WN=exp(-j*2*pi/N);

nk=n'*k;

WNnk=WN.^nk;

Xk=noise_sawtooth*WNnk;

axes(handles.axes1);

stem(k1,abs(Xk));

xlabel('f/Hz');

gridon;

else

set(handles.edit2_show,'string','三角波信号的DFT','FontSize',12);

ifN>length(sawtooth_1)

n=0:

N-1;

sawtooth_1=[sawtooth_1,zeros(1,N-length(sawtooth_1))];

end

k=0:

N-1;

WN=exp(-j*2*pi/N);

nk=n'*k;

WNnk=WN.^nk;

Xk=sawtooth_1*WNnk;

axes(handles.axes2);

stem(k1,abs(Xk));

xlabel('f/Hz');

gridon;

end

case2

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobutton,'max')

set(handles.edit1_show,'string','叠加噪声的三角波DCT','FontSize',12);

Xk=dct(noise_sawtooth);

axes(handles.axes1);

stem(abs(Xk));

gridon;

else

set(handles.edit2_show,'string','三角波信号的DCT','FontSize',12);

Xk=dct(sawtooth_1);

axes(handles.axes2);

stem(abs(Xk));

gridon;

end

case3

ifget(handles.noise_radiobutton,'value')==get(handles.noise_radiobu

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1