我試圖使用sinesweep來捕捉舒爾SM57麥克風的頻率響應。我得到使用freqz(data)
的圖如下:用x軸對數刻度繪製MATLAB頻率響應
然而,我在尋找更多與如下所述x軸的對數標度頻率響應的(舒爾SM57的文檔中)
如何做到恰好任何想法?它只是軸縮放?
我試圖使用sinesweep來捕捉舒爾SM57麥克風的頻率響應。我得到使用freqz(data)
的圖如下:用x軸對數刻度繪製MATLAB頻率響應
然而,我在尋找更多與如下所述x軸的對數標度頻率響應的(舒爾SM57的文檔中)
如何做到恰好任何想法?它只是軸縮放?
作爲一個例子,您可以通過添加輸出參數來獲得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基於一些預定的採樣率對示例軸縮放。
'semilogx(X,Y)'將與數刻度繪製在x軸 – jodag
我們如何把數據從freqz的? X軸應以對數刻度表示,Y軸以dB刻度表示。 –
關於圖表的有效性:如果您使用簡單的揚聲器 - 麥克風設置進行測量,則大多數峯值和波數通常由您的揚聲器而不是SM57確定。您是否考慮先使用校準過的測量麥克風來最終減去揚聲器的頻率響應? –