matlab中窗函数的使用(二)
来源:互联网 发布:类似于易企秀的软件 编辑:程序博客网 时间:2024/06/04 19:53
一、摘要
这里主要是对窗函数的简单应用做些介绍,是在已知滤波器阶数的情况下,设计滤波器。多数情况下,在不能直接知道滤波器阶数的时候,可参考“http://www.cnblogs.com/sunev/archive/2011/11/23/2260579.html”。
二、MATLAB中的窗函数
(1)矩形窗(Rectangle Window) 调用格式:w=boxcar(n),根据长度 n 产生一个矩形窗 w。
(2)三角窗(Triangular Window) 调用格式:w=triang(n),根据长度 n 产生一个三角窗 w。
(3)汉宁窗(Hanning Window) 调用格式:w=hanning(n),根据长度 n 产生一个汉宁窗 w。
(4)海明窗(Hamming Window) 调用格式:w=hamming(n),根据长度 n 产生一个海明窗 w。
(5)布拉克曼窗(Blackman Window) 调用格式:w=blackman(n),根据长度 n 产生一个布拉克曼窗 w。
(6)恺撒窗(Kaiser Window) 调用格式:w=kaiser(n,beta),根据长度 n 和影响窗函数旁瓣的β参数产生一个恺撒窗w。
三、基于窗函数的 FIR 滤波器设计
利用 MATLAB 提供的函数 fir1来实现
调用格式:fir1(n,Wn,’ftype’,Window),n 为阶数、Wn 是截止频率(如果输入是形如[W1 W2]的矢量时,本函数将设计带通/带阻滤波器。
[例]设计一个长度为 8 截止频率为0.4π的线性相位 FIR 滤波器。
用矩形窗:
Window=boxcar(8);
b=fir1(7,0.4,Window);
freqz(b,1)
用blackman窗:
Window=blackman(8);
b=fir1(7,0.4,Window);
freqz(b,1)
[例] 设计线性相位带通滤波器,其长度N=15,上下边带截止频率分别为W1= 0.3π,W2=0.5π
Window=blackman(16);
b=fir1(15,[0.3 0.5],Window);
freqz(b,1)
- %{
- ---------------------------------------------------------------------------
- File:Matlab的窗函数,矩形窗
- 功能:降低旁瓣水平
- 参数:
- ---------------------------------------------------------------------------
- %}
- %N =51
- %==========================================================================
- %求矩形窗的频率响应图
- %==========================================================================
- W = linspace(-pi,pi,4096);
- wn0 = rectwin(51) %矩形窗函数
- %20*log10(abs(WN))
- [h1,w0] = freqz(wn0,1,W);
- %subplotfigure(5,1,1);
- subplot(511);
- plot(w0/pi,20*log10(abs(h1/max(h1))));
- axis([-1 1 -100 0]);
- xlabel('归一化频率 /\pi');
- ylabel('20log_{10}|W(e^{j\omega})| /dB');
- title('矩形窗的傅里叶变换');
- set(gca,'YTick',[-100 -80 -60 -40 -20 0])
- set(gca,'XTick',[-1 :0.2: 1])
- %set(gca,'XAxisLocation','top');%设置X轴在上方
- %set(gca,'XAxisLocation','buttom');%设置X轴在下方
- set(gca,'YAxisLocation','left'); %设置Y轴在左方
- text(1,-124,'\pi');%gtext('\pi');
- %==========================================================================
- %求三角窗的频率响应图
- %==========================================================================
- wn1 = bartlett(51)
- [h1,w1] = freqz(wn1,1,W);
- %figure(5,1,2);
- subplot(512);
- plot(w1/pi,20*log10(abs(h1/max(h1))));
- %plot(w/pi,20*log10(h1/max(h1))); % 警告: 复数 X 和/或 Y 参数的虚部已忽略
- axis([-1 1 -100 0]);
- xlabel('归一化频率 /\pi');
- ylabel('20log_{10}|W(e^{j\omega})| /dB');
- title('三角窗的傅里叶变换');
- set(gca,'YTick',[-100 -80 -60 -40 -20 0])
- set(gca,'XTick',[-1 :0.2: 1])
- %set(gca,'XAxisLocation','top');%设置X轴在上方
- set(gca,'YAxisLocation','left'); %设置Y轴在左方
- text(1,-124,'\pi');%gtext('\pi');
- %==========================================================================
- %hanning 窗的频率响应图
- %==========================================================================
- wn2 = hanning(51)
- [h1,w2] = freqz(wn2,1,W);
- %figure(5,1,3);
- subplot(513);
- plot(w2/pi,20*log10(abs(h1/max(h1))));
- axis([-1 1 -100 0]);
- xlabel('归一化频率 /\pi');
- ylabel('20log_{10}|W(e^{j\omega})| /dB');
- title('Hanning的傅里叶变换');
- set(gca,'YTick',[-100 -80 -60 -40 -20 0]);
- set(gca,'XTick',[-1 :0.2: 1]);
- %set(gca,'XAxisLocation','top');%设置X轴在上方
- set(gca,'YAxisLocation','left'); %设置Y轴在左方
- text(1,-124,'\pi');%gtext('\pi');
- %==========================================================================
- %hamming 窗的频率响应图
- %==========================================================================
- wn3 = hamming(51)
- [h1,w3] = freqz(wn3,1,W); %离散系统频响特性的函数freqz()
- %figure(5,1,4);
- subplot(514);
- plot(w3/pi,20*log10(abs(h1/max(h1))));
- axis([-1 1 -100 0]);
- xlabel('归一化频率 /\pi');
- ylabel('20log_{10}|W(e^{j\omega})| /dB');
- title('Hamming的傅里叶变换');
- set(gca,'YTick',[-100 -80 -60 -40 -20 0])
- set(gca,'XTick',[-1 :0.2: 1])
- %set(gca,'XAxisLocation','top');%设置X轴在上方
- set(gca,'YAxisLocation','left'); %设置Y轴在左方
- text(1,-124,'\pi');%gtext('\pi');
- %==========================================================================
- %Blackman wn1 = blackman(51)
- %==========================================================================
- wn4 = blackman(51)
- [h1,w4] = freqz(wn4,1,W);
- %figure(5,1,5);
- subplot(515);
- plot(w4/pi,20*log10(abs(h1/max(h1))));
- axis([-1 1 -100 0]);
- xlabel('归一化频率 /\pi');
- ylabel('20log_{10}|W(e^{j\omega})| /dB');
- title('Blackman的傅里叶变换');
- set(gca,'YTick',[-100 -80 -60 -40 -20 0])
- set(gca,'XTick',[-1 :0.2: 1])
- %set(gca,'XAxisLocation','top');%设置X轴在上方
- set(gca,'YAxisLocation','left'); %设置Y轴在左方
- text(1,-124,'\pi');%gtext('\pi');
- matlab中窗函数的使用(二)
- Matlab中窗函数的简单使用
- matlab中窗函数的使用(一)
- Matlab中窗函数的简单使用
- matlab中exp()函数的使用
- 【matlab】freqz函数的使用(二)
- Matlab中函数使用
- Matlab中bwlabel函数的使用
- Matlab 中 residuez函数的使用
- MATLAB 中 filter 函数的使用
- Matlab中save函数的使用
- matlab中strcmp函数的使用
- matlab中find函数的使用
- MATLAB中classify函数的使用
- matlab中CRC的函数使用
- Matlab中uigetfile( ) & iscell() 函数的使用
- Matlab中一些基本函数的使用
- Matlab 中prod函数的使用
- jzoj P1027【GDOI2005】电路稳定性
- 将博客搬至CSDN
- 10款优秀组件类小程序开发demo推荐
- javascript 第六篇(入门篇)
- 螺旋方阵
- matlab中窗函数的使用(二)
- 界面编写
- java创建删除文件
- 1030. 完美数列(25)-PAT乙级
- js输入输出问题
- Java实现遍历、排序、查找算法及简要说明
- Linux的消息队列,Windows的邮件槽,使用有感
- 数据库大表分割问题
- nodejs学习笔记