Matlab中freqz函数使⽤
⽬录
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(___)
1.输⼊参数
b,a-传递函数系数
传递函数系数,指定为⽮量。 ⽤b和a表⽰传递函数:
例如:b = [1 3 3 1]/6和a = [3 0 1 0]/3指定⼀个三阶巴特沃斯滤波器,其归⼀化3dB频率为0.5πrad/sample。
数据类型: double | single
n —计算点数
计算点数,指定为不少于2的正整数标量。当n不存在时,默认为512。为获得最佳结果,请将n设置为⼤于过滤器阶数的值。
数据类型: double
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的三阶巴特沃斯滤波器。
数据类型: double | single
d-数字滤波器
数字滤波器,指定为digitalFilter对象。 使⽤designfilt根据频率响应规范⽣成数字滤波器。
例如:d = designfilt('lowpassiir','FilterOrder',3,'HalfPowerFrequency',0.5)指定⼀个三阶Butterworth滤波器,其归⼀化
3dB频率为0.5πrad/sample。
fs —采样率
采样率,指定为正标量。 当时间单位为秒时,fs以赫兹表⽰。
数据类型: double
w —⾓频率
⾓频率,指定为⽮量,以弧度/样本表⽰。 w必须⾄少包含两个元素,因为否则该函数会将其解释为n。 w =π对应于奈奎斯特频率。
f —频率
频率,指定为向量。 f必须⾄少包含两个元素,否则函数会将其解释为n。 当时间单位为秒时,f以赫兹表⽰。
数据类型: double
2.输出参数
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(___) 没有输出参数时,将绘制滤波器的频率响应。
三.⽰例
1.传递函数的频率响应
计算并显⽰由以下传递函数描述的三阶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;用subplot函数
xlabel('Normalized Frequency (\times\pi rad/sample)')
ylabel('Magnitude (dB)')
如图所⽰:
计算并显⽰由以下传递函数描述的三阶IIR低通滤波器的幅度响应:
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)')
如图所⽰:
3.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)
如图所⽰:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论