如何计算/创建通过连接数组创建的信号的相移

时间:2016-05-21 12:46:00

标签: matlab octave

我在octave / matlab中创建了一个信号,它是一个半波,(变量sin_half)和半个方波,(变量square_half)我希望相移组合信号,(变量comb_sig),因为它是一个连接的信号。我怎样才能做到这一点?

我的目标是在加入一个信号的前半部分和另一个信号的后半部分并将它们连接在一起时产生周期性信号。然后我想将组合信号相移,好像它是一个信号。

(图1)中的动画可以看出,我现在所拥有的是sinwave信号的一半只是从"中心"并且方波半部仅相移到"中心"而不是将整个信号相移到一起,就像 中的例子(图2)。如何将变量comb_sig全部移位到一起作为一个组合信号,如(图2)

Comb signal animated not periodic

Comb signal animated periodic

下面是0度和180度相移应该是什么样子的静态图像。figure 1上的动画中,当相位时,方波从未到达另一侧移位是180度我该如何解决这个问题?

Static phase shift image 0 degree and 180 degree phase shift should look like

见下面的代码:

Vth = 0; % Threshold
amp = 1; % Amplitude of input/output
freq = 1; % frequency
for n=1:2:360 %phase shift
    ysin = amp*sin(freq*t+(n*pi/180)); % Entire sine wave creation
    ysquare = amp*sign(ysin - Vth); % Entire square wave creation 

    sin_half=ysin(1,1:length(ysin)/2); % 1st half of wave choosen (sine wave)
    square_half=ysquare(end-length(ysquare)/2+1:end); % 2nd half of wave choosen a (square wave)
    comb_sig=[sin_half,square_half]; % 1st half and 2nd half of waves combined together

    plot(t,comb_sig)
    axis([-.1 2.2*pi -1.5 1.5])
    pause(.01)
end

有没有人知道是否有一个公式/等式/所需的步骤可以让我这样做。我当时认为变量comb_sig需要乘以某种东西,但我不确定是什么。

PS:我使用octave 4.0,类似于matlab

1 个答案:

答案 0 :(得分:0)

这是更新的matlab代码。

amp = 1; % Amplitude of input/output
freq = 1; % frequency
time = 1/freq; %time
t=0:0.001:(time-0.001);
tHalf=t(1:size(t,2)/2);
ysinHalf = amp*sin(2*pi*freq*(tHalf)); % First half sine wave creation
ysquareHalf = -amp*ones(1,size(ysinHalf,2)); % Last half square wave creation 
ywave=[ysinHalf ysquareHalf];
for n=0:2:360
    phaseShifted=circshift(ywave,[0 -round(n*size(ywave,2)/360)]);
    plot(t,phaseShifted);
    axis([0 time -(amp+0.5) (amp+0.5)]);
    pause(.01)
end