把频谱图的纵坐标设置为分贝刻度
·
在信号的频谱分析中,有时频谱的幅值有很大的动态范围,必须要把幅值取对数转换成为分贝值。
有两种解决方法:一种是Y轴用对数坐标;另一种是对幅值取对数,转换成分贝值后再画图。
(1)Y轴用对数坐标:
作图时,Y轴用对数坐标。在MATLAB中,X轴、Y轴或X-Y轴可以用对数坐标。相应的函数分别是semilogx、semilogy和loglog,这三个函数都是作图时用的函数,相当于常用的作图函数plot。例如我们要把Y轴用对数坐标,只要将原plot(x,y)改为semilogy(x,y)就可以了。
(2)转换为分贝值后再作图:
已知信号y(n)在FFT后的幅值为abs(Y),可以把它们转换为分贝值,一般用如下公式:
Y_db =20*log10(abs(Y))
其中是把abs(Y)取以10为底的对数,再乘以20。这样作图时就把原幅值之间的动态范围缩小了,容易在图中看出各峰值。
案例:读入一组实验数据文件(文件名为sndatal.mat),作出该组数据的频谱图。寻找谱图中的最大峰值和最小峰值的大小和频率,程序如下:
clear all; clc; close all;
load sndata1.mat % 读入数据
X=fft(y); % FFT
n2=1:L/2+1; % 计算正频率索引号
freq=(n2-1)*fs/L; % 频率刻度
% 第一部分
% 线性幅值作图
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
pos = get(gcf,'Position');
set(gcf,'Position',[pos(1), pos(2)-100,pos(3),(pos(4)-140)]);
semilogy(freq,abs(X(n2)),'k'); grid;
xlabel('频率/Hz'); ylabel('幅值')
title('对数坐标幅值'); hold on
set(gcf,'color','w');
% 计算分贝值作图
figure
X_db=20*log10(abs(X(n2)));
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');
运行结果如下:
从数值上来看,最大峰值和最小峰值的差值大于40dB,所以用分贝值表示无论视觉观察还是数值计算都更为方便,用对数坐标显示,虽观察有改进,但计算上不如用分贝值方便。
实验数据下载链接如下:
https://download.csdn.net/download/qq_42233059/86405507
参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)
推荐内容
更多推荐
相关推荐
查看更多
llama_index

LlamaIndex(前身为GPT Index)是一个用于LLM应用程序的数据框架
halo

强大易用的开源建站工具。
freeCodeCamp

freeCodeCamp.org的开源代码库和课程。免费学习编程。
热门开源项目
活动日历
查看更多
直播时间 2025-04-25 15:00:00


直播时间 2025-04-23 19:00:00

GitTalk:国内首个微服务编排框架Juggle实战解析
直播时间 2025-04-22 18:31:56

字节AI 黑科技!从 Manus Agent 入门 Eino
直播时间 2025-04-09 14:34:18

樱花限定季|G-Star校园行&华中师范大学专场
直播时间 2025-04-07 14:51:20

樱花限定季|G-Star校园行&华中农业大学专场
所有评论(0)