【发布时间】:2014-09-16 04:15:51
【问题描述】:
我正在尝试对来自 .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
【问题讨论】:
-
我不完全理解你的问题。您是在问如何仅在 45 秒到 46 秒之间截断输入信号?如果是这样,那应该不难做到。
-
是的,但我需要那个特定时间的 fft。我需要获取多个地方的 fftshift(fft) 然后比较它们。所以我想知道我的代码在哪里有错误,一旦我把时间放到 45 时,就会组合 fft,而不是在 45 秒时给我 fft。希望是有道理的
标签: matlab fft audio-processing