.WAV文件上的FFT

时间:2014-07-24 14:31:26

标签: matlab fft audio-processing

我正在尝试对来自.wav文件的信号的特定部分进行快速傅里叶变换。

.wav文件是每0.6秒重复一次信号。

我试图找出如何重复10次并进行比较以显示结果应该相似。

这是我现在的代码:

Fs = 44100;
cj = sqrt(-1);

[test,fs]= wavread('3b healthy2.wav'); % File data name


dt = 1/Fs;
time = 45.6;
N = time/dt;

left=test(:,1);
right=test(:,2);


I = left;
Q = right;

t = 0:dt:(time-dt);

n = length(t);

f = -Fs/2:Fs/n:Fs/2-Fs/n;

s = I+cj.*Q;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Smooth the signal
ss = smooth(s,201);

sf = fftshift(fft(ss(1:N))); % taking fft
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

figure(2)

plot(f,(abs(sf))./max(abs(sf)))

所以一旦我分开程序,我就可以找到时域,从那里我发现一次重复是45.2到45.8。

在我运行这个程序后,我得到了一个图表,但从我所看到的,它不包括一个重复,但所有重复总计达到45.2

修改

以下是45秒时信号的图表。信号连续重复3分钟。现在我需要45秒重复的FFT

signal

1 个答案:

答案 0 :(得分:0)

看起来您想要设置一个窗口来分析您的信号。

如果是这样,在时域中你只需截断你的矢量。

left=test(:,1);
right=test(:,2);
time = 45;
interval =1; // per second, for 0.1 second use interval = 0.1;
w_range = time*Fs: (time+interval)*Fs-1;
I = left(w_range) // truncate here 
Q = right(w_range) // and here
n = interval * Fs;
f = -Fs/2:Fs/n:Fs/2-Fs/n;
// continue FFT analysis ...

有意义吗?如果这不是您想要的,请留下评论。