我有一个位数组,例如下面的一个位,我需要在它们上面放一个载波。问题是:这可能没有循环吗?
例如,假设您正在使用频移键控。如果该位为“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
如果我可以在没有循环的单个操作中执行所有操作,那将是很好的。
感谢。
答案 0 :(得分:1)
如果t
是标量,那么您可以使用单行矢量化解决方案替换for循环:
signal = sin(2*pi*t.*(8000+2000.*bits));
但是,如果您正在执行frequency-shift keying,您似乎应该将0
向量中的每个1
或bits
扩展为具有给定值的正弦波持续时间和频率。例如,为每个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)));