2010-11-21 58 views
1

假設我有三個複雜的波形(包括許多正弦波):A,B和C.每個波形的頻率分別爲:550,600,700 Hz。傅立葉級數變換恢復原始信號

現在我添加三個信號,即做的疊加以獲得信號D.

我的目標是單獨取回三個原始信號A,B和C.

我繪製了傅立葉光譜,其中我得到了550,660和700Hz的主峯。還有其他較小的山峯。我如何知道哪些波峯與哪些波形相關聯,以便我可以重新創建原始波形A,B和C?謝謝。

回答

1

不知道你正在使用哪種技術(DSP芯片,fftw等),不可能給你實現細節。但是,是的,應用快速傅立葉變換,然後假設您想重建550,600和700處的三個純正弦波,FFT將爲您提供每個的幅度和相位。然後,形式爲y=a*sin(wt+p)的簡單正弦表達式將重建信號。 「a」和「p」是來自FFT的幅度和相位,並且w = 2 * pi * f,其中f是550Hz,600Hz或700Hz。

+0

我只是使用快速傅立葉變換的等式並編寫代碼。主要問題是我不想重建純正弦波。請記住,每個波形A,B和C都由許多正弦波組成。例如,A可以是方波,B是三角​​波等,我的目的是從信號D重構它們,如上所述 – user515285 2010-11-21 18:30:19

+0

如果A,B或C是方波,三角波或除正弦波以外的任何其他信號,則可以不能從頻譜中的一個頻率重構它。你也需要它的諧波。首先,我建議如果您使用C/C++/C#/除了嵌入式系統以外的其他任何東西,則可以使用FFTW這樣的FFT庫。其次,請閱讀http://cnx.org/content/m0041/latest/。對於550Hz的波形,您必須取得550Hz的基波以及2 * 550,3 * 550,4 * 550,5 * 550等相當數量的諧波。 – Reinderien 2010-11-21 18:54:43

+0

從傅里葉級數中,每個頻率都乘以通過像你這樣的一個不變因素正確指出。但是,我怎麼知道每個頻率乘以什麼。這個因素可以是任何東西,不一定是2,3,4,5 ......(就像你上面指出的那樣,即2 * 550,3 * 550 ......)。請注意,從波形D我將需要重建三個信號A B C,我沒有任何先驗信息。我只是說方波和三角波爲例。但他們可能是任何東西。 – user515285 2010-11-22 17:58:42

5

如果A,B和C不是純正弦波,如果沒有附加信息,您想要做什麼是不可能的。假設A是頻率爲100和200Hz的正弦波,具有300和400Hz的 B和具有500和600Hz的C的和。現在考慮頻率爲012和1000Hz的頻率爲 的信號D,頻率爲200和500Hz的E,頻率爲400和600Hz的F,每個分量具有與A,B和C的分量相同的相位和幅度。 ( A + B + C)將具有與(D + E + F)相同的FFT,因此您無法區分它們。

+0

同意。但是,當我聽到三個波的組合時,我可以明顯地發現有三個波。如果我能聽到它,那麼必須有一種方法來使用程序分離波。 – user515285 2010-11-23 17:23:49

+0

@user:也許您正在聽的信號具有特殊屬性,可以很容易地區分A,B和C組件 - 例如, A,B和C中的每一個都採用強基本形式加上一系列較弱的諧波。這將屬於我在我的答案中提到的「額外信息」 - 但正如你所說的那樣,問題一般來說是無法解決的。 – 2010-11-23 17:47:09

2

認識到您需要在FFT之前應用window function是很重要的,否則您將從您應用於時域數據的隱式矩形窗口的效果中獲得頻域中的人爲因素。一個好的通用窗口函數是Hann (aka Hanning) window

0

您是否需要添加任何形式的複雜信號?他們有圖案嗎?如果你想檢索任何形式的信號,這將是不可能的。但是在某些情況下,你有一個限制材料,你可以在那裏工作。例如在melodyne中,它們可以分隔一些音調定義樂器的材料:http://www.youtube.com/watch?v=jFCjv4_jqAY

+0

像Reinderien一樣,如果我知道A B或C的模式,就可以實現上述目標。但重點是我必須明白它是什麼。我只是給出波形D.從那我需要重建三個信號。當我看到傅里葉頻譜時,我看到很多諧波,但我不知道選哪一個來獲得三個波的每一個,即AB或C. – user515285 2010-11-22 17:53:42

+0

我不認爲有可能檢索A,B或C如果你對他們完全不瞭解...... AB或C可能是一組無限可能的信號! – Nemeth 2010-12-01 19:11:04