【问题标题】:MATLAB: Mapping Bits to a Carrier WaveMATLAB:将位映射到载波
【发布时间】:2011-04-03 02:43:23
【问题描述】:

我有一个比特数组,如下面的,我需要在它们上面放一个载波。问题是:这是否可以在不循环的情况下完成?

例如,假设您正在使用频移键控。如果该位为“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

如果我可以在一个操作中执行所有这些操作而无需循环,那就太好了。

谢谢。

【问题讨论】:

  • t 是向量还是标量?它在循环内改变吗?循环结束时signal 的大小是多少?
  • 如果你有足够的内存,你总是可以用比特数乘以比特时间长度来展开循环。
  • @d'o-o'b:“位”永远不会改变,所以我想这使它成为一个标量。长度(信号)= 长度(位)。

标签: arrays matlab signal-processing


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 2013-05-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 2020-08-15
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多