2015-03-03 117 views
1

我正在處理Matlab中的複數,並且我的角度有一些問題。防止Matlab將複數中的相角纏繞到0-2pi

我有角度的矢量中,Ph然後我想構造複雜數的向量C作爲:

C=exp(j*Ph). 

的問題是,博士包含負相,因爲它具有奇對稱,以便它可以是進一步用於使用IFFT合成信號。這個負相位在矢量C中被包裹到0-2pi,失去它們的奇對稱性。

有什麼辦法可以阻止Matlab環繞角度?

做這樣的事情可能是不可能的,因爲我們知道數學上-30º的階段與330º的階段相同。但我想知道是否包裝階段正在破壞他們想要的奇怪的對稱。

我附上一張照片說明我的問題,謝謝!

enter image description here

+0

我不認爲相位折返是這裏的問題 - 你發送給IFFT函數值在直角座標,所以角被繪製階段(其中我在文檔中找不到 - 角度是正常的選擇)實際上並不是函數的輸入。只要輸入是共軛對稱的,它應該沒問題,如果你的實數是偶數並且你的虛數是奇對稱的,那就是真的。我不確定你的描述和情節是否正確 - 你所描述的與我所看到的並不完全一致,但我也可能會誤解某些東西...... – Katie 2015-03-03 16:16:49

+0

C的實際部分是偶對稱的,虛部是奇對稱的,對不起,我改變了上面的條款,現在編輯。我認爲這裏的問題是使用「freqz」功能。如果我將Y的相位作爲角度(fft(Y)),我將得到與存儲在Ph矢量中相同的相位。謝謝! – JavaRar 2015-03-03 16:27:54

回答

1

如果你有映射工具箱,有一個wrapToPi功能,將你想要做什麼。

沒有它,你需要實現自己:

function [ lambdaWrapped ] = myWrapToPi(lambda) 
    lambdaWrapped = lambda - floor(lambda/(2*pi)) * 2*pi; 
    lambdaWrapped(lambdaWrapped > pi) = lambdaWrapped(lambdaWrapped > pi) - 2*pi; 
end 

第一行包一切從0-2pi,和下一個需要是比PI更大的值,並將其移動到-pi到0範圍。

phase = linspace(0, 2*pi, 100); 
plot(phase); 
plot(myWrapToPi(phase)); 

Original plot Wrapped plot

+0

謝謝凱蒂,但它不能解決我的問題。如果我想定義-pi和pi之間的奇對稱性,你建議的就好了。我真正想要的是構造一個在其相位上具有奇對稱性的複數,即phase(k)= - phase(N-k),其中N是元素的數量。但它似乎是不可能的,因爲Matlab將任何負面的階段包裝到0-2pi – JavaRar 2015-03-03 14:12:09

+0

@JavaRar,我認爲你的評論的結尾被切斷了。我想你需要擴展你的問題來澄清一下 - 我不確定你從哪裏得到0-2pi的情節。用於獲得複數相位角的'angle'函數將-pi轉換爲pi。 – Katie 2015-03-03 14:24:36

+0

您編輯的評論剛剛通過。我認爲纏繞 - pi會導致階段中任何奇怪的對稱出現,就像你想要的一樣,儘管我很困惑爲什麼除了在繪製對稱圖形或製作對稱驗證程序時使對稱性明顯之外,還需要它。就像你在你的問題中所說的那樣,-30度和330度在數學上是相同的,因爲你正在使用圓形單位。當你做IFFT時不應該引起任何問題。您是否遇到與您認爲相位包裝有關的特定問題? – Katie 2015-03-03 14:31:54