我怎样才能在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)
但是在情节中,结果并不顺利,但是它过于剧烈。有没有办法选择"正弦曲线的每个峰值的幅度?
答案 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;