【发布时间】:2012-10-26 14:20:46
【问题描述】:
我一直在做一个(可能超级简单的)任务,其中一个步骤是获得傅里叶变换。我按照我大学的指导来转换波声which can be found here(通道:2,采样:17600,采样频率:16KHz)。
看图,好像可行:
[y,fs,wmode,fidx]=readwav('piano.wav','r',-1,0);
left=y(:,1);
amountOfSlices = 6;
samplesPerSlice = fix(length(left) / 6);
frames=enframe(left, samplesPerSlice);
frames=transpose(frames);
fftdata=rfft(frames);
fftdata=fftdata.*conj(fftdata);
plot(fftdata);
接下来,我创建了一个以教程代码为基础的代码文件,并添加了接受参数(分配所需的参数,但为简洁起见省略了)。
samplerate = 512;
% Read the file with raw unscaled audio data from begin to end
[multiData,fs,wmode,fidx]=readwav(filename,'r',-1,0);
disp(sprintf('Number of channels: %d', fidx(5)))
disp(sprintf('Number of samples: %d', fidx(4)))
disp(sprintf('Sample frequency: %d Hz', fs))
% Extract the left channel of the data
leftData = multiData(:, 1);
% Slice the left channel into pieces of the size of 'samplerate'
samplesPerSlice = samplerate
% Splits the leftData vector up into frames of length equal to sample rate
slicedLeftData = enframe(leftData, samplerate)';
% Apply the real data fast fourrier transformation on each data slice
fftdata=rfft(slicedLeftData);
fftdata=fftdata.*conj(fftdata);
plot(fftdata);
你们知道我在这里做错了什么吗?
我的实际问题是: 为什么第二个数据不在 0 到 16.000 Hz 的频域中?我做错了什么?
【问题讨论】: