八度 - 生成方波(信号/脉冲)
Posted
技术标签:
【中文标题】八度 - 生成方波(信号/脉冲)【英文标题】:Octave - Generate Square Wave (Signal/Pulse) 【发布时间】:2020-04-06 21:22:58 【问题描述】:我想在 Octave/Matlab 中生成具有以下属性的周期性方波(信号/脉冲):
-
幅度为 0.5
0.02 秒的周期
平均 (Mittelwert) 为 0.5
到目前为止,我有这个:
T = 1/10;
t = linspace(0,T,1001);
y = square(2*pi*50*t);
plot(t,y);
axis([0 0.1 -1.5 1.5]);
产生这个结果:
您可能会看到幅度不正确,但由于我是一个新手,我不知道如何解决它。周期是正确的,但我仍然不确定从图形的角度来看这个平均值是多少......
【问题讨论】:
square
创建一个值为-1 and 1 的方波。 plot(t, 0.5*y)
之类的内容会是您要查找的内容吗?
为什么不能同时使用matlab和octave标签?它们是两个相似且相关的编程环境;有些问题可能与两者有关,例如将一个移植到另一个。
1. MATLAB 和 Octave 相似,但并不总是一对一的。如果您使用的是 Octave,那么在 Octave 中不起作用的 MATLAB 解决方案将不会对您有用。反过来也是一样。但是,如果您希望您的代码在两个平台上运行,您需要在您的问题中明确说明这一点。 2. *** 上不接受代码图像
过去,当一个人使用 Octave 但说他使用的是 MATLAB 时,已经发生过多次此类事件。所以我们提供了 MATLAB 解决方案。由于 OP 使用的是 Octave,因此这些解决方案不起作用,我们最终都在浪费时间。这就是为什么 MATLAB 和 Octave 的标签描述都明确表示只标记您正在使用的标签,除非问题明确涉及两者之间的异同。感谢您理解并解决您的问题。
如果您需要一个可以在两个平台上运行的解决方案,那么可以同时使用两个标签,但您需要明确说明您正在寻找这样的解决方案。
【参考方案1】:
这应该是非常快速和简单的编写,检查我的实现。
function y=square(t)
% License: public domain
t=t*(1/(pi));
y=ones(size(t));
y(find(bitand(abs(floor(t)),1)))=-1;
一个测试脚本:
t = -0.02:.001:.0625;
y = 0.5*square(2*pi*30*t);
plot(t,y,'-o')
【讨论】:
当square
是内置函数时,最好避免定义“square
”函数。
哎呀,我以为 OP 说 Octave 上不存在这样的功能。我的错。
@FangQ 它几乎可以按我的意愿工作,但是线条并不完全笔直,或者至少我看到的是这样,请查看ibb.co/7J9xCjN
斜率是由样本间距引起的 - 间距越小,看起来越陡峭。减小 t 的步长,然后重试。以上是关于八度 - 生成方波(信号/脉冲)的主要内容,如果未能解决你的问题,请参考以下文章