📜  带步长的倍频程范围 - Matlab (1)

📅  最后修改于: 2023-12-03 14:54:06.889000             🧑  作者: Mango

带步长的倍频程范围 - Matlab

在信号处理的领域中,倍频程范围是一个常见的概念。它可以帮助我们更好的理解信号频率的特性。在Matlab中,我们可以使用freqz函数来绘制信号的频率响应曲线。本文介绍如何使用freqz函数画出带步长的倍频程范围,并进行一些基本的参数调整。

freqz函数简介

freqz函数是一个用于计算数字滤波器(也适用于其他系统类型)的频率响应的函数。它可以计算系统传递函数的频率响应,包括振幅特性和相位特性。该函数的用法如下:

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

其中,ba分别是系统的分子和分母系数,n是频率响应所需的采样点数。函数返回值h是系统的频率响应,w是对应的频率值。

画带步长的倍频程范围

我们可以通过freqz函数绘制一个数字滤波器的频率响应,也可以在频率响应图中标出不同的倍频程。一般的倍频程范围是以dB为单位的,而带步长的倍频程范围则是以线性幅度比为单位的。

下面的Matlab程序演示了如何使用freqz函数画出带步长的倍频程范围:

% 产生一个数字滤波器
[b, a] = butter(5, 0.3);

% 计算频率响应
[h, w] = freqz(b, a, 8192);

% 计算线性幅度
amp = abs(h);

% 计算幅度比
amp_db = 20*log10(amp);

% 找到倍频程范围
step = 0.1;  % 步长为0.1
freq_min = 0.01;  % 最小频率 range
freq_max = 1;  % 最大频率 range
f = (freq_min:step:freq_max)';
dbf = amp_db(1:floor(end/2)+1);
[~, i] = ismember(round(f*length(w)), (1:length(w))');
amp_db_step = dbf(i);

% 画图
plot(w/pi, amp_db);
hold on;
plot(f, amp_db_step, 'r*');
axis([0 1 -100 5]);
xlabel('Normalized frequency (\times\pi rad/sample)');
ylabel('Amplitude (dB)');
title('带步长的倍频程范围');
grid on;

程序的输出结果如下图所示:

带步长的倍频程范围

在图中,红色星号标出了不同的倍频程范围。可以看到,带步长的倍频程范围能够更直观地显示信号的频率特性,更容易观察到信号所具有的周期性和谐波分量。

参数调整

在使用freqz函数时,我们可以调整一些参数以满足不同的需求。下面是几个常用的参数及其含义:

  • ba:数字滤波器的分子和分母系数。
  • n:频率响应所需的采样点数。采样点数越多,频率响应的精度越高。
  • fs:系统的采样率,单位Hz。这个参数通常只用于滤波器设计。如果省略或指定为1,则采样率为1 Hz。
  • whole:指定是否对整个信号域进行分析。如果为true,则计算频率响应映射到-π到π的整个频率域。如果为false,则计算映射到0到π的一半的频率域。
  • window:指定应用于输入信号的窗口函数,以减少频谱泄漏。该参数可以是一个函数句柄,也可以是一个窗口名称(例如'hann','hamming'等)。
  • dtype:指定返回的数据类型,可以是'complex'、'real'或'magnitude'。默认为'magnitude'。
  • plottype:指定绘图类型,可以是'plot'或'stem'。默认为'plot'。

通过调整这些参数,可以更好地控制频率响应图的细节和精度。

总结

本文介绍了如何使用freqz函数绘制带步长的倍频程范围。通过这种方法,我们可以更清晰地观察信号的频率特性,更直观地发现信号的周期性和谐波分量。