MATLAB: отображение битов в несущей - PullRequest
0 голосов
/ 03 апреля 2011

У меня есть массив битов, например, приведенный ниже, и мне нужно поместить несущую волну поверх них.Вопрос в следующем: возможно ли обойтись без зацикливания?

Например, предположим, что вы используете Frequency-Shift-Keying.Если бит равен «1», то сигнал должен быть синусоидальным с частотой 10000 Гц, а если бит равен «0», то сигнал должен быть синусоидальным с частотой 8000 Гц.

Bit-Array:

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 Ответ

1 голос
/ 04 апреля 2011

Если t - скаляр, вы можете заменить цикл for на однострочное векторизованное решение:

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

Однако, если вы делаете частотную манипуляцию , похоже, что вы должны расширять каждый 0 или 1 в вашем bits в синусоидальную волну с заданной продолжительностью и частота. Например, чтобы создать модулированный сигнал с 4 периодами синуса (0,1 мсек) при 8 кГц для каждого 0 и 5 периодами синуса (0,1 мсек) при 10 кГц для каждого 1, вы можете использовать функцию KRON вроде так:

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