用matlab进行周杰伦音乐的相关数据可视化代码
时间: 2023-10-29 21:05:47 浏览: 195
以下是用MATLAB进行周杰伦音乐的相关数据可视化的示例代码:
```matlab
% 读取周杰伦歌曲的音频数据
[y, Fs] = audioread('周杰伦 - 七里香.mp3');
% 计算音频数据的时域波形
t = (0:length(y)-1)/Fs;
% 绘制时域波形
subplot(2,2,1);
plot(t, y);
xlabel('Time (s)');
ylabel('Amplitude');
title('Time-domain waveform');
% 计算音频数据的单边频谱
N = length(y);
Y = fft(y)/N;
f = Fs*(0:(N/2))/N;
% 绘制单边频谱
subplot(2,2,2);
plot(f, 2*abs(Y(1:N/2+1)));
xlabel('Frequency (Hz)');
ylabel('Magnitude');
title('Single-sided spectrum');
% 计算音频数据的频谱密度
[Pxx, f] = periodogram(y, [], N, Fs);
% 绘制频谱密度
subplot(2,2,3);
plot(f, Pxx);
xlabel('Frequency (Hz)');
ylabel('Power/Frequency (dB/Hz)');
title('Power spectral density');
% 计算音频数据的短时时域能量
windowSize = round(Fs*0.03);
stepSize = round(Fs*0.01);
E = stEnergy(y, windowSize, stepSize);
% 绘制短时时域能量
tE = (0:length(E)-1)*stepSize/Fs;
subplot(2,2,4);
plot(tE, E);
xlabel('Time (s)');
ylabel('Energy');
title('Short-time energy');
```
这段代码中,我们首先使用`audioread`函数读取了周杰伦的歌曲《七里香》的音频数据,并计算出了它的时域波形。然后,我们使用`fft`函数计算了单边频谱,并绘制了相应的图表。接着,我们使用`periodogram`函数计算了频谱密度,并绘制了相应的图表。最后,我们使用`stEnergy`函数计算了短时时域能量,并绘制了相应的图表。
需要注意的是,这段代码中使用了一个名为`stEnergy`的自定义函数,它用于计算短时时域能量。以下是这个函数的代码:
```matlab
function E = stEnergy(x, windowSize, stepSize)
% STENERGY Calculates short-time energy of a signal
% E = STENERGY(X, WINDOWSIZE, STEPSIZE) returns the short-time energy of
% signal X using a window of size WINDOWSIZE and a step size of STEPSIZE.
% Create window function
win = hamming(windowSize);
% Calculate energy for each frame
numFrames = floor((length(x)-windowSize)/stepSize)+1;
E = zeros(numFrames, 1);
for i = 1:numFrames
idx = (i-1)*stepSize + (1:windowSize);
E(i) = sum((x(idx).*win).^2);
end
```
这个函数使用一个汉明窗口对信号进行分帧,并计算每一帧的能量。
阅读全文