音频信号的FFT图 - MATLAB

时间:2015-05-17 10:00:59

标签: matlab plot signal-processing fft audio-processing

我使用MATLAB使用FFT绘制录制的声音。我想采用y轴的log但我不知道如果正确我做了什么。

目前,我的FFT绘图代码如下所示:

nf=1024; %number of point in DTFT   
Y = fft(y,nf);    
f = fs/2*linspace(0,1,nf/2+1);    
plot(f,abs(Y(1:nf/2+1)));    
title('Single-Sided Amplitude Spectrum of y(t)')   
xlabel('Frequency (Hz)')   
ylabel('|Y(f)|')  

我所做的是:plot(f,log(Y(1:nf/2+1)));。我将abs替换为log。它是否正确?

1 个答案:

答案 0 :(得分:1)

对系数本身应用log没有任何意义......特别是因为光谱本质上是复数值的。但是,有些人通常将log应用于光谱的幅度(因此abs调用)主要用于可视化目的,因此大幅度的值不会超过较小的值。在这种情况下应用log将允许更大的值逐渐减小,并且可以更容易地显示光谱。但在我看来应用直线log是不正确的。您提供的代码绘制了单面光谱的大小,因此无需更改任何内容。

如果您提供了关于为什么的更多信息,您希望使用log,这会有所帮助但是现在,我会说直线log不正确。但是,如果您真的必须使用log,请将其应用于幅度。另外,为了防止未定义的行为,请确保在应用log之前将幅度加1,以便将您的幅度的零值映射到零,而不是未定义。

因此,请改为:

nf=1024; %number of point in DTFT   
Y = fft(y,nf);    
f = fs/2*linspace(0,1,nf/2+1);    
plot(f,log(1 + abs(Y(1:nf/2+1)))); %// Change    
title('Single-Sided Amplitude Spectrum of y(t)')   
xlabel('Frequency (Hz)')   
ylabel('|Y(f)|')