首页 文章

在MATLAB中分析wav文件

提问于
浏览
2

所以我有这个钢琴录音(.wav格式) . 我能够在整个录音中做 FFT 并识别频率 .

但是,根据我读到的一些文章,如果将wav文件分解为窗口,其中每个窗口将包含一个特定注释,则最佳 .

为此,我需要首先绘制我的时域信号的“功率包络”(考虑音符平均能量概念),因此每个音符将有一个增加和一个减少,并且可以通过检查局部最小值来确定音符开始 .

这是引入'windows'的地方,其中每个窗口仅包含一个开始,然后在每个窗口上执行 FFT .

我很难绘制功率范围并将其分解成窗口 . 非常感谢 Matlab 为此编写了一些帮助 .

我使用的代码非常简单:

[wave,fs] = wavread('c scale fast.wav'); %将文件读入内存* /%声音(wave,fs); %看到它听起来像* / wave = wave . 汉明(长度(波)); t = 0:1 / fs :(长度(波)-1)/ fs; %并获得采样频率 /数字(2);副区(2,1,1);
情节(T,波);
Headers ('Wave File');
ylabel( '振幅');
xlabel('长度(以秒为单位)');
L =长度(波); NFFT = 2 ^ nextpow2(L);从Y y = fft(波,NFFT)/ L的长度的下一个2的幂; f = fs / 2 * linspace(0,1,NFFT / 2 1); %绘制单侧振幅谱 . 副区(2,1,2);
图(f,2 * abs(Y(1:NFFT / 2 1)))
Headers ('y(t)'的单侧幅度谱)
xlabel('频率(Hz)')
ylabel( '| Y(F)|')

在我的信号(我的wav文件的绝对值)与高斯滤波器进行卷积后,我尝试采用第一和第二导数,但是当我尝试绘制它时我没有得到输出 .

edges = fconv(abs(song),detect); tedges = edge(P / 2:N P / 2-1); tedges = tedges / MAX(ABS(tedges)); W = diff(tedge); Z = diff(W);

当我尝试绘制W和Z时,我没有得到我需要的输出 . 换句话说,我的图表是空的 . 我无法弄清楚我在这里做错了什么......

1 回答

相关问题