【使用matlab绘制音频数据的时域图和频域图】

您所在的位置:网站首页 音乐的可视化图像 【使用matlab绘制音频数据的时域图和频域图】

【使用matlab绘制音频数据的时域图和频域图】

2024-07-12 15:35| 来源: 网络整理| 查看: 265

使用matlab绘制音频数据的时域图和频域图

虚拟的数据集见附件

一、读取数据并设置参数 close all;clear all;colordef black 设置参数 filedir = 'D:\Projects\MATLAB\data' name = '2024-03-28.txt' % disp(filedir); Fs = 8192; %采样率,即单位时间的样本个数(Hz),应该是1s内8192个样本 WINDOWS = 8192*1; %分帧帧大小,每一帧所包含的样本数 OVERLAP = 0; %分帧重叠 读取音频数据 orgdata = load(strcat(filedir,'\',name)); % 声呐原始数据 rawdata = orgdata(1:Fs*60*1,2); % 选择第2列前1分钟内的音频数据 datalen = length(rawdata); %数据长度 time = 0:1/Fs/60:(datalen-1)/Fs/60; % 时域图横坐标:时间【0,13min】,步长1/Fs/60代表每分钟一个样本 二、绘制时域图 二维时域图 figure set(gcf,'units','normalized','pos',[0 0 1 1]); % 最大化图形 plot(time,rawdata) set(gca,'Fontsize',10); %字体大小10points title('二维时域图'); xlabel('时间/min');ylabel('Amplitude'); %(时间,振幅)

在这里插入图片描述

三、绘制频域图 频谱图1

先进行傅里叶变换,将时域数据转化为频域数据,例如:

快速傅里叶变换 fftValue = abs(fftshift(fft(rawdata))); %快速傅里叶变换:将时域转化为频域

全部数据:

频谱图1:全部数据 figure % 频谱图1 set(gcf,'units','normalized','pos',[0 0 1 1]); % 最大化图形 Amp1 = (fftValue)/datalen; % 纵坐标:实际幅值(每个幅度值除以datalen归一化) f1 = (1:datalen)*Fs/datalen; % 横坐标:生成对称频率坐标(数组索引必须是正整数或者逻辑值) plot(f1,Amp1); xlim([0 8192]);%限制横坐标 ylim([0 0.006]);%限制横坐标 set(gca,'Fontsize',10); title('频谱图1 全部'); xlabel('频率/HZ');ylabel('Amplitude');

在这里插入图片描述

频谱图2

取左一半图:

频谱图2 左一半 figure %频谱图3 左一半 set(gcf,'units','normalized','pos',[0 0 1 1]); % 最大化图形 Amp3 = (fftValue(1:datalen/2))/datalen/2; % 频谱图纵坐标:实际幅值(取一半的数据点,每个幅度值除以datalen/2归一化) f3 = (1:datalen/2)*Fs/datalen; % 频谱图横坐标:生成一个从0到采样频率一半的对称频率坐标 plot(f3,Amp3); xlim([0 8192]);%限制横坐标 ylim([0 0.006]);%限制横坐标 set(gca,'Fontsize',10); title('频谱图2 左一半 [0,1/2L]'); xlabel('频率/HZ');ylabel('Amplitude');

在这里插入图片描述

频谱图3

取右一半图:

频谱图3 右一半 figure %频谱图2.5 右一半 set(gcf,'units','normalized','pos',[0 0 1 1]); % 最大化图形 Amp25 = (fftValue(datalen/2:datalen-1))/datalen/2; % 频谱图纵坐标:实际幅值(取一半的数据点,每个幅度值除以datalen/2归一化) f25 = (datalen/2:datalen-1)*Fs/datalen; % 频谱图横坐标:生成一个从0到采样频率一半的对称频率坐标 plot(f25,Amp25); xlim([0 8192]);%限制横坐标 ylim([0 0.006]);%限制横坐标 set(gca,'Fontsize',10); title('频谱图3 右一半 [1/2L,L]'); xlabel('频率/HZ');ylabel('Amplitude');

在这里插入图片描述

频谱图4

将右边一半图左移,使得横坐标从0开始

%% 频谱图4:右一半左移 figure %频谱图4 右一半左移 set(gcf,'units','normalized','pos',[0 0 1 1]); % 最大化图形 Amp2 = (fftValue(datalen/2:datalen-1))/datalen/2; % 频谱图纵坐标:实际幅值(取一半的数据点,每个幅度值除以datalen/2归一化) f2 = (datalen/2:datalen-1)*Fs/datalen - Fs/2; % 频谱图横坐标:生成一个对称频率坐标,-Fs/2代表横坐标从0到采样频率一半 plot(f2,Amp2); xlim([0 8192]);%限制横坐标 ylim([0 0.006]);%限制横坐标 set(gca,'Fontsize',10); title('频谱图4 右一半 [0,1/2L]'); xlabel('频率/HZ');ylabel('Amplitude');

在这里插入图片描述

ps: 在绘制频域图时需要限制合适的横纵坐标范围,便于数据显示。

xlim([0 8192]);%限制横坐标 ylim([0 0.006]);%限制横坐标


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3