งงงันโดยสเปกตรัมเฟส FFT!


9

การทดสอบ MATLAB ที่ง่ายมาก:

f = 200;  
fs = 1000;  
t = 0: 1/fs : 1;
x = cos(2*pi*f*t);  
plot(angle(fftshift(fft(x))));  

และนี่คือผลลัพธ์: ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้ทำการเปลี่ยนแปลงเล็กน้อยกับตัวอย่างโค้ดข้างต้น ลดระยะเวลาเพียง 1 ตัวอย่างดังนี้

f = 200;  
fs = 1000;  
t = 0: 1/fs : 1 - 1/fs;
x = cos(2*pi*f*t);  
plot(angle(fftshift(fft(x)))); 

และสเปกตรัมของเฟสก็บ้าไปหมด:

ป้อนคำอธิบายรูปภาพที่นี่

คำถาม:

  1. ในพล็อตแรกฉันหวังว่าจะเห็นเฟสศูนย์ที่ bin 700 ซึ่งสอดคล้องกับความถี่บวก 200 ในตัวอย่างนี้ ดูเหมือนจะไม่เป็นเช่นนั้น ประการที่สองฉันไม่เข้าใจส่วนเชิงเส้นของกราฟในพล็อต 1 ฉันขอขอบคุณองค์ประกอบเฟสที่อาจมีอยู่เนื่องจากเสียงที่เรียกว่าตัวเลข แต่แล้วเสียงนั้นจะเป็น 'เชิงเส้น' ในเฟสได้อย่างไร

  2. ในพล็อตที่สองทำไมการลบเพียงตัวอย่างเดียวจึงส่งผลกระทบอย่างรุนแรงต่อพล็อตเฟส

  3. ฉันกำลังทำอะไรผิดพลาดที่นี่หรือไม่

คำตอบ:


18

คุณไม่ได้ทำอะไรผิด แต่คุณก็ไม่ได้คิดอย่างรอบคอบเกี่ยวกับสิ่งที่คุณควรคาดหวังซึ่งเป็นสาเหตุที่ทำให้คุณประหลาดใจกับผลลัพธ์ สำหรับคำถามที่ 1 การคาดคะเนของคุณอยู่ใกล้ แต่จริงๆแล้วคุณมีสิ่งต่าง ๆ ที่อยู่ข้างหลัง มันเป็นเสียงที่เป็นตัวเลขที่ทำให้เกิดเสียงที่สองของคุณไม่ใช่เสียงแรกของคุณ

รูปภาพอาจช่วยได้ นี่คือพล็อตของขนาดและเฟสสำหรับการทดลองครั้งแรก:

x = Cos[2.0 \[Pi] 200 Range[0, 1, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

และอันที่สอง:

x = Cos[2.0 \[Pi] 200 Range[0, 1 - 1/1000, 1/1000]];
fx = Fourier[x];
ListLinePlot[Abs[fx], PlotRange -> All]
ListLinePlot[Arg[fx], PlotRange -> All]

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

แล้วเกิดอะไรขึ้นที่นี่? คำอธิบายที่สองอธิบายได้ง่ายที่สุด ก่อน FFT ของอันที่สองมีแอมพลิจูดเป็นศูนย์ทุกที่ยกเว้นสองจุดที่มองเห็นได้ในสเปกตรัมขนาด สิ่งนี้ตามมาเนื่องจากคำจำกัดความของ FFT ที่ใช้ 1,000 ดาต้าพอยน์ส่งกลับความถี่ของแบบฟอร์มk/1000สำหรับและด้วยเหตุนี้สัญญาณของคุณตกอยู่ตรงบนถังความถี่ ด้วยเหตุนี้ที่จุดอื่น ๆ 998 สัญญาณของคุณนั้นเกิดจากเสียงรบกวนของเครื่องจักรเนื่องจากข้อผิดพลาดของจุดลอยตัวและด้วยเหตุนี้สเปกตรัมเฟสของคุณจึงไร้สาระเนื่องจากเป็นระยะเฟสของตัวเลขหลอกเทียม0k999

สำหรับครั้งแรกหนึ่ง แต่ความหมายของ FFT ที่ครอบคลุมความถี่ของรูปแบบสำหรับในขณะที่ความถี่ของสัญญาณของคุณเป็นที่ซึ่งไม่ได้เป็นในรูปแบบKเป็นผลให้สัญญาณของคุณถูกขยายโดยการรั่วไหลของสเปกตรัมและจะไม่เป็นศูนย์เกือบทุกที่ ฉันจะไม่แสดงความคิดเห็นในรูปแบบทางกายภาพของพล็อตเฟส แต่ฉันจะบอกว่ามันยอมรับรูปแบบการวิเคราะห์ปิดk/10010k1000200/1000k/1001

โดยทั่วไปแล้วฉันคิดว่ากราฟของมุมเฟสเพียงอย่างเดียวเป็นความคิดที่ไม่ดีสำหรับการถ่ายทอดข้อมูลอย่างแม่นยำด้วยเหตุผลนี้ ก่อนอื่นคุณไม่สามารถบอกได้ว่าคุณกำลังดูเฟสของขยะที่มีแอมพลิจูดต่ำหรือสัญญาณจริงและที่สองไม่ใช่การแปลที่ไม่แปรปรวนและเป็นเรื่องง่ายที่จะได้รับกราฟที่ทำให้สับสนอย่างมากสำหรับอินพุตอย่างง่าย ถ้าคุณยังคงมองหาบางสิ่งที่สื่อถึงข้อมูลเฟสเป็นกราฟที่แสดงเฟสและข้อมูลแอมพลิจูดพร้อมกันในลักษณะที่มองเห็นเช่นพล็อตที่มีการเข้ารหัสเฟสเป็นสีและขนาดถูกเข้ารหัสเป็นความสว่าง

ภาคผนวก: นี่คือภาพคู่จาก Mathematica ซึ่งแสดงหลักการที่ฉันระบุไว้ในย่อหน้าก่อนหน้า:

hue = Compile[{{z, _Complex}}, {(1.0 Arg[-z] + \[Pi])/(2 \[Pi]), 
Exp[1 - Max[Abs[z], 1]], Min[Abs[z], 1]}, 
CompilationTarget -> "C", RuntimeAttributes -> {Listable}];
L = 500;
data = Table[Boole[x <= 11 && y <= 11], {x, L}, {y, L}];
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-5, -5}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {-4, -4}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]
Image[hue@
RotateRight[
10 RotateRight[Fourier[RotateRight[data, {0, 0}]], {L/2, L/2}]], 
ColorSpace -> Hue, Magnification -> 1]

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่

ภาพทั้งสามภาพเป็น 2D Fourier แปลงสัญญาณอินพุตเดียวกัน (an 11×11 กำลังสองของตารางที่มีค่าศูนย์ด้วยความยาว 500×500) แต่อินพุตได้รับการหมุนแบบวนซ้ำโดย 5, 4, และ 0 และ 200 ดาต้าพอยน์ สเป็คตรัมขนาด (เข้ารหัสโดยความสว่างของพิกเซล) เหมือนกัน แต่สเปคตรัมเฟสนั้นแตกต่างอย่างสิ้นเชิง! การเข้ารหัสเฟสเสร็จสิ้นเพื่อให้ 1 แมปเป็นสีแดงผม แผนที่เป็นสีเขียว -1 แผนที่ไปยังสีเขียวและ -ผมแผนที่เป็นสีม่วง นี่คือสิ่งที่ฉันหมายถึงเมื่อฉันพูดว่าช่วงสเปกตรัมเป็นค่าคงที่ที่ไม่เปลี่ยนแปลงและไม่สามารถแก้ไขความเข้าใจด้วยสายตาของมนุษย์ ตัวอย่างเช่นเมื่อมีการเปลี่ยนแปลง 200 ดาต้าพอยน์เป็นไปไม่ได้เลยที่จะบอกได้ว่าเกิดอะไรขึ้นในเฟสเนื่องจากมันดูเหมือนคงที่ แต่สัญญาณอินพุตนั้นไม่ซับซ้อนกว่าอินพุทอื่น ๆ


0

หากคุณต้องการเปลี่ยนแปลงความถี่ของสัญญาณหรือความยาว FFT เพื่อให้สัญญาณแตกต่างกันไปตามช่วงเวลาและไม่ตรงตามช่วงเวลาในรูรับแสง FFT และไม่ต้องการเห็นเฟสของช่องขนาดสูงสุดสำหรับการเปลี่ยนแปลงสัญญาณนั้น เราสามารถอ้างอิงเฟสเริ่มต้นของสัญญาณไปยังจุดศูนย์กลางได้หากรูรับแสง FFT แทนจุดเริ่มต้น (สำหรับบาปที่สร้างขึ้น (t) ให้ใส่ t = 0 ในกึ่งกลางของอาร์เรย์ FFT)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.