MATLAB R2021a中能识别的函数是freqz,但是无法识别freqz_m函数。
方法一:
若只想了解图像趋势,可以直接用freqz函数替代freqz_m函数,因为freqz_m函数可以有多个输出,但是freqz函数只有两个,所以可以分次进行替代,直到把所有输出都包含
例如:[db,mag,pha,grd,w]=freqz_m(b,a);语句
可以替换为:
[mag,w]=freqz(b,a);
[db,pha]=freqz(b,a);
[grd]=freqz(b,a);
这样替换会造成种类似图像平滑的效果。
原图像:
替换后的图像:
方法二:
方法二可以解决函数无法识别的问题。
先在命令行窗口输入指令:edit,会跳出以下的编辑窗口
在编辑窗口中将freqz_m函数的定义语句写入,然后保存,切记要命名为freqz_m,否则在调用函数时依旧会报错。
freqz_m函数的定义:
function [db,mag,pha,grd,w] = freqz_m(b,a);
% Modified version of freqz subroutine
% ------------------------------------
% [db,mag,pha,grd,w] = freqz_m(b,a);
% db = Relative magnitude in dB computed over 0 to pi radians
% mag = absolute magnitude computed over 0 to pi radians
% pha = Phase response in radians over 0 to pi radians
% grd = Group delay over 0 to pi radians
% w = 501 frequency samples between 0 to pi radians
% b = numerator polynomial of H(z) (for FIR: b=h)
% a = denominator polynomial of H(z) (for FIR: a=[1])
%
[H,w] = freqz(b,a,1000,'whole');
H = (H(1:1:501))'; w = (w(1:1:501))';
mag = abs(H);
db = 20*log10((mag+eps)/max(mag));
pha = angle(H);
% pha = unwrap(angle(H));
grd = grpdelay(b,a,w);
% grd = diff(pha);
% grd = [grd(1) grd];
% grd = [0 grd(1:1:500); grd; grd(2:1:501) 0];
% grd = median(grd)*500/pi;
然后就可以正常在命令行窗口正常调用函数freqz_m了。