Matlab中的可变幅度正弦曲线

时间:2015-04-15 14:49:26

标签: matlab

我怎样才能在Matlab中得到一个正弦曲线,每个奇数峰值的幅度= 1,每个偶数峰值的幅度= 0.5?我尝试过以下方法:

fs = 44100;
t1 = 0:(1/fs):0.1;
t2 = 0.1:(1/fs):0.2;
f = 5;

x1 = cos( 2*pi*f*t1 );
x2 = sin( 2*pi*f*t1 )-1;
x3 = cos( 2*pi*f*t2 );
x  = [ x1,x2,x3 ];
figure; plot(x)

但是在情节中,结果并不顺利,但是它过于剧烈。有没有办法选择"正弦曲线的每个峰值的幅度?

2 个答案:

答案 0 :(得分:2)

你所寻找的不是“正弦”。正如你已经注意到的那样,它是一种正弦组合。

通过考虑频域信号,您可以轻松获得所需内容。你得到一个振幅为1的振荡,另一个振荡为该频率的一半,振幅的一半和一个周期的相位偏移。

你得到的看起来像你想的那样(一个周期全振幅,下一个周期半振幅)等等。

我建议您查看正在生成的信号的频谱

plot(abs(fft(x1)));

仔细思考你为实现自己想要的目标必须做些什么;然后你可以实际调整

X1 = fft(x1);

向量,并通过

获得更正的x1_tilde
x1_tilde = ifft(x1);

答案 1 :(得分:2)

您可以拍摄波形的一部分,并使用不同的缩放因子拼凑多个副本。例如。像这样

fs = 44100;
f = 5;

t = 0:(1/fs):0.1;
x1 = sin(2*pi * f * t);
x = [x1, -0.5 * x1, x1, -0.5 * x1, x1, -0.5 * x1, x1, -0.5 * x1];

或者像这样

t = 0:(1/fs):0.2;
x1 = sin(2*pi * f * t);
x = [x1, 0.5 * x1, x1, 0.5 * x1];

或者你可以通过另一个周期函数modulate一个正弦的幅度:

t = 0:(1/fs):0.8;
x1 = cos(2*pi * f * t);
x2 = (cos(2*pi * f * t) + 3) / 4;
x = x1 .* x2;