Matlab中freqz函数使用

目录

语法

输入参数

输出参数

说明

示例

传递函数的频率响应

二阶部分的频率响应

FIR滤波器的频率响应

FIR带通滤波器的频率响应


        freqz函数的功能是求解数字滤波器的频率响应。

语法

[h,w] = freqz(b,a,n)

[h,w] = freqz(sos,n)

[h,w] = freqz(d,n)

[h,w] = freqz(___,n,'whole')

[h,f] = freqz(___,n,fs)

[h,f] = freqz(___,n,'whole',fs)

h = freqz(___,w)

h = freqz(___,f,fs)

freqz(___)

输入参数

b,a-传递函数系数

        传递函数系数,指定为矢量。 用b和a表示传递函数:

        例如:b = [1 3 3 1]/6和a = [3 0 1 0]/3指定一个三阶巴特沃斯滤波器,其归一化3dB频率为0.5πrad/sample。

n —计算点数

        计算点数,指定为不少于2的正整数标量。当n不存在时,默认为512。为获得最佳结果,请将n设置为大于过滤器阶数的值。

sos —二阶部分的系数

        二阶部分系数,指定为矩阵。 sos是一个K×6矩阵,其中节数K必须大于或等于2。如果节数小于2,则该函数将输入视为分子向量。 sos的每一行都对应一个二阶(双二阶)滤波器的系数。 sos的第i行对应于[bi(1) bi(2) bi(3) ai(1) ai(2) ai(3)]。

        例如:s = [2 4 2 6 0 2; 3 3 0 6 0 0]指定具有标准化3 dB频率0.5πrad/sample的三阶巴特沃斯滤波器。

d-数字滤波器

        数字滤波器,指定为digitalFilter对象。 使用designfilt根据频率响应规范生成数字滤波器。

        例如:d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5)指定一个三阶Butterworth滤波器,其归一化3dB频率为0.5πrad/sample。

fs —采样率

        采样率,指定为正标量。 当时间单位为秒时,fs以赫兹表示。

w —角频率

        角频率,指定为矢量,以弧度/样本表示。 w必须至少包含两个元素,因为否则该函数会将其解释为n。 w =π对应于奈奎斯特频率。

f —频率

        频率,指定为向量。 f必须至少包含两个元素,否则函数会将其解释为n。 当时间单位为秒时,f以赫兹表示。

输出参数

h-频率响应

        频率响应,以向量形式返回。 如果指定n,则h的长度为n。 如果未指定n或将n指定为空向量,则h的长度为512。

        如果freqz的输入是单精度,则该函数使用单精度算法计算频率响应。 输出h是单精度。

w —角频率

        角频率,作为矢量返回。 w的取值范围是0到π。 如果在输入中指定“ whole”,则w中的值范围为0到2π。 如果指定n,则w的长度为n。 如果未指定n或将n指定为空向量,则w的长度为512。

f —频率

        频率,作为以赫兹表示的矢量返回。 f的取值范围是0到fs / 2 Hz。 如果在输入中指定“ whole”,则f中的值范围为0到fs Hz。 如果指定n,则f的长度为n。 如果未指定n或将n指定为空向量,则f的长度为512。

说明

[w,h] = freqz(b,a,n) 返回具有存储在b和a中的传递函数系数的数字滤波器的n点频率响应矢量h和相应的角频率矢量w。

[h,w] = freqz(sos,n) 返回与二阶部分矩阵sos相对应的n点复频响应。

[h,w] = freqz(d,n) 返回数字滤波器d的n点复频响应。

[h,w] = freqz(___,n,'whole')返回整个单位圆上n个采样点的频率响应。

[h,f] = freqz(___,n,fs) 返回数字滤波器的频率响应矢量h和相应的物理频率矢量f,该数字滤波器设计为对以fs速率采样的信号进行滤波。

[h,f] = freqz(___,n,'whole',fs)返回介于0到fs之间的n个点处的频率向量。

h = freqz(___,w) 返回以w中提供的归一化频率评估的频率响应向量h。

h = freqz(___,f,fs) 返回以f中提供的物理频率评估的频率响应矢量h。

freqz(___) 没有输出参数时,将绘制滤波器的频率响应。

示例

传递函数的频率响应

        计算并显示由以下传递函数描述的三阶IIR低通滤波器的幅度响应:

        将分子和分母表示为多项式卷积。 在整个单位圆上的2001个点处找到频率响应。

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

b = b0*conv(b1,b2);
a = conv(a1,a2);

[h,w] = freqz(b,a,'whole',2001);

%绘制bode图
plot(w/pi,20*log10(abs(h)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

        如图所示:

二阶部分的频率响应

        计算并显示由以下传递函数描述的三阶IIR低通滤波器的幅度响应:

        用二阶部分表示传递函数。 在整个单位圆上的2001个点处找到频率响应。

b0 = 0.05634;
b1 = [1  1];
b2 = [1 -1.0166 1];
a1 = [1 -0.683];
a2 = [1 -1.4461 0.7957];

sos1 = [b0*[b1 0] [a1 0]];
sos2 = [b2 a2];

[h,w] = freqz([sos1;sos2],'whole',2001);
%%
plot(w/pi,20*log10(abs(h)))
ax = gca;
ax.YLim = [-100 20];
ax.XTick = 0:.5:2;
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

        如图所示:

FIR滤波器的频率响应

        使用β= 8的Kaiser窗设计80阶FIR低通滤波器。 指定标准化截止频率为0.5πrad /sample。 显示滤波器的幅度和相位响应。

b = fir1(80,0.5,kaiser(81,8));
freqz(b,1)

        如图所示:

        使用designfilt设计相同的过滤器。 使用fvtool显示其幅度和相位响应。

d = designfilt('lowpassfir','FilterOrder',80, ...
               'CutoffFrequency',0.5,'Window',{'kaiser',8});
freqz(d)

        如图所示:

FIR带通滤波器的频率响应

        设计一个FIR带通滤波器,其通带在0.35π至0.8πrad/sample的范围内,并且纹波为3dB。 第一个阻带从0到0.1πrad /采样范围,衰减为40 dB。 第二个阻带从0.9πrad/sample到奈奎斯特频率,衰减为30dB。 计算频率响应。 用线性单位和分贝绘制其大小。 突出显示通带。

sf1 = 0.1;
pf1 = 0.35;
pf2 = 0.8;
sf2 = 0.9;
pb = linspace(pf1,pf2,1e3)*pi;

bp = designfilt('bandpassfir', ...
    'StopbandAttenuation1',40, 'StopbandFrequency1',sf1,...
    'PassbandFrequency1',pf1,'PassbandRipple',3,'PassbandFrequency2',pf2, ...
    'StopbandFrequency2',sf2,'StopbandAttenuation2',30);

[h,w] = freqz(bp,1024);
hpb = freqz(bp,pb);

subplot(2,1,1)
plot(w/pi,abs(h),pb/pi,abs(hpb),'.-')
axis([0 1 -1 2])
legend('Response','Passband','Location','South')
ylabel('Magnitude')

subplot(2,1,2)
plot(w/pi,db(h),pb/pi,db(hpb),'.-')
axis([0 1 -60 10])
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')

        如图所示:

算法
        数字滤波器的频率响应可以解释为在 z = ejω [1] 处对传递函数进行求值。

        freqz 根据您指定的(实数或复数)分子和分母多项式确定传递函数,并返回数字滤波器的复频率响应 H(ejω)。频率响应在您使用的语法所确定的采样点处计算。

        freqz 通常使用 FFT 算法来计算频率响应,但前提不提供频率向量作为输入参数。它将频率响应计算为变换后的分子和分母系数之比,并用零填充至所需长度。

        当提供频率向量作为输入时,freqz 在每个频率点处计算多项式,并将分子响应除以分母响应。该函数使用霍纳方法计算多项式。

  • 33
    点赞
  • 274
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值