Matlab 如何把频谱图的纵坐标设置为分贝刻度
Matlab代码如下:
% 如何把频谱图的纵坐标设置为分贝刻度
%
% pr2_2_6
clc; clear; close all;load pr2_2_6_sndata1.mat % 读入数据
X = fft(y); % FFT
n2 = 1:L/2+1; % 计算正频率索引号
freq = (n2-1)*fs/L; % 频率刻度
% 第一部分
% 线性幅值作图
figure('Name', '线性幅值')
pos = get(gcf,'Position');
set(gcf,'Position',[pos(1), pos(2)-100,pos(3),(pos(4)-140)]);
plot(freq,abs(X(n2)),'k');
grid
xlabel('频率/Hz'); ylabel('幅值')
title('线性幅值')
set(gcf,'color','w');
% pause %暂时停止执行,并等待用户按下任意键。% 第二部分
% 用对数坐标作图
figure('Name', '用对数坐标作图')
pos = get(gcf,'Position');
set(gcf,'Position',[pos(1), pos(2)-100,pos(3),(pos(4)-140)]);
semilogy(freq,abs(X(n2)),'k'); % 把y轴用对数坐标作图
grid;
xlabel('频率/Hz'); ylabel('幅值')
title('对数坐标幅值'); hold on
set(gcf,'color','w');% 计算分贝值作图
figure('Name', '计算分贝值作图')
X_db = 20*log10(abs(X(n2))); %把FFT之后的幅值转换为分贝值
pos = get(gcf,'Position');
set(gcf,'Position',[pos(1), pos(2)-100,pos(3),(pos(4)-140)]);
plot(freq,X_db,'k');
grid;
xlabel('频率/Hz'); ylabel('幅值/dB')
title('分贝幅值'); hold on
set(gcf,'color','w');