【信号处理】数字信号处理Matlab设计附GUI界面和报告

1 简介​

信号处理是现代信息处理的基本内容,数字信号的处理更是重中之重。数字信号处理的研究内容主要是语音信号和图像信号,而研究语音信号对于现代语音通信有着积极的意义。研究语音信号又分为时域和频域两个方面。

(1)语音信号的时域分析处理:一类是进行语音信号分析,另一类是生成和变换各种调制信号,对信号平均累加器的动态范围进行压缩扩张,用门限方法进行噪声的抑制等等。前一类是属于时域中信号平均累加器的线性处理,主要通过信号的加减、时移、倍乘、卷积、求相关函数等来实现。而后一类,则属于非线性的变换和处理。

(2)语音信号的频谱分析处理:信号的时域频谱分析通常是要结合在一起进行的。

在数字设计系统中,任何信号处理器件都可以看成是一个滤波器,滤波器设计是数字信号处理的重要内容。滤波器就是在对信号进行分析的基础上,设计适当的系统,提取有用的信号,抑制噪声信号干扰。滤波器的设计通常是在频率域进行的。

本设计是用MATLAB仿真软件设计滤波器对受干扰的语音信号进行滤波处理,并对各部分进行频谱分析。

1.语音信号的采集

熟悉并掌握MATLAB中有关声音(wave)录制、播放、存储和读取的函数,在MATLAB环境中,使用声音相关函数录制3秒左右自己的声音。(考虑如何解决一个实际问题:录制刚开始时,常会出现实际发出声音落后录制动作半拍的现象,如何排除对这些无效点的采样?)

2.语音信号的频谱分析

要求首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性,从而加深对频谱特性的理解。

3.设计数字滤波器并画出其频率响应

给出各滤波器的性能指标:

(1)低通滤波器性能指标:fb=1000 Hz,fc=1200 Hz,As=100dB,Ap=1dB。

(2)高通滤波器性能指标:fc=4800 Hz,fb=5000 Hz As=100dB,Ap=1dB。

(3)带通滤波器性能指标:fp1=1200 Hz,fp2=3000 Hz,fsc1=1000 Hz,fsc2=3200Hz,As=100dB,Ap=1dB。

要求用窗函数法和双线性变换法设计上面要求的3种滤波器。在Matlab中,使用函数butter,cheby1等函数设计IIR滤波器;利用Matlab中的函数freqz画出各滤波器的频率响应。

4.用滤波器对信号进行滤波

要求用自己设计的各种滤波器分别对采集的信号进行滤波,在Matlab中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。

5.比较滤波前后语音信号的波形及频谱

要求在一个窗口同时画出滤波前后的波形及频谱。

6.回放语音信号

在Matlab中,使用相关声音函数对声音进行回放。辨别滤波前后的声音有何变化。

7.男女声语音信号频谱特点分析

换一个与你性别相异的人录制同样一段语音内容,分析两段内容相同的语音信号频谱之间有什么特点。

8. 背景噪声滤除

再录制一段同样长时间的背景噪声(频谱能量集中在某个小范围内)叠加到你的语音信号中,分析叠加前后信号频谱的变化,设计一个合适的滤波器,能够把该噪声滤除。

9.设计系统界面(用MATLAB中GUIDE工具,要求自学)

为了使编制的程序操作方便,要求有能力的同学,设计处理系统的用户界面。在所设计的系统界面上可以选择滤波器的类型,输入滤波器的参数,显示滤波器的频率响应,选择信号等。

2 部分代码

<span style="color:#333333"><span style="background-color:rgba(0, 0, 0, 0.03)"><code><span style="color:#ca7d37">function</span> varargout = cover1(varargin)</code><code>% Begin initialization code - DO NOT EDIT</code><code>gui_Singleton = 1;</code><code>gui_State = struct(<span style="color:#dd1144">'gui_Name'</span>,       mfilename, ...</code><code>    <span style="color:#dd1144">'gui_Singleton'</span>,  gui_Singleton, ...</code><code>    <span style="color:#dd1144">'gui_OpeningFcn'</span>, @cover1_OpeningFcn, ...</code><code>    <span style="color:#dd1144">'gui_OutputFcn'</span>,  @cover1_OutputFcn, ...</code><code>    <span style="color:#dd1144">'gui_LayoutFcn'</span>,  [] , ...</code><code>    <span style="color:#dd1144">'gui_Callback'</span>,   []);</code><code><span style="color:#ca7d37">if</span> nargin && ischar(varargin{1})</code><code>    gui_State.gui_Callback = str2func(varargin{1});</code><code>end</code><code>​</code><code><span style="color:#ca7d37">if</span> nargout</code><code>    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});</code><code><span style="color:#ca7d37">else</span></code><code>    gui_mainfcn(gui_State, varargin{:});</code><code>end</code><code>% End initialization code - DO NOT EDIT</code><code><span style="color:#ca7d37">function</span> cover1_OpeningFcn(hObject, eventdata, handles, varargin)</code><code>handles.output = hObject;</code><code>​</code><code>ha=axes(<span style="color:#dd1144">'units'</span>,<span style="color:#dd1144">'normalized'</span>,<span style="color:#dd1144">'position'</span>,[0 0 1 1]);</code><code>uistack(ha,<span style="color:#dd1144">'down'</span>);</code><code>II=imread(<span style="color:#dd1144">'cover1.jpg'</span>);</code><code>image(II)</code><code>colormap gray</code><code><span style="color:#ca7d37">set</span>(ha,<span style="color:#dd1144">'handlevisibility'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>​</code><code>hb = axes(<span style="color:#dd1144">'unit'</span>,<span style="color:#dd1144">'normalized'</span>,<span style="color:#dd1144">'position'</span>,[0.38 0.95 0.365 0.051]);</code><code>strCell = {<span style="color:#dd1144">'语音信号的处理与滤波'</span>};%% 逐列显示文本</code><code>text(<span style="color:#dd1144">'string'</span>,strCell,<span style="color:#dd1144">'FontSize'</span>, 18, <span style="color:#dd1144">'FontWeight'</span>, <span style="color:#dd1144">'bold'</span>);</code><code><span style="color:#ca7d37">set</span>(hb,<span style="color:#dd1144">'handlevisibility'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>​</code><code>hc = axes(<span style="color:#dd1144">'unit'</span>,<span style="color:#dd1144">'normalized'</span>,<span style="color:#dd1144">'position'</span>,[0.01 0.56 0.061 0.03]);</code><code>strCell = {<span style="color:#dd1144">'声音选择:'</span>};%% 逐列显示文本</code><code>text(<span style="color:#dd1144">'string'</span>,strCell,<span style="color:#dd1144">'FontSize'</span>, 14, <span style="color:#dd1144">'FontWeight'</span>, <span style="color:#dd1144">'bold'</span>);</code><code><span style="color:#ca7d37">set</span>(hc,<span style="color:#dd1144">'handlevisibility'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>​</code><code>​</code><code>hd = axes(<span style="color:#dd1144">'unit'</span>,<span style="color:#dd1144">'normalized'</span>,<span style="color:#dd1144">'position'</span>,[0.258 0.822 0.094 0.041]);</code><code>strCell = {<span style="color:#dd1144">'滤波器设置:'</span>};%% 逐列显示文本</code><code>text(<span style="color:#dd1144">'string'</span>,strCell,<span style="color:#dd1144">'FontSize'</span>, 14, <span style="color:#dd1144">'FontWeight'</span>, <span style="color:#dd1144">'bold'</span>);</code><code><span style="color:#ca7d37">set</span>(hd,<span style="color:#dd1144">'handlevisibility'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>​</code><code>​</code><code>he = axes(<span style="color:#dd1144">'unit'</span>,<span style="color:#dd1144">'normalized'</span>,<span style="color:#dd1144">'position'</span>,[0.258 0.738 0.074 0.037]);</code><code>strCell = {<span style="color:#dd1144">'设计方法:'</span>};%% 逐列显示文本</code><code>text(<span style="color:#dd1144">'string'</span>,strCell,<span style="color:#dd1144">'FontSize'</span>, 8);</code><code><span style="color:#ca7d37">set</span>(he,<span style="color:#dd1144">'handlevisibility'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>​</code><code>​</code><code>hf = axes(<span style="color:#dd1144">'unit'</span>,<span style="color:#dd1144">'normalized'</span>,<span style="color:#dd1144">'position'</span>,[0.258 0.57 0.105 0.03]);</code><code>strCell = {<span style="color:#dd1144">'请输入滤波器参数:'</span>};%% 逐列显示文本</code><code>text(<span style="color:#dd1144">'string'</span>,strCell,<span style="color:#dd1144">'FontSize'</span>, 8);</code><code><span style="color:#ca7d37">set</span>(hf,<span style="color:#dd1144">'handlevisibility'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>                end</code><code>            end</code><code>        end</code><code>        </code><code>    end</code><code>end</code><code><span style="color:#ca7d37">function</span> filter_Callback(hObject, eventdata, handles)</code><code>global var</code><code>var = get(handles.filter,<span style="color:#dd1144">'value'</span>);</code><code>switch var</code><code>    <span style="color:#ca7d37">case</span> 1</code><code>        <span style="color:#ca7d37">set</span>(handles.lowpass,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.lowstop,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.lowpasstarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.lowstoptarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        </code><code>        <span style="color:#ca7d37">set</span>(handles.highpass,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.highstop,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.highpasstarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.highstoptarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        </code><code>        <span style="color:#ca7d37">set</span>(handles.bandfilterstop1,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.bandfilterpass1,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.bandfilterpass2,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.bandfilterstop2,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.bandfilterpasstarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.bandfilterstoptarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code>        </code><code>        axes(handles.FPRes1);</code><code>        plot(0,0);</code><code>        axes(handles.FPRes2);</code><code>        plot(0,0);</code><code>    <span style="color:#ca7d37">case</span> 2</code><code>        <span style="color:#ca7d37">set</span>(handles.lowpass,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'on'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.lowstop,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'on'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.lowpasstarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'on'</span>);</code><code>        <span style="color:#ca7d37">set</span>(handles.lowstoptarget,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'on'</span>);</code><code>        </code><code>        <span style="color:#ca7d37">set</span>(handles.highpass,<span style="color:#dd1144">'visible'</span>,<span style="color:#dd1144">'off'</span>);</code><code> 提示<span style="color:#dd1144">');</span></code><code>     l(get(handles.bandfilterstop2,'</code><code>                                bandfilterpasstarget = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterpasstarget,<span style="color:#dd1144">'String'</span>));</code><code>                                bandfilterstoptarget = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterstoptarget,<span style="color:#dd1144">'String'</span>));</code><code>                                wp1 = 2*pi*bandfilterpass1*1000*(1/8000);wp2 = 2*pi*bandfilterpass2*1000*(1/8000);</code><code>                                ws1 = 2*pi*bandfilterstop1*1000*(1/8000);ws2 = 2*pi*bandfilterstop2*1000*(1/8000);</code><code>                                Rp = bandfilterpasstarget;</code><code>                                As = bandfilterstoptarget;</code><code>                                Fs=8000;T=1/Fs;  %转换为模拟滤 波器的技术指标</code><code>                                Omgp1=(2/T)*tan(wp1/2);Omgp2=(2/T)*tan(wp2/2);</code><code>                                Omgp=[Omgp1,Omgp2]; Omgs1=(2/T)*tan(ws1/2);</code><code>                                Omgs2=(2/T)*tan(ws2/2); Omgs=[Omgs1,Omgs2];</code><code>                                bw=Omgp2-Omgp1;w0=sqrt(Omgp1*Omgp2);%模拟通带带宽和中心频率</code><code>                                [n,Omgn]=cheb1ord(Omgp,Omgs,Rp,As,<span style="color:#dd1144">'s'</span>); %计算阶数n和截止频率</code><code>                                [z0,p0,k0]=cheb1ap(n,Rp);  % 设计归一化的模拟滤波器原型</code><code>                                ba1=k0*real(poly(z0)); %求原型 滤波器的系数b</code><code>                                aa1=real(poly(p0));  %求原型滤 波器的系数a</code><code>                                [ba,aa]=lp2bp(ba1,aa1,w0,bw);%变换为模拟带通滤波器</code><code>                                [bd,ad]=bilinear(ba,aa,Fs);</code><code>                                voiceandbackground = wavread(<span style="color:#dd1144">'D:\Learning Practices\software program\Matlab Program\Course Design\voice file\voiceandbanckground.wav'</span>);</code><code>                                voiceandbackgroundfft = fft(voiceandbackgroundfft);</code><code>                                f = filter(bd,ad,voiceandbackground);</code><code>                                f1 = fft(f);</code><code>                                figure(11);</code><code>                                <span style="color:#ca7d37">set</span>(figure(11),<span style="color:#dd1144">'Menu'</span>,<span style="color:#dd1144">'none'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(11),<span style="color:#dd1144">'NumberTitle'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'Name'</span>,<span style="color:#dd1144">'滤波后的信号的频谱'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(11),<span style="color:#dd1144">'Color'</span>,<span style="color:#dd1144">'w'</span>);</code><code>                                subplot(2,2,1);plot(voiceandbackground);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波前的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,2);plot(20*log10(abs(voiceandbackgroundfft)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波前的相对幅度谱'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,3);plot(f1);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波后的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,4);plot(20*log10(abs(f1)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波后的相对幅度谱'</span>);</code><code>                                grid;</code><code>                            end</code><code>                        end</code><code>                        <span style="color:#ca7d37">if</span>(var == 4)</code><code>                            <span style="color:#ca7d37">if</span>(isempty(str2num(get(handles.highpass,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.highstop,<span style="color:#dd1144">'String'</span>))) || ...</code><code>                                    isempty(str2num(get(handles.highpasstarget,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.highstoptarget,<span style="color:#dd1144">'String'</span>))))</code><code>                                errordlg(<span style="color:#dd1144">'请正确输入参数'</span>,<span style="color:#dd1144">'提示'</span>);</code><code>                            <span style="color:#ca7d37">else</span></code><code>                                highpass = <span style="color:#ca7d37">eval</span>(get(handles.highpass,<span style="color:#dd1144">'String'</span>));</code><code>                                highstop = <span style="color:#ca7d37">eval</span>(get(handles.highstop,<span style="color:#dd1144">'String'</span>));</code><code>                                highpasstarget = <span style="color:#ca7d37">eval</span>(get(handles.highpasstarget,<span style="color:#dd1144">'String'</span>));</code><code>                                highstoptarget = <span style="color:#ca7d37">eval</span>(get(handles.highstoptarget,<span style="color:#dd1144">'String'</span>));</code><code>                                wp = 2*pi*highpass*1000*(1/12000);</code><code>                                ws = 2*pi*highstop*1000*(1/12000);</code><code>                                Rp =  highpasstarget;</code><code>                                As =  highstoptarget;</code><code>                                </code><code>                                Fs=12000;T=1/Fs; %fs为采样频率, fp为中心频率</code><code>                                Omgp=(2/T)*tan(wp/2); %原型通 带频率的预修正</code><code>                                Omgs=(2/T)*tan(ws/2); %原型阻 带频率的预修正</code><code>                                [n,Omgc]=ellipord(Omgp,Omgs,Rp,As,<span style="color:#dd1144">'s'</span>); %计算阶数n和截止频率</code><code>                                [z0,p0,k0]=ellipap(n,Rp,As); %设计归一化的椭圆模拟滤波器原型</code><code>                                ba=k0*real(poly(z0)); %求原型 滤波器的系数 b</code><code>                                aa=real(poly(p0));  %求原型滤 波器的系数 a</code><code>                                [ba1,aa1]=lp2hp(ba,aa,Omgc); %变换为模拟高通滤波器</code><code>                                [bd,ad]=bilinear(ba1,aa1,Fs);  %求数字系统的频率特性%求滤波器的分子及分母的系数矩阵</code><code>                                </code><code>                                voiceandbackground = wavread(<span style="color:#dd1144">'D:\Learning Practices\software program\Matlab Program\Course Design\voice file\voiceandbanckground.wav'</span>);</code><code>                                voiceandbackgroundfft = fft(voiceandbackground);</code><code>                                f = filter(bd,ad,voiceandbackground);</code><code>                                f1 = fft(f);</code><code>                                figure(12);</code><code>                                <span style="color:#ca7d37">set</span>(figure(12),<span style="color:#dd1144">'Menu'</span>,<span style="color:#dd1144">'none'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(12),<span style="color:#dd1144">'NumberTitle'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'Name'</span>,<span style="color:#dd1144">'滤波后的信号的频谱'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(12),<span style="color:#dd1144">'Color'</span>,<span style="color:#dd1144">'w'</span>);</code><code>                                subplot(2,2,1);plot(voiceandbackground);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波前的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,2);plot(20*log10(abs(voiceandbackgroundfft)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波前的相对幅度谱'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,3);plot(f1);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波后的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,4);plot(20*log10(abs(f1)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'背景噪声滤波后的相对幅度谱'</span>);</code><code>                                grid;</code><code>                            end</code><code>                        end</code><code>                        flagvoice =0;</code><code>                end</code><code>            end</code><code>        end</code><code>        <span style="color:#ca7d37">if</span>(Fvar == 3)</code><code>            <span style="color:#ca7d37">if</span>(var ~= 2 && var ~= 3 && var ~= 4)</code><code>                errordlg(<span style="color:#dd1144">'请选择滤波器类型'</span>,<span style="color:#dd1144">'提示'</span>);</code><code>            <span style="color:#ca7d37">else</span></code><code>                switch flagvoice</code><code>                    <span style="color:#ca7d37">case</span> 1</code><code>                        <span style="color:#ca7d37">if</span>(var == 2)</code><code>                            <span style="color:#ca7d37">if</span>(isempty(str2num(get(handles.lowpass,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.lowstop,<span style="color:#dd1144">'String'</span>))) || ...</code><code>                                    isempty(str2num(get(handles.lowpasstarget,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.lowstoptarget,<span style="color:#dd1144">'String'</span>))))</code><code>                                errordlg(<span style="color:#dd1144">'请正确输入参数'</span>,<span style="color:#dd1144">'提示'</span>);</code><code>                            <span style="color:#ca7d37">else</span></code><code>                                lowpass = <span style="color:#ca7d37">eval</span>(get(handles.lowpass,<span style="color:#dd1144">'String'</span>));</code><code>                                lowstop = <span style="color:#ca7d37">eval</span>(get(handles.lowstop,<span style="color:#dd1144">'String'</span>));</code><code>                                lowpasstarget = <span style="color:#ca7d37">eval</span>(get(handles.lowpasstarget,<span style="color:#dd1144">'String'</span>));</code><code>                                lowstoptarget = <span style="color:#ca7d37">eval</span>(get(handles.lowstoptarget,<span style="color:#dd1144">'String'</span>));</code><code>                                wp = 2*pi*lowpass*1000*(1/3000);</code><code>                                ws = 2*pi*lowstop*1000*(1/3000);</code><code>                                Rp = lowpasstarget;</code><code>                                As = lowstoptarget;</code><code>                                deltaw=ws-wp;          %计算过渡带宽度</code><code>                                N0=ceil(6.6*pi/deltaw); %按汉宁窗计算滤波器长度N0</code><code>                                N=N0+mod(N0+1,2) ;       %为实现FIR类型I偶对称滤波器,应确保N为奇数</code><code>                                wc=(ws+wp)/2;           %截止频率取通阻带频率的平均值</code><code>                                [bd,ad]=fir1(N,wc/pi,hanning(N+1)); </code><code>                                boyvoice = wavread(<span style="color:#dd1144">'D:\Learning Practices\software program\Matlab Program\Course Design\voice file\voice source\czy_boy'</span>,[3000,18000]);</code><code>                                boyvoicefft = fft(boyvoice);</code><code>                                f = filter(bd,ad,boyvoice);</code><code>                                f1 = fft(f);</code><code>                                figure(1);</code><code>                                <span style="color:#ca7d37">set</span>(figure(1),<span style="color:#dd1144">'Menu'</span>,<span style="color:#dd1144">'none'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(1),<span style="color:#dd1144">'NumberTitle'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'Name'</span>,<span style="color:#dd1144">'滤波后的信号的频谱'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(1),<span style="color:#dd1144">'Color'</span>,<span style="color:#dd1144">'w'</span>);</code><code>                                subplot(2,2,1);plot(boyvoice);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'男生滤波前的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,2);plot(20*log10(abs(boyvoicefft)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'男生滤波前的相对幅度谱'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,3);plot(f1);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'男生滤波后的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,4);plot(20*log10(abs(f1)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'男生滤波后的相对幅度谱'</span>);</code><code>                                grid;</code><code>                            end</code><code>                        end</code><code>                        <span style="color:#ca7d37">if</span>(var == 3)</code><code>                            </code><code>                            <span style="color:#ca7d37">if</span>(isempty(str2num(get(handles.bandfilterstop1,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.bandfilterpass1,<span style="color:#dd1144">'String'</span>))) || ...</code><code>                                    isempty(str2num(get(handles.bandfilterpass2,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.bandfilterstop2,<span style="color:#dd1144">'String'</span>))) || ...</code><code>                                    isempty(str2num(get(handles.bandfilterpasstarget,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.bandfilterstoptarget,<span style="color:#dd1144">'String'</span>))))</code><code>                                errordlg(<span style="color:#dd1144">'请正确输入参数'</span>,<span style="color:#dd1144">'提示'</span>);</code><code>                            <span style="color:#ca7d37">else</span></code><code>                                bandfilterstop1 = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterstop1,<span style="color:#dd1144">'String'</span>));</code><code>                                bandfilterpass1 = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterpass1,<span style="color:#dd1144">'String'</span>));</code><code>                                bandfilterpass2 = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterpass2,<span style="color:#dd1144">'String'</span>));</code><code>                                bandfilterstop2 = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterstop2,<span style="color:#dd1144">'String'</span>));</code><code>                                bandfilterpasstarget = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterpasstarget,<span style="color:#dd1144">'String'</span>));</code><code>                                bandfilterstoptarget = <span style="color:#ca7d37">eval</span>(get(handles.bandfilterstoptarget,<span style="color:#dd1144">'String'</span>));</code><code>                                wp1 = 2*pi*bandfilterpass1*1000*(1/8000);wp2 = 2*pi*bandfilterpass2*1000*(1/8000);</code><code>                                ws1 = 2*pi*bandfilterstop1*1000*(1/8000);ws2 = 2*pi*bandfilterstop2*1000*(1/8000); </code><code>                                Rp = bandfilterpasstarget;</code><code>                                As = bandfilterstoptarget;</code><code>                                deltaw = wp1-ws1;</code><code>                                N0 = ceil(11*pi/deltaw);</code><code>                                N = N0+mod(N0+1,2);</code><code>                                wc1 = (ws1+wp1)/2;wc2 = (ws2+wp2)/2;</code><code>                                wc = [wc1 wc2];</code><code>                                [bd,ad]=fir1(N,wc/pi,hanning(N+1));</code><code>                                boyvoice = wavread(<span style="color:#dd1144">'D:\Learning Practices\software program\Matlab Program\Course Design\voice file\voice source\czy_boy'</span>,[3000,18000]);</code><code>                                boyvoicefft = fft(boyvoice);</code><code>                                f = filter(bd,ad,boyvoice);</code><code>                                f1 = fft(f);</code><code>                                figure(2);</code><code>                                <span style="color:#ca7d37">set</span>(figure(2),<span style="color:#dd1144">'Menu'</span>,<span style="color:#dd1144">'none'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(2),<span style="color:#dd1144">'NumberTitle'</span>,<span style="color:#dd1144">'off'</span>,<span style="color:#dd1144">'Name'</span>,<span style="color:#dd1144">'滤波后的信号的频谱'</span>);</code><code>                                <span style="color:#ca7d37">set</span>(figure(2),<span style="color:#dd1144">'Color'</span>,<span style="color:#dd1144">'w'</span>);</code><code>                                subplot(2,2,1);plot(boyvoice);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'男生滤波前的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,2);plot(20*log10(abs(boyvoicefft)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'男生滤波前的相对幅度谱'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,3);plot(f1);              %画出滤波后的时域图</code><code>                                xlabel(<span style="color:#dd1144">'时间'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);</code><code>                                title(<span style="color:#dd1144">'男生滤波后的波形'</span>);</code><code>                                grid;</code><code>                                subplot(2,2,4);plot(20*log10(abs(f1)));</code><code>                                xlabel(<span style="color:#dd1144">'频率'</span>); ylabel(<span style="color:#dd1144">'幅值'</span>);     %加X轴说明 %加Y轴说明</code><code>                                title(<span style="color:#dd1144">'男生滤波后的相对幅度谱'</span>);</code><code>                                grid;</code><code>                            end</code><code>                        end</code><code>                        <span style="color:#ca7d37">if</span>(var == 4)</code><code>                            <span style="color:#ca7d37">if</span>(isempty(str2num(get(handles.highpass,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.highstop,<span style="color:#dd1144">'String'</span>))) || ...</code><code>                                    isempty(str2num(get(handles.highpasstarget,<span style="color:#dd1144">'String'</span>))) || isempty(str2num(get(handles.hi</code></span></span>

3 仿真结果

4 参考文献​

[1] 王一世,数字信号处理,北京理工大学出版社.

[2] 于俊凤,语音信号的识别和转换研究,学位论文,成都理工大学.

[3] 王正林,刘明.精通MATLAB 7[M].北京:电子工业出版社,2006.7

[4] 李国勇.计算机仿真技术与CAD—基于MATLAB的控制系统 电子工业出版社

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值