MATLAB:将位映射到载波

时间:2011-04-03 02:43:23

标签: arrays matlab signal-processing

我有一个位数组,例如下面的一个位,我需要在它们上面放一个载波。问题是:这可能没有循环吗?

例如,假设您正在使用频移键控。如果该位为“1”,则该信号应为频率为10,000 Hz的正弦波,如果该位为“0”,则该信号应为频率为8,000 Hz的正弦波。

位阵列:

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

如果我可以在没有循环的单个操作中执行所有操作,那将是很好的。

感谢。

1 个答案:

答案 0 :(得分:1)

如果t是标量,那么您可以使用单行矢量化解决方案替换for循环:

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

但是,如果您正在执行frequency-shift keying,您似乎应该将0向量中的每个1bits扩展为具有给定值的正弦波持续时间和频率。例如,为每个0创建一个4个正弦周期(0.1毫秒),8 kHz的调制信号,每个1的10个正弦周期(0.1毫秒),你可以使用该函数KRON喜欢这样:

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