ฉันสามารถขอความช่วยเหลือเกี่ยวกับวิธีทำให้แกนความถี่เปลี่ยนจากความถี่ลบเป็นความถี่บวก (เป็นเฮิรตซ์) ซึ่งจะเป็นแกน x ในผลลัพธ์ FFT แต่ให้ FFT ยาวหรือคี่ความยาวคี่ ฉันมีปัญหาในการทำใน MATLAB (สมมติว่าคุณรู้จักความถี่การสุ่มตัวอย่าง f_s)
ฉันสามารถขอความช่วยเหลือเกี่ยวกับวิธีทำให้แกนความถี่เปลี่ยนจากความถี่ลบเป็นความถี่บวก (เป็นเฮิรตซ์) ซึ่งจะเป็นแกน x ในผลลัพธ์ FFT แต่ให้ FFT ยาวหรือคี่ความยาวคี่ ฉันมีปัญหาในการทำใน MATLAB (สมมติว่าคุณรู้จักความถี่การสุ่มตัวอย่าง f_s)
คำตอบ:
วิธีหนึ่งก็คือการคำนวณเวกเตอร์ความถี่สำหรับเอาต์พุต DFT ที่ไม่ได้เลื่อน (นั่นคือสิ่งที่คุณจะได้รับโดยตรงจากfft()
ฟังก์ชั่นของ MATLAB โดยไม่ต้องทำfftshift()
) จากนั้นทำการแมปความถี่ใหม่ที่ตรงกับตำแหน่งด้านลบของแกน ตัวอย่าง:
% assume input signal "x", sampling frequency "fs"
% calculate FFT
X = fft(x,Nfft);
% calculate frequency spacing
df = fs / Nfft;
% calculate unshifted frequency vector
f = (0:(Nfft-1))*df;
% move all frequencies that are greater than fs/2 to the negative side of the axis
f(f >= fs/2) = f(f >= fs/2) - fs;
% now, X and f are aligned with one another; if you want frequencies in strictly
% increasing order, fftshift() them
X_normal_order = fftshift(X);
f_normal_order = fftshift(f);
คำตอบที่ได้รับจาก learnvst ควรใช้ได้เช่นกัน นี่เป็นอีกวิธีหนึ่งในการคิดเกี่ยวกับเรื่องนี้ซึ่งไม่จำเป็นต้องมีปลอกพิเศษสำหรับขนาด DFT ที่สม่ำเสมอ / คู่
คุณสามารถสร้างสเปกตรัมความถี่ในเชิงบวกได้ค่อนข้างง่าย (ซึ่งfs
เป็นอัตราการสุ่มตัวอย่างและNFFT
จำนวนของถังขยะ fft) ในการดำเนินการตามขั้นตอนวิธี Matlab ของ FFT องค์ประกอบแรกมักเป็นส่วนประกอบ DC เสมอดังนั้นทำไมอาร์เรย์จึงเริ่มจากศูนย์ สิ่งนี้เป็นจริงสำหรับค่าคี่และคู่ของ NFFT
%//Calculate frequency axis
df = fs/NFFT;
fAxis = 0:df:(fs-df);
หากคุณต้องการห่อคลื่นความถี่คุณต้องคำนึงว่าคุณมี NFFT ที่เป็นเลขคี่หรือไม่ จะต้องมีส่วนประกอบ DCเสมอ .
df = fs/NFFT;
fAxis = (0:df:(fs-df)) - (fs-mod(NFFT,2)*df)/2;
ขอให้สังเกตว่าการคำนวณของแกนความถี่บวกนั้นเหมือนกันกับข้างต้น แต่คำที่เลื่อน FFT เปลี่ยนไปเพื่อรองรับความยาว FFT ที่เท่ากันหรือคี่
ตัวอย่างโค้ดเหล่านี้นำมาจากคำตอบยาว ๆ ที่โพสต์บน SO (ซึ่งคุณอาจพบว่าน่าสนใจ) พบได้ที่นี่: /programming/9694297/matlab-fft-xaxis-limits-messing-up-and-fftshift/ 9699983 # 9699983