我一直致力于(可能超级简单)的分配,其中一个步骤是获得Fourrier变换。我按照我大学的指南来改变波形声音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?我做错了什么?
答案 0 :(得分:1)
我想通过“这里的错误”你的意思是多种颜色?如果是这样,看起来两个图像中的fftdata plottet都是矩阵(你想要一个数组,对吗?)。不。*对每个元素执行操作吗?检查进入参数的尺寸。
此外,请记住奈奎斯特定理:您永远无法解决大于采样频率一半的任何频率。在采样频率为16KHz的情况下,您可能拥有8kHz的数据点,但不包含任何信息,因此无需在频域图中包含该数据。