logo资料库

MATLAB滤波器.docx

第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
资料共5页,全文预览结束
滤波器实验 实验报告 一.实验目的 1. 进一步熟悉 MATLAB 工具箱的使用; 2. 巩固数字信号的处理方法; 3. 掌握数字滤波器的设计; 二.实验内容 选择一个信号,要求:该信号至少包括 2 个或 2 个以上频段的信号; (1) 分析 2 个不同频段信号的频谱特征; (2) 设计滤波器,提取某个频段的信号,滤除另一个频段的信号。要求给出滤波器 的设计指标,以实现滤波器的实际技术指标,分析设计指标和实际指标之间的 差别; (3) 给出滤波器提取某个频段的效果; 三.实验原理 MATLAB 有强大的数字信号处理能力,对信号进行采样,滤波后得某一频段的信号, 四.实验步骤 1. 新建脚本,合成一个信号 x,该信号由 50Hz,150Hz 和 600Hz 的正弦波合成;采样 频率为 2000Hz; fs=2000; t=(1:1000)/fs; x=10*cos(2*pi*50*t)+cos(2*pi*150*t)+5*cos(2*pi*600*t); 2. 对 x 做快速傅里叶变换,得频谱图; 3. 设计低通,带通,高通滤波器,分别得到 50Hz,150Hz,600Hz 的信号;MATLAB 中的滤波器由函数 filter()来实现; 4. 打开 MATLAB,输入<
图 1 编辑界面 5. 保存界面,对控件进行编辑; 代码如下: 合成信号,并给出频谱图,同时发出声音; handle to pushbutton1 (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) (1)function pushbutton1_Callback(hObject, eventdata, handles) % hObject % eventdata % handles fs=2000; t=(1:1000)/fs; x=10*cos(2*pi*30*t)+6*cos(2*pi*150*t)+5*cos(2*pi*600*t); sound(x,fs); L=length(x); N=2^(nextpow2(L)); Hw=fft(x,N); axes(handles.axes1); plot((0:N-1)*fs/L,abs(Hw));% 查看信号频谱 grid on; title('滤波前信号频谱图'); xlabel('频率/Hz'); ylabel('振幅|H(e^jw)|'); 低通滤波,并给出频谱图,同时发出声音; handle to pushbutton2 (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) (2)function pushbutton2_Callback(hObject, eventdata, handles) % hObject % eventdata % handles %% x_1=cos(2*pi*30*t) fs=2000; t=(1:1000)/fs; x=10*cos(2*pi*50*t)+6*cos(2*pi*150*t)+5*cos(2*pi*600*t); Ap=1; As=60;% 定义通带及阻带衰减 dev=[(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量 mags=[1,0];% 低通 fcuts=[60,100];% 边界频率 [N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算 FIR 滤波器阶数 hh1=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR 滤波器设计 x_1=filter(hh1,1,x);% 滤波 x_1(1:ceil(N/2))=[];% 群延时 N/2,删除无用信号部分 L=length(x_1); N=2^(nextpow2(L)); Hw_1=fft(x_1,N); sound(x_1,fs); axes(handles.axes1);
a=((0:N-1)*fs/L-0.5*N*fs/L)/10; plot((0:N-1)*fs/L,abs(Hw_1));% 查看信号频谱 grid on; title('滤波后信号 x_1 频谱图'); xlabel('频率/Hz'); ylabel('振幅|H(e^jw)|'); 带通,并给出频谱图,同时发出声音; handle to pushbutton3 (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) (3)function pushbutton3_Callback(hObject, eventdata, handles) % hObject % eventdata % handles %% x_2=cos(2*pi*150*t) fs=2000; t=(1:1000)/fs; x=10*cos(2*pi*50*t)+6*cos(2*pi*150*t)+5*cos(2*pi*600*t); Ap=1; As=60;% 定义通带及阻带衰减 dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1),10^(-As/20)];% 计算偏移量 mags=[0,1,0];% 带通 fcuts=[80,120,180,220];% 边界频率 [N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算 FIR 滤波器阶数 hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR 滤波器设计 x_2=filter(hh2,1,x);% 滤波 x_2(1:ceil(N/2))=[];% 群延时 N/2,删除无用信号部分 L=length(x_2);N=2^(nextpow2(L)); Hw_2=fft(x_2,N); sound(x_2,fs); axes(handles.axes1); plot((0:N-1)*fs/L,abs(Hw_2));% 查看信号频谱 grid on; title('滤波后信号 x_2 频谱图'); xlabel('频率/Hz'); ylabel('振幅|H(e^jw)|'); 高通,并给出频谱图,同时发出声音; handle to pushbutton4 (see GCBO) reserved - to be defined in a future version of MATLAB structure with handles and user data (see GUIDATA) (4)function pushbutton4_Callback(hObject, eventdata, handles) % hObject % eventdata % handles %% x_3=5*cos(2*pi*600*t) fs=2000; t=(1:1000)/fs; x=10*cos(2*pi*50*t)+6*cos(2*pi*150*t)+5*cos(2*pi*600*t); Ap=1; As=60;% 定义通带及阻带衰减
dev=[10^(-As/20),(10^(Ap/20)-1)/(10^(Ap/20)+1)];% 计算偏移量 mags=[0,1];% 高通 fcuts=[500,550];% 边界频率 [N,Wn,beta,ftype]=kaiserord(fcuts,mags,dev,fs);% 估算 FIR 滤波器阶数 hh2=fir1(N,Wn,ftype,kaiser(N+1,beta));% FIR 滤波器设计 x_3=filter(hh2,1,x);% 滤波 x_3(1:ceil(N/2))=[];% 群延时 N/2,删除无用信号部分 L=length(x_3);N=2^(nextpow2(L)); Hw_3=fft(x_3,N); sound(x_3,fs); axes(handles.axes1); plot((0:N-1)*fs/L,abs(Hw_3));% 查看信号频谱 grid on; title('滤波后信号 x_3 频谱图'); xlabel('频率/Hz'); ylabel('振幅|H(e^jw)|'); 6. 保存运行。 五.实验结果 1. 运行后的界面如图 2 所示; 图 2 GUI 界面 分别点击四个按钮,得频谱图如图 3; 单击“原始”按键,听到的声音是混合音,单击“低通”“带通”“高通”,听到的声 音会依次变的尖细。由谱图可知,由 MATLAB 的 ffx()函数绘制的幅度谱是关于奈奎 斯特频率对称的,本实验中采样频率为 2000Hz,奈奎斯特频率为 1000Hz,所以得到 的频谱都是关于 1000Hz 对称的两条谱线。
原始信号谱图 50Hz 谱图 150Hz 谱图 600HZ 谱图 图 3 滤波结果 2.滤波器指标比较
分享到:
收藏