ทำไม FFT จึง“ สะท้อน”?


36

หากคุณทำพล็อต FFT ของสัญญาณง่าย ๆ เช่น:

t = 0:0.01:1 ;
N = max(size(t));
x = 1 + sin( 2*pi*t ) ;
y = abs( fft( x ) ) ;
stem( N*t, y )

1Hz sinusoid + DC

1Hz

FFT จากด้านบน

FFT

ฉันเข้าใจว่าหมายเลขในถังขยะแรกคือ "DC เท่าใด" ที่มีสัญญาณ

y(1)  %DC
  > 101.0000

หมายเลขในถังขยะที่สองควรเป็น "เท่าใดรอบ 1 สัญญาณทั้งหมด" มี:

y(2)  %1 cycle in the N samples
  > 50.6665

แต่ไม่ใช่ 101! ประมาณ 50.5

มีรายการอื่นที่ส่วนท้ายของสัญญาณ fft เท่ากับขนาด:

y(101)
  > 50.2971

ดังนั้น 50.5 อีกครั้ง

คำถามของฉันคือเหตุใด FFT จึงเป็นแบบนี้ ทำไมมันไม่ได้เป็นเพียง 101 ในy(2)(ซึ่งจะหมายถึงสัญญาณทั้งหมด 101 ถังขยะของคุณมีไซนัส 1 เฮิร์ตซ์ในมัน?)

มันจะถูกต้องหรือไม่ที่จะทำ:

mid = round( N/2 ) ;

% Prepend y(1), then add y(2:middle) with the mirror FLIPPED vector
% from y(middle+1:end)
z = [ y(1), y( 2:mid ) + fliplr( y(mid+1:end) ) ];

stem( z )

พลิกและเพิ่มในครึ่งหลังของเวกเตอร์ FFT

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

ฉันคิดว่าตอนนี้ส่วนที่สะท้อนทางด้านขวาจะถูกเพิ่มเข้าไปอย่างถูกต้องทำให้ฉันต้องการ "ถังขยะทั้งหมด 101 ถังของ FFT มีไซน์ 1Hz"

>> z(2)

ans =

  100.5943

มีการตอบคำถามที่คล้ายกันที่นี่: dsp.stackexchange.com/questions/3466/…
pichenettes

แต่นี่เป็นเรื่องเกี่ยวกับความสมมาตรโดยเฉพาะ(ฉันเชื่อว่ามันเป็นสัญญาณที่เรียกว่า
bobobobo

สำหรับสัญญาณจริงที่บริสุทธิ์ F (k) = conj (F (Nk)) นี่คือเหตุผลที่การแปลงฟูริเยร์ของสัญญาณจริงที่แท้จริงนั้นสมมาตร
WebMonster

ถามตัวคุณเองว่าคุณคาดหวังผลอะไรถ้าสัญญาณของคุณคือ 1 + cos (2 * pi t) ... และ 1 + i cos (2 * pi t) ... และ 1 + i sin (2 * pi * t) ...
pichenettes

2
เนื่องจากการแปลงฟูริเยร์แบ่งสัญญาณเป็นเลขยกกำลังเชิงซ้อนและคลื่นไซน์คือผลรวมของเลขชี้กำลังเชิงซ้อน2ตัว dsp.stackexchange.com/a/449/29
endolith

คำตอบ:


39

สัญญาณที่แท้จริงคือ "มิร์เรอร์" ในครึ่งของจริงและลบของการแปลงฟูริเยร์เนื่องจากธรรมชาติของการแปลงฟูริเยร์ การแปลงฟูริเยร์ถูกกำหนดไว้ดังต่อไปนี้ -

H(f)=h(t)ej2πftdt

โดยพื้นฐานแล้วมันมีความสัมพันธ์กับสัญญาณกับกลุ่มไซนัสที่ซับซ้อนแต่ละกลุ่มมีความถี่ของตัวเอง ดังนั้นไซนัสที่ซับซ้อนเหล่านั้นมีหน้าตาเป็นอย่างไร? ภาพด้านล่างแสดงไซนัสอยด์ที่ซับซ้อนหนึ่งรายการ

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

"ไขจุกเกลียว" คือไซนัสิดสลับซับซ้อนในเวลาในขณะที่ไซนัสทั้งสองที่ตามมามันเป็นส่วนประกอบที่สกัดจริงและจินตภาพของไซนัสซอยที่ซับซ้อน ผู้อ่านที่ชาญฉลาดจะทราบว่าองค์ประกอบจริงและจินตภาพนั้นเหมือนกันแน่นอนพวกมันจะอยู่ห่างจากกัน 90 องศา ( ) เนื่องจากพวกมันอยู่ห่างจากเฟส 90 องศาพวกมันจะเป็นมุมฉากและสามารถ "จับ" ส่วนประกอบใด ๆ ของสัญญาณที่ความถี่นั้นπ2

ความสัมพันธ์ระหว่างเลขชี้กำลังและโคไซน์ / ไซน์นั้นได้รับจากสูตรของออยเลอร์ -

ejx=cos(x)+jsin(x)

สิ่งนี้ทำให้เราสามารถปรับเปลี่ยนการแปลงฟูริเยร์ดังนี้ -

H(f)=h(t)ej2πftdt=h(t)(cos(2πft)jsin(2πft))dt

ที่ความถี่ลบการแปลงฟูริเยร์จะกลายเป็นดังต่อไปนี้ -

H(f)=h(t)(cos(2π(f)t)jsin(2π(f)t))dt=h(t)(cos(2πft)+jsin(2πft))dt

การเปรียบเทียบรุ่นความถี่ลบกับรุ่นความถี่บวกแสดงว่าโคไซน์เหมือนกันขณะที่ไซน์กลับด้าน พวกเขายังคงอยู่ห่างจากระยะ 90 องศาซึ่งกันและกันทำให้พวกเขาสามารถจับสัญญาณสัญญาณใด ๆ ที่ความถี่ (ลบ)

เนื่องจากทั้งไซน์ซอยด์ความถี่บวกและลบเป็น 90 องศาออกจากเฟสและมีขนาดเท่ากันพวกเขาทั้งสองจะตอบสนองต่อสัญญาณจริงในวิธีเดียวกัน หรือขนาดของการตอบสนองของพวกเขาจะเหมือนกัน แต่ระยะสหสัมพันธ์จะแตกต่างกัน

แก้ไข: โดยเฉพาะความสัมพันธ์ของความถี่เชิงลบคือการรวมกันของความสัมพันธ์ความถี่เชิงบวก (เนื่องจากองค์ประกอบไซน์จินตภาพกลับหัว) สำหรับสัญญาณจริง ในแง่คณิตศาสตร์นี่คือดังที่ Dilip ชี้ให้เห็นดังต่อไปนี้ -

H(f)=[H(f)]

วิธีคิดอีกอย่างคือ:

ส่วนประกอบในจินตนาการเป็นเพียงแค่นั้น .. จินตนาการ! มันเป็นเครื่องมือที่ช่วยให้การใช้ระนาบพิเศษในการดูสิ่งต่าง ๆ และทำให้การประมวลผลสัญญาณดิจิตอล (และอนาล็อก) เป็นไปได้ถ้าไม่ง่ายกว่าการใช้สมการเชิงอนุพันธ์!

แต่เราไม่สามารถฝ่าฝืนกฎทางตรรกะของธรรมชาติเราไม่สามารถทำอะไร 'จริง' กับเนื้อหาจินตภาพและดังนั้นจึงต้องยกเลิกตัวเองอย่างมีประสิทธิภาพก่อนที่จะกลับสู่ความเป็นจริง สิ่งนี้มีลักษณะอย่างไรในการแปลงฟูริเยร์ของสัญญาณตามเวลา (โดเมนความถี่ที่ซับซ้อน) หากเราเพิ่ม / บวกองค์ประกอบความถี่บวกและลบของสัญญาณที่ชิ้นส่วนจินตภาพยกเลิกนี่คือสิ่งที่เราหมายถึงโดยการพูดว่าองค์ประกอบบวกและลบเชื่อมต่อกัน โปรดสังเกตว่าเมื่อ FT ได้รับสัญญาณเวลามีสัญญาณคอนจูเกตเหล่านี้โดยมีส่วน 'ของจริง' ของแต่ละการแบ่งปันขนาด, ครึ่งหนึ่งในโดเมนเชิงบวก, ครึ่งหนึ่งในเชิงบวก, ครึ่งหนึ่งในเชิงลบ เนื้อหาในจินตนาการและให้เนื้อหาจริงเท่านั้น

หมายความว่าเราไม่สามารถสร้างแรงดันไฟฟ้าที่เป็นโวลต์ เห็นได้ชัดว่าเราสามารถใช้ตัวเลขจินตภาพเพื่อเป็นตัวแทนของสัญญาณในโลกแห่งความจริงที่มีค่าสองเวกเตอร์เช่นคลื่น EM แบบโพลาไรซ์แบบวงกลม5i


คำตอบที่ดี - นิดนึงนิดหน่อย แต่ฉันไม่ได้อยู่บนกระดานด้วย "เพราะพวกเขาเหมือนกันทุกอย่างที่หนึ่งมีความสัมพันธ์กับคนอื่น ๆ ก็จะมีขนาดเท่ากันแน่นอนและการเปลี่ยนแปลงเฟส 90 องศา" ฉันรู้ว่าคุณกำลังพยายามจะพูดอะไร (เท่าที่คุณรู้) ไซน์มีความสัมพันธ์กับไซน์ (คะแนน 1) แต่จะไม่สัมพันธ์เลยด้วยโคไซน์เลย (คะแนน 0) มันเป็นสัญญาณเดียวกัน แต่มีเฟสต่างกันหลังจากนั้น
Spacey

คุณถูก. ยังมีปัญหาร้ายแรงอีกอย่างหนึ่งเช่นกัน ฉันจะแก้ไขในภายหลัง
Jim Clay

มันจะดีถ้าคุณสามารถแก้ไขคำตอบของคุณเพื่อตอบสนองต่อคำถามที่เกี่ยวกับ DFT (แม้ว่ามันจะบอกว่า FFT ในชื่อเรื่อง) แทนที่จะให้ทฤษฎีทั่วไปของการแปลงฟูริเยร์
Dilip Sarwate

@DilipSarwate เป้าหมายของฉันคือการช่วยให้ผู้ถามเข้าใจและฉันคิดว่าแนวทางของฉันดีที่สุด แม้ว่าฉันจะตอบคำถามของคุณเพื่อทำคณิตศาสตร์ไม่ต่อเนื่อง
Jim Clay

@JimClay วิธีการของคุณจะได้รับการชื่นชมอย่างมากจากผู้อ่านทั้งหมดของ dsp.SE และฉันหวังว่าคุณจะหาเวลาที่จะให้คำตอบของคุณคำตอบที่ดีอย่างแท้จริงโดยอย่างชัดเจนรวมทั้งในคำตอบของคุณสิ่งที่เหลืออยู่ในขณะนี้สำหรับผู้อ่านที่จะอนุมาน: ได้แก่ . สมการแสดงให้เห็นว่า (และด้วยเหตุนี้ ) เมื่อเป็นสัญญาณมูลค่าจริงและ นี่คือ "การมิเรอร์" ที่ OP กำลังถามเกี่ยวกับ กล่าวอีกนัยหนึ่งฉันขอให้คุณแก้ไขคำตอบเพื่อตอบคำถามที่ถามจริง (ตามที่ฉันขอในความคิดเห็นก่อนหน้า) | H ( - f ) | = | H ( f ) | x ( t )H(f)=[H(f)]|H(f)|=|H(f)|x(t)
Dilip Sarwate

20

FFT (หรือเร็วแปลงฟูเรีย) เป็นจริงอัลกอริทึมในการคำนวณที่ไม่ต่อเนื่องฟูริเยร์แปลงหรือ DFT การนำไปใช้โดยทั่วไปจะทำให้การคำนวณ DFT เป็นไปอย่างรวดเร็วโดยการใช้ประโยชน์จากข้อเท็จจริงที่ว่า , จำนวนจุดข้อมูลเป็นจำนวนเต็มรวมซึ่งไม่ใช่กรณีที่นี่เนื่องจากเป็นจำนวนเฉพาะ (แม้ว่า FFTs จะมีอยู่ในกรณีที่เป็นไพรม์ แต่ก็ใช้สูตรอื่นที่อาจนำไปใช้หรือไม่ได้ใช้ใน MATLAB) แท้จริงแล้วหลายคนจงใจเลือก ให้อยู่ในรูปแบบหรือเพื่อเร่งการคำนวณ DFT ผ่าน FFT101 N N 2 k 4 kN101NN2k4k

เมื่อหันไปใช้คำถามว่าทำไมการสะท้อนจึงเกิดขึ้น hotpaw2 ได้ระบุเหตุผลไว้อย่างชัดเจนและต่อไปนี้เป็นเพียงการกรอกรายละเอียด DFT ของลำดับของ จุดข้อมูลถูกกำหนดให้เป็นลำดับโดยที่ โดยที่{-1} จะเห็นได้ชัดว่าคือโดยทั่วไปแล้วลำดับที่ซับซ้อนตามตัวอักษรแม้ว่าเป็นลำดับที่มีมูลค่าจริง แต่ทราบว่าเมื่อไหร่x=(x[0],x[1],x[2],,x[N1])NX=(X[0],X[1],X[2],,X[N1])

X[m]=n=0N1x[n](exp(j2πmN))n,m=0,1,,N1
j=1Xxxเป็นลำดับจริงมูลค่าเป็นจำนวนจริง นอกจากนี้หากเป็นแม้กระทั่งจำนวนแล้วตั้งแต่เรายังมีที่ เป็นจำนวนจริง แต่ไม่ว่าจะเป็นเลขคี่หรือแม้กระทั่ง DFTของลำดับที่มีมูลค่าจริง มีคุณสมบัติสมมาตรของ Hermitianที่คุณได้กล่าวถึงในความคิดเห็น เรามีการแก้ไข ,X[0]=n=0N1x[n]Nexp(jπ)=1
X[N2]=n=0N1x[n](exp(j2πN/2N))n=n=0N1x[n](1)n
NXx m1mN1, ดังนั้นสำหรับ , * ในกรณีพิเศษนี้โปรดทราบว่าถ้าเราเลือกเมื่อเป็นคู่เราจะได้ซึ่งเป็นการยืนยันของเรา ข้อสรุปก่อนหน้านี้ที่
X[m]=n=0N1x[n](exp(j2πmN))nX[Nm]=n=0N1x[n](exp(j2πNmN))n=n=0N1x[n](exp(j2π+j2πmN))n=n=0N1x[n](exp(j2πmN))n=(X[m])
1mN1X[Nm]=(X[m])m=N/2NX[N/2]=(X[N/2])X[N/2]เป็นจำนวนจริง โปรดทราบว่าผลกระทบของคุณสมบัติสมมาตรของ Hermitian คือ

-th ถังในผิวเผินลำดับมูลค่าจริงที่มีขนาดเดียวกันเป็นถัง -thm(Nm)

คน MATLABi จะต้องแปลสิ่งนี้เป็นบัญชีเพราะอาร์เรย์ของ MATLAB นั้นมีหมายเลขตั้งแต่ขึ้นไป1


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

x[n]=1+sin(2π(0.01n)), 0n100
x[0]=x[100]=1101
X[m]=n=0100(1+sin(2π(n100)))(exp(j2πm101))n
100101X[m]สำหรับไม่ใช่ศูนย์แม้ว่าเล็ก ในทางกลับกันสมมติว่าคุณต้องปรับอาเรย์ในโปรแกรม MATLAB ของคุณให้มีตัวอย่างที่ดังนั้นสิ่งที่คุณมีคือ จากนั้น DFT คือ คุณจะเห็นว่าผิวเผินของคุณจะว่า (หรืออย่างน้อยภายในปัดเศษข้อผิดพลาด) และผกผัน DFT จะให้ที่ , 2m99t100t=0,0.01,0.02,,0.99
x[n]=1+sin(2π(0.01n)), 0n99.
X[m]=n=099(1+sin(2π(n100)))(exp(j2πm100))n,
X=(100,50j,0,0,,0,50j)0n99
x[n]=1100m=099X[m](exp(j2πn100))m=1100[10050jexp(j2πn100)1+50j(exp(j2πn100))99]=1+12j[exp(j2πn100)exp(j2πn100)]=1+sin(2π(0.01n))
ซึ่งเป็นสิ่งที่คุณเริ่มต้นอย่างแม่นยำ

ดังนั้นมันเป็นไปได้ที่จะบอกจาก FFT ถ้าสัญญาณเป็นระยะหรือไม่ ?
displayname

@displayname นั่นเป็นคำถามแยกต่างหากที่ควรถามด้วยตนเอง (และอาจถูกถามและตอบแล้ว)
Dilip Sarwate

เมื่อฉันงัดถังสมมาตรคอนจูเกตอย่างระมัดระวัง [โดยการเขียน 0 + 0i ลงในนั้น] และสร้างสัญญาณโดเมนเวลาโดยใช้ ifft ขนาดของสัญญาณโดเมนเวลาที่สร้างใหม่จะลดลงครึ่งหนึ่ง นี่เป็นเรื่องปกติหรือเป็นปัญหาการใช้เครื่องมือหรือไม่ ฉันจะดูแลการปรับสภาพเอาต์พุต FFT และกลับด้านหลังจาก iFFT
ราชา

14

โปรดทราบว่าผลลัพธ์ FFT จะถูกมิร์เรอร์ (เช่นเดียวกับการผันสมมาตร) เฉพาะในกรณีที่ข้อมูลเข้าเป็นจริง

สำหรับข้อมูลที่ป้อนเข้าจริงอย่างเคร่งครัดภาพสะท้อนสองภาพในผลลัพธ์ FFT จะยกเลิกส่วนจินตภาพของไซนัสด์ที่ซับซ้อนใด ๆ ดังนั้นจึงรวมกับไซน์ซอยจริงอย่างเคร่งครัด คลื่นไซน์จริง

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

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