ทำไม 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)e−j2πftdt

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

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

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

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

ejx=cos(x)+j∗sin(x)

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

H(f)=∫h(t)e−j2πftdt=∫h(t)(cos(2πft)−j∗sin(2πft))dt

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

H(−f)=∫h(t)(cos(2π(−f)t)−j∗sin(2π(−f)t))dt=∫h(t)(cos(2πft)+j∗sin(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[N−1])NX=(X[0],X[1],X[2],…,X[N−1])

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

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

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


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

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