คุณไม่ได้ทำอะไรผิด แต่คุณก็ไม่ได้คิดอย่างรอบคอบเกี่ยวกับสิ่งที่คุณควรคาดหวังซึ่งเป็นสาเหตุที่ทำให้คุณประหลาดใจกับผลลัพธ์ สำหรับคำถามที่ 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 / 1,000สำหรับและด้วยเหตุนี้สัญญาณของคุณตกอยู่ตรงบนถังความถี่ ด้วยเหตุนี้ที่จุดอื่น ๆ 998 สัญญาณของคุณนั้นเกิดจากเสียงรบกวนของเครื่องจักรเนื่องจากข้อผิดพลาดของจุดลอยตัวและด้วยเหตุนี้สเปกตรัมเฟสของคุณจึงไร้สาระเนื่องจากเป็นระยะเฟสของตัวเลขหลอกเทียม0 ≤ k ≤ 999
สำหรับครั้งแรกหนึ่ง แต่ความหมายของ FFT ที่ครอบคลุมความถี่ของรูปแบบสำหรับในขณะที่ความถี่ของสัญญาณของคุณเป็นที่ซึ่งไม่ได้เป็นในรูปแบบKเป็นผลให้สัญญาณของคุณถูกขยายโดยการรั่วไหลของสเปกตรัมและจะไม่เป็นศูนย์เกือบทุกที่ ฉันจะไม่แสดงความคิดเห็นในรูปแบบทางกายภาพของพล็อตเฟส แต่ฉันจะบอกว่ามันยอมรับรูปแบบการวิเคราะห์ปิดk / 10010 ≤ k ≤ 1,000200 / 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 ดาต้าพอยน์เป็นไปไม่ได้เลยที่จะบอกได้ว่าเกิดอะไรขึ้นในเฟสเนื่องจากมันดูเหมือนคงที่ แต่สัญญาณอินพุตนั้นไม่ซับซ้อนกว่าอินพุทอื่น ๆ