代码:

%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
%% Output Info about this m-file
fprintf('\n***********************************************************\n');
fprintf(' <DSP using MATLAB> Problem 7.38 \n\n'); banner();
%% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ % bandpass, PM method
ws1 = 0.2*pi; wp1 = 0.35*pi; wp2 = 0.55*pi; ws2 = 0.75*pi;
Rp = 0.25; As = 40;
[delta1, delta2] = db2delta(Rp, As)
deltaH = max(delta1,delta2); deltaL = min(delta1,delta2); f = [ws1, wp1, wp2, ws2]/pi; m = [0, 1, 0]; delta = [delta2, delta1, delta2]; [N, f0, m0, weights] = firpmord(f, m, delta);
fprintf('\n-------------------------------------------\n');
fprintf('\n Results by firpmord function:\n');
N
%f0
%m0
%weights
fprintf('\n-------------------------------------------\n'); weights = [delta1/delta2 1 delta1/delta2] f = [ 0 ws1 wp1 wp2 ws2 pi]/pi;
m = [ 0 0 1 1 0 0]; h = firpm(N, f, m, weights);
M = N + 1
[db, mag, pha, grd, w] = freqz_m(h, [1]);
delta_w = 2*pi/1000;
ws1i = floor(ws1/delta_w)+1; wp1i = floor(wp1/delta_w)+1;
ws2i = floor(ws2/delta_w)+1; wp2i = floor(wp2/delta_w)+1; Asd = -max(db(1:1:ws1i)) h = firpm(N+2, f, m, weights);
M = N + 3
[db, mag, pha, grd, w] = freqz_m(h, [1]);
delta_w = 2*pi/1000;
ws1i = floor(ws1/delta_w)+1; wp1i = floor(wp1/delta_w)+1;
ws2i = floor(ws2/delta_w)+1; wp2i = floor(wp2/delta_w)+1; Asd = -max(db(1:1:ws1i)) %[Hr, ww, a, L] = Hr_Type1(h);
[Hr,omega,P,L] = ampl_res(h);
l = 0:M-1; delta_w = 2*pi/1000; sp_edge1 = ws1/delta_w+1; sp_edge2 = ws2/delta_w+1;
%% -------------------------------------------------
%% Plot
%% ------------------------------------------------- figure('NumberTitle', 'off', 'Name', 'Problem 7.38')
set(gcf,'Color','white'); subplot(2,2,1); stem(l, h); axis([-1, M, -0.4, 0.45]); grid on;
xlabel('n'); ylabel('h(n)'); title('Actual Impulse Response, M=27');
set(gca,'XTickMode','manual','XTick',[0,(M-1)/2,M-1]);
set(gca,'YTickMode','manual','YTick',[-0.4:0.1:0.4]); subplot(2,2,2); plot(w/pi, db); axis([0, 1, -80, 10]); grid on;
xlabel('frequency in \pi units'); ylabel('Decibels'); title('Magnitude Response in dB ');
set(gca,'XTickMode','manual','XTick',f)
set(gca,'YTickMode','manual','YTick',[-60,-40,0]);
set(gca,'YTickLabelMode','manual','YTickLabels',['60';'40';' 0']); subplot(2,2,3); plot(omega/pi, Hr); axis([0, 1, -0.2, 1.2]); grid on;
xlabel('frequency in \pi nuits'); ylabel('Hr(\omega)'); title('Amplitude Response');
set(gca,'XTickMode','manual','XTick',f)
set(gca,'YTickMode','manual','YTick',[0,1]); subplot(2,2,4); axis([0, 1, -deltaH, deltaH]);
sb1w = omega(1:1:ws1i)/pi; sb1e = Hr(1:1:ws1i)-m(1); %sb1e = (Hr(1:1:ws1i)-m(1))*weights(1);
pbw = omega(wp1i:wp2i)/pi; pbe = Hr(wp1i:wp2i)-m(3); %pbe = (Hr(wp1i:wp2i)-m(3))*weights(2);
sb2w = omega(ws2i:501)/pi; sb2e = Hr(ws2i:501)-m(5); %sb2e = (Hr(ws2i:501)-m(5))*weights(3); plot(sb1w,sb1e,pbw,pbe,sb2w,sb2e); grid on; % error %axis([0, 1, -deltaL-0.02, deltaL+0.02]); grid on;
xlabel('frequency in \pi units'); ylabel('Hr(\omega)'); title('Error Response'); %title('Weighted Error'); set(gca,'XTickMode','manual','XTick',f)
set(gca,'YTickMode','manual','YTick',[-deltaH, 0, deltaH]);
%set(gca,'XGrid','on','YGrid','on') figure('NumberTitle', 'off', 'Name', 'Problem 7.38 AmpRes of h(n), Parks-McClellan Method')
set(gcf,'Color','white'); plot(omega/pi, Hr); grid on; %axis([0 1 -100 10]);
xlabel('frequency in \pi units'); ylabel('Hr(\omega)'); title('Amplitude Response');
set(gca,'YTickMode','manual','YTick',[-delta2,delta2, 1 - delta1, 1 + delta1]);
set(gca,'XTickMode','manual','XTick',f);

  运行结果:

运用Parks-McClellen算法,滤波器长度M=27,比较合适

脉冲响应、幅度谱和误差函数

振幅谱

下面是P7.9的结果,可看出,P-M法得到的长度(M=27)比窗函数(M=43)得到的小得多。

第7章终于弄完了,内心小欢喜一下,放一张田地的照片放松放松,明天开始第8章!

最新文章

  1. WCF学习系列一【WCF Interview Questions-Part 1 翻译系列】
  2. Redhat/Ubuntu/Windows下安装Docker
  3. golang调用c++的dll库文件
  4. Mybtis框架总结(一)
  5. 每天一个linux命令(51):lsof命令
  6. 带你走进rsync的世界
  7. Mysql如何清空数据库的所有表数据
  8. android-详解Android 6.0运行时权限
  9. Auty自动化测试框架第一篇——生成执行列表
  10. SVG 动画实现弹性的页面元素效果
  11. Mifare 0简介
  12. iOS判断当前控制器是否正在显示
  13. MySQL简单查询
  14. Android 网络图片加载之cude 框架
  15. 201771010126 王燕《面向对象程序设计(java)》第十一周学习总结
  16. App后台Keynote
  17. myeclipse从SVN检出项目报错
  18. 校正PHP服务器时间不准的问题
  19. IDEA上传代码到码云
  20. Solr学习笔记(5)—— Spring Data Solr入门

热门文章

  1. JDBC_数据库连接池DRUID
  2. 什么是Java中的自动拆装箱
  3. 2018-9-29-Roslyn-通过-Nuget-引用源代码-在-VS-智能提示正常但是无法编译
  4. 7_API调用
  5. 利用VS 性能探查器 解决代码性能不高问题
  6. div+css对网页进行布局
  7. 8-5接口测试用例设计与编写2 rest-assured
  8. thinkphp action参数绑定
  9. 线段树逆序对(偏序)——cf1187D好题!
  10. golang中time包的使用