使用MATLAB实现BPSK

时间:2014-08-19 16:31:11

标签: matlab

我正在尝试编写一些简单 MATLAB代码来绘制BPSK,但代码无效。这是代码:

t=0:(1/1000):3;
figure(1);

s0=sin( (2*pi)*t );
s1=sin( (2*pi)*t+(pi) );

sout=[s0 s1];

plot(t,sout);
grid on;

2 个答案:

答案 0 :(得分:0)

如果你想绘制一个符号时间,你应该在同一个图上绘制这两个信号。

t = 0 : (1/1000) : 3;
s0 = sin((2*pi)*t);
s1=sin((2*pi)*t+pi);
plot(t, s0);
hold on
plot(t, s1, 'r');
grid

答案 1 :(得分:0)

您可以将此代码绘制为矢量化,而无需像Nematollah所建议的那样使用hold on。只需将每个数据跟踪放在单独的列中。 t向量可以保持不变。您的代码无效的原因是您放置了s0s1并将它们连接成一个1D数组。 t有3001个元素,而sout3001 * 2 = 6002个元素。尺寸不兼容,这就是您收到错误的原因。

您可以使用plot绘制多个信号,而无需使用hold on。只需确保每个跟踪都在一个单独的列中。使用代码设置,您只需转置s0s1即可。就这样:

t=0:(1/1000):3;
figure(1);

s0=sin( (2*pi)*t );
s1=sin( (2*pi)*t+(pi) );

sout=[s0.' s1.']; %// Change - transpose s0 and s1
plot(t,sout);

grid on;

这就是我得到的:

enter image description here

请注意,MATLAB会自动为您追踪颜色代码,看看每个数据跟踪在一个单独的列中的位置。


修改

您现在想要将这两个信号连接在一起(这实际上是BPSK应该做的事情)。我们可以通过扩展您拥有的时间向量,然后在您完成原始帖子时完成第二个信号来轻松完成此操作。您可以通过以下方式轻松完成此操作:

t=0:(1/1000):3;
figure(1);

s0=sin( (2*pi)*t );
s1=sin( (2*pi)*t+(pi) );

sout = [s0 s1]; %// Note we are concatenating now
tvec = [t t(end) + t]; %// NEW

plot(tvec, sout); %// Plot 2 signals together as 1

看一下这句话:

tvec = [t t(end) + t];

我创建了一个新的向量,其原始时间向量介于[0,3]之间。然后我扩展这个向量,以便我们从[0,3]获取时间向量,并将其偏移原始信号的最后时间值,即3.然后,我们将添加一个最后的[3,6]向量,因为我们将有两个信号,每个信号为3秒 - 因此为6秒。这就是我得到的:

enter image description here

看起来像BPSK给我! :)