《DSP using MATLAB》Problem 8.11
代码:
- %% ------------------------------------------------------------------------
- %% Output Info about this m-file
- fprintf('\n***********************************************************\n');
- fprintf(' <DSP using MATLAB> Problem 8.11 \n\n');
- banner();
- %% ------------------------------------------------------------------------
- %d = 0.10
- %d = 0.05
- d = 0.01
- a1 = (2-d)/(1+d);
- a2 = (2-d)*(1-d)/((2+d)*(1+d));
- % digital IIR 2nd-order allpass filter
- b = [a2 a1 1]
- a = [1 a1 a2]
- figure('NumberTitle', 'off', 'Name', 'Problem 8.11 Pole-Zero Plot')
- set(gcf,'Color','white');
- zplane(b,a);
- title(sprintf('Pole-Zero Plot, d=%.2f',d));
- %pzplotz(b,a);
- [db, mag, pha, grd, w] = freqz_m(b, a);
- % ---------------------------------------------------------------------
- % Choose the gain parameter of the filter, maximum gain is equal to 1
- % ---------------------------------------------------------------------
- gain1=max(mag) % with poles
- K = 1
- [db, mag, pha, grd, w] = freqz_m(K*b, a);
- figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR allpass filter')
- set(gcf,'Color','white');
- subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]);
- set(gca,'YTickMode','manual','YTick',[-60,-30,0])
- set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
- set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
- xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
- subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]);
- xlabel('frequency in \pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
- set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
- set(gca,'YTickMode','manual','YTick',[0,1.0]);
- subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]);
- xlabel('frequency in \pi units'); ylabel('Rad'); title('Phase Response in Radians');
- subplot(2,2,4); plot(w/pi, grd*pi/180); grid on; %axis([0 1 -100 10]);
- xlabel('frequency in \pi units'); ylabel('Rad'); title('Group Delay');
- set(gca,'XTickMode','manual','XTick',[0,0.25,0.5,1,1.5,1.75,2]);
- %set(gca,'YTickMode','manual','YTick',[0,1.0]);
- figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR allpass filter')
- set(gcf,'Color','white');
- plot(w/pi, -pha/w); grid on; %axis([0 1 -100 10]);
- xlabel('frequency in \pi units'); ylabel('Rad'); title('Phase Delay in samples');
- % Impulse Response
- fprintf('\n----------------------------------');
- fprintf('\nPartial fraction expansion method: \n');
- [R, p, c] = residuez(K*b,a)
- MR = (abs(R))' % Residue Magnitude
- AR = (angle(R))'/pi % Residue angles in pi units
- Mp = (abs(p))' % pole Magnitude
- Ap = (angle(p))'/pi % pole angles in pi units
- [delta, n] = impseq(0,0,20);
- h_chk = filter(K*b,a,delta); % check sequences
- % ------------------------------------------------------------------------------------------------
- % gain parameter K
- % ------------------------------------------------------------------------------------------------
- %h = 0.2202 * ((-0.9385) .^ n) + (-0.8308) * ((-0.7887) .^ n) + 1.3509 * delta; %d=0.1
- %h = 0.1099 * ((-0.9688) .^ n) + (-0.4112) * ((-0.8884) .^ n) + 1.1619 * delta; %d=0.05
- h = 0.0220 * ((-0.9937) .^ n) + (-0.0820) * ((-0.9766) .^ n) + 1.0305 * delta; %d=0.01
- % ------------------------------------------------------------------------------------------------
- figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR allpass filter, h(n) by filter and Inv-Z ')
- set(gcf,'Color','white');
- subplot(2,1,1); stem(n, h_chk); grid on; %axis([0 2 -60 10]);
- xlabel('n'); ylabel('h\_chk'); title('Impulse Response sequences by filter');
- subplot(2,1,2); stem(n, h); grid on; %axis([0 1 -100 10]);
- xlabel('n'); ylabel('h'); title('Impulse Response sequences by Inv-Z');
- [db, mag, pha, grd, w] = freqz_m(h, [1]);
- figure('NumberTitle', 'off', 'Name', 'Problem 8.11 IIR filter, h(n) by Inv-Z ')
- set(gcf,'Color','white');
- subplot(2,2,1); plot(w/pi, db); grid on; axis([0 2 -60 10]);
- set(gca,'YTickMode','manual','YTick',[-60,-30,0])
- set(gca,'YTickLabelMode','manual','YTickLabel',['60';'30';' 0']);
- set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
- xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB');
- subplot(2,2,3); plot(w/pi, mag); grid on; %axis([0 1 -100 10]);
- xlabel('frequency in \pi units'); ylabel('Absolute'); title('Magnitude Response in absolute');
- set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
- set(gca,'YTickMode','manual','YTick',[0,1.0]);
- subplot(2,2,2); plot(w/pi, pha); grid on; %axis([0 1 -100 10]);
- xlabel('frequency in \pi units'); ylabel('Rad'); title('Phase Response in Radians');
- subplot(2,2,4); plot(w/pi, grd*pi/180); grid on; %axis([0 1 -100 10]);
- xlabel('frequency in \pi units'); ylabel('Rad'); title('Group Delay');
- set(gca,'XTickMode','manual','XTick',[0,0.25,1,1.75,2]);
- %set(gca,'YTickMode','manual','YTick',[0,1.0]);
运行结果:
这里放d=0.1的运行结果。
二阶全通滤波器的留数、极点
系统零极点图,可以看出,两个零点都在单位圆外,幅角为π
方法一,利用系统函数直接形式,将脉冲序列做输入,得到脉冲响应h,得到系统幅度谱、相位谱和群延迟,如下图
方法二,将二阶全通系统函数部分分式展开,然后查表求逆z变换,得到脉冲响应h_chk
幅度谱、相位谱和群延迟,可以看到,ω=π时,幅度有衰减
可见,两种方法得到的脉冲响应h有区别,我们将各自前21个元素列出来,方框处二者稍有区别。
但,为何有区别,没搞懂,欢迎各位博友不吝赐教。
《DSP using MATLAB》Problem 8.11的更多相关文章
- 《DSP using MATLAB》Problem 7.11
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- 《DSP using MATLAB》Problem 6.11
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- 《DSP using MATLAB》Problem 5.11
代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...
- 《DSP using MATLAB》Problem 4.11
代码: %% ---------------------------------------------------------------------------- %% Output Info a ...
- 《DSP using MATLAB》Problem 7.16
使用一种固定窗函数法设计带通滤波器. 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- 《DSP using MATLAB》Problem 7.6
代码: 子函数ampl_res function [Hr,w,P,L] = ampl_res(h); % % function [Hr,w,P,L] = Ampl_res(h) % Computes ...
- 《DSP using MATLAB》Problem 5.21
证明: 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- 《DSP using MATLAB》Problem 5.20
窗外的知了叽叽喳喳叫个不停,屋里温度应该有30°,伏天的日子难过啊! 频率域的方法来计算圆周移位 代码: 子函数的 function y = cirshftf(x, m, N) %% -------- ...
- 《DSP using MATLAB》Problem 5.14
说明:这两个小题的数学证明过程都不会,欢迎博友赐教. 直接上代码: %% +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
随机推荐
- Maven IntelliJ IDEA设置
参考:博客地址: https://blog.csdn.net/huo920/article/details/82082403 Maven常用配置 在配置之前请将JDK安装好. 1. 环境变量配置 添加 ...
- ES6 学习 -- Class继承
(1)如何继承Class可以通过extends关键字实现继承,如下:class Father { } class Child extends Father { }// 这里子类Child继承父类Fat ...
- 【学术篇】SPOJ QTREE 树链剖分
发现链剖这东西好久不写想一遍写对是有难度的.. 果然是熟能生巧吧.. WC的dalao们都回来了 然后就用WC的毒瘤题荼毒了我们一波, 本来想打个T1 44分暴力 然后好像是特判写挂了还是怎么的就只能 ...
- WPF 新突破
刘琦告诉我 需要改变哪个属性哪个属性就需要实现InotifyPropertyChanged 董秀伟告诉我 界面改变会立即传输到属性上,并不需要实现InotifyPropertyChanged,只有 ...
- 配置类一@CrossOrigin
@CrossOrigin是用来处理跨域请求的注解 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制. 所谓同源是指,域名,协议,端口 ...
- js面试总结3
异步和单线程 题目: 1.同步和异步的区别? 2.一个关于setTimeout的笔试题. 3.前段使用异步的场景有哪些? 什么是异步? console.log(100) setTimeout(func ...
- duilib库分析1.消息流程分析
看下CWindowWnd类与CPaintManagerUI类是咋进行消息分发的吧. 1. 先看下CPaintManagerUI类的MessageLoop函数: void CPaintManagerUI ...
- LUOGU P2261 [CQOI2007]余数求和(数论分块)
传送门 解题思路 数论分块,首先将 \(k\%a\) 变成 \(k-a*\left\lfloor\dfrac{k}{a}\right\rfloor\)形式,那么\(\sum\limits_{i=1}^ ...
- day 69 Django基础五之django模型层(一)单表操作
Django基础五之django模型层(一)单表操作 本节目录 一 ORM简介 二 单表操作 三 章节作业 四 xxx 一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现 ...
- 万恶之源-python介绍
PATH OF PYTHON (生命短暂,我要学pythonヾ(◍°∇°◍)ノ゙) 一.Python介绍: 简史:Python诞生于1989年的圣诞节, 创始人为Guido van Rossum, 又 ...