2011-04-03 55 views
0

我有一些位,比如下面的位,我需要在它們上面放一個載波。問題是:這可能沒有循環?MATLAB:將位映射到載波

例如,假設您正在使用頻移鍵控。如果該位爲「1」,則該信號應該是頻率爲10,000Hz的正弦波,並且如果該位爲「0」,則該信號應該是具有8,000Hz頻率的正弦波。

位陣列:

bits = [0 0 0 1 0 1 1 0 1 0 1 0 1 0 1 0 1] 

循環代碼:

for i = 1:length(bits) 
    if bits(i) == 1 
     signal = [signal sin(2*pi*10000*t)] 
    else 
     signal = [signal sin(2*pi*8000*t)] 
    end  
end 

這將是很好,如果我可以在所有沒有循環單一操作執行此。

謝謝。

+0

是't'矢量還是標量?它在循環內改變了嗎?循環結束時'signal'的大小是多少? – 2011-04-03 03:23:27

+0

如果你有足夠的內存,你總是可以通過比特時間長度的位數來展開循環。 – hotpaw2 2011-04-03 08:00:50

+0

@ d'o-o'b:「位」永遠不會改變,所以我想這使它成爲一個標量。長度(信號)=長度(比特)。 – Eric 2011-04-03 17:24:39

回答

1

如果t是標量,那麼你可以用單行矢量化解決方案取代你的for循環:

signal = sin(2*pi*t.*(8000+2000.*bits)); 

但是,如果你正在做frequency-shift keying,好像你應該擴大各0或將bits矢量中的1轉換爲具有給定持續時間和頻率的正弦波。例如,以產生具有在10kHz以8kHz 4個正弦週期(0.1毫秒)對於每個0和5正弦週期(0.1毫秒)對於每個1的調製信號,則可以使用該函數KRON像這樣:

t = 0:5e-6:4.95e-4; 
signal = sin(2*pi.*(kron(bits,10000.*t)+kron(~bits,8000.*t)));