我目前正在使用 MATLAB 做一个关于声音信号处理的项目。我在创建命令行时遇到问题,以便我可以按时间获得包含频率的图表。但是这个图是音频输入的结果。例子:
x = audioread('samson.wav')
但我仍然无法得到这样的结果。我怎样才能得到这个彩色图?谢谢
我目前正在使用 MATLAB 做一个关于声音信号处理的项目。我在创建命令行时遇到问题,以便我可以按时间获得包含频率的图表。但是这个图是音频输入的结果。例子:
x = audioread('samson.wav')
但我仍然无法得到这样的结果。我怎样才能得到这个彩色图?谢谢
我相信你正在寻找的这个“颜色图”是一个频谱图(虽然它在我看来更像是一个尺度图,但你没有提到小波)。让我给你一个在 MATLAB 中获得这样的情节的例子:
load handel
nfft = 512;
noverlap = 128;
win = hamming(nfft);
spectrogram(y, win, noverlap, nfft, Fs, 'yaxis')
colormap('jet')
因此,第一行是加载一些标准测试记录,它为您提供了两个变量:Fs(采样频率)和y(您的信号)。接下来定义分析的长度:短时傅里叶变换中的nfft以及要移动分析窗口的样本数。在定义窗口时,您可以使用多种窗口(只需查看 MATLAB 帮助),我使用了最常见的窗口:汉明窗口。最后一行用于设置颜色表示。
频谱图的计算非常简单,详细请参考帮助:点击。最后一个参数 'yaxis' 告诉 MATLAB 使用水平时间轴和垂直频率轴。
有了它,您可以使用分析窗口的长度和重叠。您必须了解一个最重要的事情:更好的时间分辨率(短窗口)会在频域中产生较差的分辨率,反之亦然- 这是一种权衡。
最后你应该得到类似的东西:
编辑:
因为您想获得scalogram,所以这里是如何在 MATLAB 中进行的。最重要的是 - 您必须安装 Wavelet Toolbox!
% Definition of signal consisting of two sinusoids
f1 = 10;
f2 = 40;
Fs = 1000;
t = 0:1/Fs:1;
y = sin(2*pi*t*f1) + sin(2*pi*t*f2);
wname = 'morl'; % Choosing the wavelet
scales = 1:1:128; % Defining scales
coefs = cwt(y, scales, wname); % Get wavelet coefficients
wscalogram('image', coefs, 'scales', scales, 'ydata', y); % Get the scalogram, together with time domain signal overlayed
colormap(jet) % Set the colormap
结果你会得到类似的东西: