我正在尝试对来自.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
答案 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 ...
有意义吗?如果这不是您想要的,请留下评论。