代码:

function [wpLP, wsLP, alpha] = bs2lpfre(wpbs, wsbs)
% Band-edge frequency conversion from bandstop to lowpass digital filter
% -------------------------------------------------------------------------
% [wpLP, wsLP, alpha] = bs2lpfre(wpbs, wsbs)
% wpLP = passband edge for the lowpass digital prototype
% wsLP = stopband edge for the lowpass digital prototype
% alpha = lowpass to bandstop transformation parameter
% wpbs = passband edge frequency array [wp_lower, wp_upper] for the bandstop
% wsbs = stopband edge frequency array [ws_lower, ws_upper] for the bandstop
%
% % Determine the digital lowpass cutoff frequencies:
wpLP = 0.2*pi;
K = tan((wpbs(2)-wpbs(1))/2)*tan(wpLP/2);
beta = cos((wpbs(2)+wpbs(1))/2)/cos((wpbs(2)-wpbs(1))/2);
alpha1 = -2*beta*K/(K+1);
alpha2 = (1-K)/(K+1); alpha = [alpha1, alpha2]; wsLP = -angle((exp(-2*j*wsbs(1))+alpha1*exp(-j*wsbs(1))+alpha2)/(alpha2*exp(-2*j*wsbs(1))+alpha1*exp(-j*wsbs(1))+1))
wsLP = angle((exp(-2*j*wsbs(2))+alpha1*exp(-j*wsbs(2))+alpha2)/(alpha2*exp(-2*j*wsbs(2))+alpha1*exp(-j*wsbs(2))+1))

  

function [b, a] = cheb1bsf(wpbs, wsbs, Rp, As)
% IIR bandstop Filter Design using Chebyshev-1 Prototype
% -----------------------------------------------------------------------
% [b, a] = cheb1bsf(wp, ws, Rp, As);
% b = numerator polynomial coefficients of bandstop filter, Direct form
% a = denominator polynomial coefficients of bandstop filter, Direct form
% wp = Passband edge frequency array [wp_lower, wp_upper] in radians;
% ws = Stopband edge frequency array [ws_lower, ws_upper] in radians;
% Rp = Passband ripple in +dB; Rp > 0
% As = Stopband attenuation in +dB; As > 0
%
%
% Determine the digital lowpass cutoff frequencies:
wpLP = 0.2*pi;
K = tan((wpbs(2)-wpbs(1))/2)*tan(wpLP/2);
beta = cos((wpbs(2)+wpbs(1))/2)/cos((wpbs(2)-wpbs(1))/2);
alpha1 = -2*beta*K/(K+1);
alpha2 = (1-K)/(K+1); alpha = [alpha1, alpha2]; wsLP = -angle((exp(-2*j*wsbs(1))+alpha1*exp(-j*wsbs(1))+alpha2)/(alpha2*exp(-2*j*wsbs(1))+alpha1*exp(-j*wsbs(1))+1))
wsLP = angle((exp(-2*j*wsbs(2))+alpha1*exp(-j*wsbs(2))+alpha2)/(alpha2*exp(-2*j*wsbs(2))+alpha1*exp(-j*wsbs(2))+1)) % Compute Analog Lowpass Prototype Specifications: Inverse Mapping for frequencies
T = 1; Fs = 1/T; % set T = 1
OmegaP = (2/T)*tan(wpLP/2); % Prewarp(Cutoff) prototype passband freq
OmegaS = (2/T)*tan(wsLP/2); % Prewarp(cutoff) prototype stopband freq % Design Analog Chebyshev-1 Prototype Lowpass Filter:
[cs, ds] = afd_chb1(OmegaP, OmegaS, Rp, As); % Bilinear transformation to obtain digital lowpass:
[blp, alp] = bilinear(cs, ds, Fs); % Transform digital lowpass into bandstop filter
Nz = [alpha2, alpha1, 1]; Dz = [1, alpha1, alpha2];
[b, a] = zmapping(blp, alp, Nz, Dz);

  

%% ------------------------------------------------------------------------
%% Output Info about this m-file
fprintf('\n***********************************************************\n');
fprintf(' <DSP using MATLAB> Problem 8.40.2 \n\n'); banner();
%% ------------------------------------------------------------------------ % Digital Filter Specifications: Chebyshev-1 bandstop
wsbs = [0.35*pi 0.65*pi]; % digital stopband freq in rad
wpbs = [0.25*pi 0.75*pi]; % digital passband freq in rad delta1 = 0.05; % passband tolerance, absolute specs
delta2 = 0.01; % stopband tolerance, absolute specs Rp = -20 * log10( (1-delta1)/(1+delta1)) % passband ripple in dB
As = -20 * log10( delta2 / (1+delta1)) % stopband attenuation in dB Ripple = 10 ^ (-Rp/20) % passband ripple in absolute
Attn = 10 ^ (-As/20) % stopband attenuation in absolute % --------------------------------------------------------
% method 1: cheb1bsf function
% --------------------------------------------------------
fprintf('\n*******Digital bandstop, Coefficients of DIRECT-form***********\n');
[bbs, abs] = cheb1bsf(wpbs, wsbs, Rp, As)
[C, B, A] = dir2cas(bbs, abs) % Calculation of Frequency Response: [dbbs, magbs, phabs, grdbs, wwbs] = freqz_m(bbs, abs); % ---------------------------------------------------------------
% find Actual Passband Ripple and Min Stopband attenuation
% ---------------------------------------------------------------
delta_w = 2*pi/1000;
Rp_bs = -(min(dbbs( 1:1:ceil(wpbs(1)/delta_w+1) ))); % Actual Passband Ripple fprintf('\nActual Passband Ripple is %.4f dB.\n', Rp_bs); As_bs = -round(max(dbbs(ceil(wsbs(1)/delta_w)+1:1:ceil(wsbs(2)/delta_w)+1))); % Min Stopband attenuation
fprintf('\nMin Stopband attenuation is %.4f dB.\n\n', As_bs); %% -----------------------------------------------------------------
%% Plot
%% ----------------------------------------------------------------- figure('NumberTitle', 'off', 'Name', 'Problem 8.40.2 Chebyshev-1 bs by cheb1bsf function')
set(gcf,'Color','white');
M = 1; % Omega max subplot(2,2,1); plot(wwbs/pi, magbs); axis([0, M, 0, 1.2]); grid on;
xlabel('Digital frequency in \pi units'); ylabel('|H|'); title('Magnitude Response');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.01, 0.9048, 1]); subplot(2,2,2); plot(wwbs/pi, dbbs); axis([0, M, -100, 2]); grid on;
xlabel('Digital frequency in \pi units'); ylabel('Decibels'); title('Magnitude in dB');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [-80, -44, -1, 0]);
set(gca,'YTickLabelMode','manual','YTickLabel',['80'; '44';'1 ';' 0']); subplot(2,2,3); plot(wwbs/pi, phabs/pi); axis([0, M, -1.1, 1.1]); grid on;
xlabel('Digital frequency in \pi nuits'); ylabel('radians in \pi units'); title('Phase Response');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [-1:0.5:1]); subplot(2,2,4); plot(wwbs/pi, grdbs); axis([0, M, 0, 30]); grid on;
xlabel('Digital frequency in \pi units'); ylabel('Samples'); title('Group Delay');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [0:10:30]); figure('NumberTitle', 'off', 'Name', 'Problem 8.40.2 Pole-Zero Plot')
set(gcf,'Color','white');
zplane(bbs, abs);
title(sprintf('Pole-Zero Plot'));
%pzplotz(b,a); % --------------------------------------------------------------------------------
% cheby1 function
% --------------------------------------------------------------------------------
% Calculation of Chebyshev-1 filter parameters:
[N, wn] = cheb1ord(wpbs/pi, wsbs/pi, Rp, As); fprintf('\n ********* Chebyshev-1 Digital Bandstop Filter Order is = %3.0f \n', 2*N) % Digital Chebyshev-1 bandstop Filter Design:
[bbs, abs] = cheby1(N, Rp, wn, 'stop'); [C, B, A] = dir2cas(bbs, abs) % Calculation of Frequency Response:
[dbbs, magbs, phabs, grdbs, wwbs] = freqz_m(bbs, abs); % ---------------------------------------------------------------
% find Actual Passband Ripple and Min Stopband attenuation
% ---------------------------------------------------------------
delta_w = 2*pi/1000;
Rp_bs = -(min(dbbs(1:1:ceil(wpbs(1)/delta_w+1)))); % Actual Passband Ripple fprintf('\nActual Passband Ripple is %.4f dB.\n', Rp_bs); As_bs = -round(max(dbbs(ceil(wsbs(1)/delta_w)+1:1:ceil(wsbs(2)/delta_w)+1))); % Min Stopband attenuation
fprintf('\nMin Stopband attenuation is %.4f dB.\n\n', As_bs); %% -----------------------------------------------------------------
%% Plot
%% ----------------------------------------------------------------- figure('NumberTitle', 'off', 'Name', 'Problem 8.40.2 Chebyshev-1 bs by cheby1 function')
set(gcf,'Color','white');
M = 1; % Omega max subplot(2,2,1); plot(wwbs/pi, magbs); axis([0, M, 0, 1.2]); grid on;
xlabel('Digital frequency in \pi units'); ylabel('|H|'); title('Magnitude Response');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [0, 0.01, 0.9048, 1]); subplot(2,2,2); plot(wwbs/pi, dbbs); axis([0, M, -120, 2]); grid on;
xlabel('Digital frequency in \pi units'); ylabel('Decibels'); title('Magnitude in dB');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [-80, -44, -1, 0]);
set(gca,'YTickLabelMode','manual','YTickLabel',['80'; '44';'1 ';' 0']); subplot(2,2,3); plot(wwbs/pi, phabs/pi); axis([0, M, -1.1, 1.1]); grid on;
xlabel('Digital frequency in \pi nuits'); ylabel('radians in \pi units'); title('Phase Response');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [-1:0.5:1]); subplot(2,2,4); plot(wwbs/pi, grdbs); axis([0, M, 0, 30]); grid on;
xlabel('Digital frequency in \pi units'); ylabel('Samples'); title('Group Delay');
set(gca, 'XTickMode', 'manual', 'XTick', [0, 0.25, 0.35, 0.65, 0.75, M]);
set(gca, 'YTickMode', 'manual', 'YTick', [0:10:30]);

  运行结果:

通带、阻带设计指标,dB单位和绝对值单位

采用cheb1bsf函数,得到Chebyshev-1型数字带阻滤波器,系统函数直接形式的系数如下

转换成串联形式,系数如下

幅度谱、相位谱和群延迟响应

数字带阻滤波器零极点图

和P8.39进行对比,采用cheby1函数(MATLAB工具箱函数),计算得到数字带阻滤波器,系统函数直接形式的系数如下

《DSP using MATLAB》Problem 8.40的更多相关文章

  1. 《DSP using MATLAB》Problem 7.27

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  2. 《DSP using MATLAB》Problem 7.23

    %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output Info a ...

  3. 《DSP using MATLAB》Problem 7.16

    使用一种固定窗函数法设计带通滤波器. 代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...

  4. 《DSP using MATLAB》Problem 7.9

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  5. 《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 ...

  6. 《DSP using MATLAB》Problem 5.38

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  7. 《DSP using MATLAB》Problem 5.19

    代码: function [X1k, X2k] = real2dft(x1, x2, N) %% --------------------------------------------------- ...

  8. 《DSP using MATLAB》Problem 5.10

    代码: 第1小题: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Out ...

  9. 《DSP using MATLAB》Problem 5.5

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

随机推荐

  1. git使用ssh连接服务器

    git如何连接服务器呢? $ ssh -p 22 root@服务器ip 解释:ssh -p 端口号 登录的用户名@IP

  2. delphi 键盘常用参数(PC端和手机端 安卓/IOS)

    常数名称(红色手机端) 十六进制值 十进制值 对应按键(手机端) Delphi编程表示(字符串型)_tzlin注 0 0 大键盘Delete键 #0 VK_LBUTTON 1 1 鼠标的左键 #1 V ...

  3. JS For 循环详解;棋盘放粮食 64;冒泡排序实例

    FOR( 初始条件:循环条件:状态改变:) { 被执行的代码块} 初始条件: 在循环(代码块)开始前执行 循环条件:定义运行循环(代码块)的条件 状态改变: 在循环(代码块)已被执行之后执行 循环可以 ...

  4. Android中的第一个NDK的例子

    前几天研究了JNI技术后,想在Android上试一试研究结果,查阅了很多资料后,总结如下步骤: 首先来看一下什么是NDK NDK 提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动 ...

  5. NX二次开发-UFUN单按钮模态对话框窗口打印uc1601用法

    NX9+VS2012 #include <uf.h> #include <uf_ui.h> UF_initialize(); //方法1(uc1601) uc1601();// ...

  6. vue-cli整合axios的几种方法

    Vue这个框架现在在单页面应用方面非常受人欢迎. 基于vue-cli创建的项目怎么样才能更好地处理网络请求? 首选的应该就是axios了 这次给刚接触vue的新手介绍一下axios在vue中如何使用 ...

  7. 秒懂神经网络---BP神经网络具体应用不能说的秘密.

    秒懂神经网络---BP神经网络具体应用不能说的秘密 一.总结 一句话总结: 还是要上课和自己找书找博客学习相结合,这样学习效果才好,不能单视频,也不能单书 BP神经网络就是反向传播神经网络 1.BP神 ...

  8. JVM内核-原理、诊断与优化学习笔记(三):常用JVM配置参数

    文章目录 Trace跟踪参数 -verbose:gc (打开gc的跟踪情况) -XX:+printGC(打开gc的log开关,如果在运行的过程中出现了gc,就会打印出相关的信息.) -XX:+Prin ...

  9. 802.11ac wave2的前世今生

    2015年下半年,高通.博通.RTL等芯片厂商相继发布了满足802.11ac wave2要求的芯片,WLAN及终端厂商也迅速跟进推出相应的产品和终端.802.11ac wave2在多方推动下于2015 ...

  10. IntelliJ IDEA创建springboot项目

    1.创建新项目. 2. 3.Group 是包名,Artifact是项目名. 4.springboot版本尽量选择最高版本,且不要选择SNAPSHOP版本. 5.路径可自定义,默认为D://IDEA/M ...