Tôi tự hỏi nếu tôi đang sử dụng Fourier Transformation trong MATLAB đúng cách. Tôi muốn có tất cả các biên độ trung bình cho các tần số trong một bài hát. Với mục đích thử nghiệm, tôi đang sử dụng a free mp3 download of Beethovens "For Elise" mà tôi đã chuyển đổi thành tệp sóng đơn sóng 8 kHz sử dụng Audacity.Tôi có đang sử dụng phép biến đổi Fourier đúng không?
mã MATLAB của tôi là như sau:
clear all % be careful
% load file
% Für Elise Recording by Valentina Lisitsa
% from http://www.forelise.com/recordings/valentina_lisitsa
% Converted to 8 kHz mono using Audacity
allSamples = wavread('fur_elise_valentina_lisitsa_8khz_mono.wav');
% apply windowing function
w = hanning(length(allSamples));
allSamples = allSamples.*w;
% FFT needs input of length 2^x
NFFT = 2^nextpow2(length(allSamples))
% Apply FFT
fftBuckets=fft(allSamples, NFFT);
fftBuckets=fftBuckets(1:(NFFT/2+1)); % because of symetric/mirrored values
% calculate single side amplitude spectrum,
% normalize by dividing by NFFT to get the
% popular way of displaying amplitudes
% in a range of 0 to 1
fftBuckets = (2*abs(fftBuckets))/NFFT;
% plot it: max possible frequency is 4000, because sampling rate of input
% is 8000 Hz
x = linspace(1,4000,length(fftBuckets));
bar(x,fftBuckets);
Kết quả sau đó trông như thế này:
- ai đó có thể vui lòng cho tôi biết nếu mã của tôi là chính xác? Tôi đặc biệt thắc mắc về các đỉnh xung quanh 0.
- Để bình thường hóa, tôi có phải chia cho
NFFT
hoặclength(allSamples)
không? - Đối với tôi điều này không thực sự trông giống như một biểu đồ thanh, nhưng tôi đoán điều này là do nhiều giá trị tôi âm mưu?
Cảm ơn mọi gợi ý!
Bạn đã xem trang này chưa: Sử dụng FFT để lấy các ô phân tích phổ đơn giản] (http://www.mathworks.com/support/tech-notes/1700/1702.html). Nó có một ví dụ với nhiều lời giải thích – Amro