gpt4 book ai didi

matlab - 在MATLAB中以x轴的对数刻度绘制频率响应

转载 作者:行者123 更新时间:2023-12-02 23:07:18 25 4
gpt4 key购买 nike

我正在尝试使用正弦扫描来捕获舒尔SM57麦克风的频率响应。我使用freqz(data)获得的图形如下:

Frequency Response of Shure SM57- Derived

但是,我正在寻找更多在x轴上具有对数刻度的频率响应,如下所示(在Shure SM57的文档中)

Frequency Response of Shure SM57- Original

关于如何确切地做到这一点的任何想法?仅仅是轴缩放吗?

最佳答案

例如,您可以通过添加输出参数来从freqz获得频率响应。当您使用输出参数调用freqz时,不会创建图。然后,您可以使用semilogx并自己创建标签。

这是一个例子

fSample = 48e3;
[H, w] = freqz([1 2 1]);

Hdb = 20*log10(abs(H));
semilogx(w/pi*fSample/2, Hdb, '-r', 'LineWidth', 2);
ylabel('Magnitude (dB)');

% Play with the labels to make them look like the original picture
a = gca;
t2 = a.XTick(1:(end-1))*2;
ticks = [a.XTick; [t2 0]];
a.XTick = ticks(1:(end-1));
a.XTickLabelMode = 'manual';
a.XTickLabels = genLabels(a.XTick);

grid on;
genLabels定义为
function lbls = genLabels(ticks)
lbls = cell(numel(ticks),1);
for idx=1:numel(ticks)
d = floor(log10(ticks(idx)));
unit = floor(d/3);
switch unit
case 0
unitLbl = '';
case 1
unitLbl = 'k';
case 2
unitLbl = 'M';
case 3
unitLbl = 'G';
case 4
unitLbl = 'T';
otherwise
error('Unsupported');
end

lbls{idx} = sprintf('%d%sHz', round(ticks(idx)/(10^(3*unit))), unitLbl);
end
end

输出图

编辑:我在示例中添加了基于一些预定义采样率的x轴缩放比例。

enter image description here

关于matlab - 在MATLAB中以x轴的对数刻度绘制频率响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40755023/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com