如何在Matlab中使用circshift?我究竟做错了什么?

时间:2010-01-03 13:38:42

标签: math matlab

我想在Matlab中绘制“油腻”测试信号,然后在同一图中绘制高斯函数。下面的脚本就是这样做的。

但我希望能够将高斯函数放在某个位置,所以我看到其他人经常使用CIRCSHIFT移动图。

当我使用它时,我可以向左或向右移动高斯功能,但不能向上和向下移动。

脚本中使用的PGAUSS来自LTFAT DSP第三方工具箱,但它可以用于调试任何功能。例如。 -x ^ 2

有人可以弄明白,我做错了吗?

以下是[0 0]的外观 alt text http://img268.imageshack.us/img268/1130/66837635.png

以下是[0 111] alt text http://img684.imageshack.us/img684/2386/0111q.png

以下是[111 0]的外观 alt text http://img194.imageshack.us/img194/8760/1110d.png

很多爱, 路易丝

g = greasy;

fs = 16000;
Lg = length(g);

% -2441 so just get the first 500 points
L2 = floor(Lg/2)+1 - 2441;

gf = greasy;
gf = gf(1:L2);

hold on
plot (1:L2,gf);
xlabel('Time / samples');
ylabel('Amplitude');

% Contructing values to make the plot look as desired
L = 500;
tfr = 1;
cent = 300;

%gw = pgauss(L,tfr,cent)
% Here I would have expected the Gauss function to be
% moved down, but nothing happens.
gw = circshift(pgauss(L,tfr,cent), [0 -1]);
plot(gw,'Color','red');

% Multiply the signal with the Gauss window
figure(2);
plot(gf.*gw);

3 个答案:

答案 0 :(得分:2)

您要做的是向高斯函数添加常数因子以向上或向下移动。

  

B = [1,2,3,4,5]

B =

1 2 3 4 5

  

尺寸(B)

ans =

1 5

  

circshift(B,[2 0])

它什么也没做,因为B只有一行,所以无论rowshift的值如何,这一行都会返回原来的位置

ans =

1 2 3 4 5

  

circshift(B,[0 2])

ans =

4 5 1 2 3

  

B + 5

ans =

6 7 8 9 10

答案 1 :(得分:1)

如果你想让它向下移动你必须使用[1,0]而不是[0,-1]

看看这个

  

A = [1,2,3; 4,5,6; 7,8,9]

A =

1 2 3

4 5 6

7 8 9

  

circshift(A,[0 -1])

ans =

2 3 1

5 6 4

8 9 7

  

circshift(A,[1 0])

ans =

7 8 9

1 2 3

4 5 6

答案 2 :(得分:1)

如果pgauss(L,tfr,cent)是一个列向量,那么对于任何X来说,当前的旋转(a,[0 X])都不会改变它,因为它在第二个维度上旋转,即1。

如果你想在图表中向上移动高斯,你必须为它添加一个数字:

gw = pgauss(L,tfr,cent) - 1;