来自wav文件的Fft大小 - Matlab

时间:2016-05-19 11:50:51

标签: matlab audio fft wav spectrum

我正在尝试在matlab中对wav文件进行频谱分析,但我对数字信号处理知之甚少。

我遇到的问题是从fft函数中获得正确的dB级别,并且无法从以前的帖子中找到正确的答案

以下是我的代码:

% spectre from wav

clear all
close all

[sig, fs]=audioread('BKSinus1000Hz.wav')
S=1.51; %sensitivity of microphone  mV/Pa
sig1=1.51*sig(:,1);

N=length(sig1);
t=linspace(0,N/fs,N);
figure(101)
plot(t,sig1)

Nfft=1024;
f=linspace(0,fs,Nfft);

A1=abs(fft(sig1,Nfft));
figure(102)
axes('units','centimeters','position',[1. 1. 18. 12.]);
hold on; box on;
set(gca,'xlim',[0 1*1E4])
semilogx(f(1:Nfft/2),20*log10(A1(1:Nfft/2)/(2E-5)))

sig2=sig1.*hanning(N);
figure(201)
plot(t,sig2)

A2=abs(fft(sig2,Nfft));
figure(202)
axes('units','centimeters','position',[1. 1. 18. 12.]);
hold on; box on;
set(gca,'xlim',[100 1*1E4],'xtick',[800 2E3 1E4])
semilogx(f(1:Nfft/2),20*log10(A2(1:Nfft/2)/(2E-5)))

我试图使用Hanning窗口,我认为我遇到了fft大小的问题:matlab似乎只使用wav文件的Nfft-First样本(而不是整个文件)来计算fft ,所以水平是错误的。

所以我有两个问题:选择合适大小的fft的规则是什么(不知道文件的频率内容)。以及如何将wav样本值转换为dB?

0 个答案:

没有答案