八度 - 生成方波(信号/脉冲)

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 的步长,然后重试。

以上是关于八度 - 生成方波(信号/脉冲)的主要内容,如果未能解决你的问题,请参考以下文章

如何讲正弦波转化为方波?频率不变。

信号转换 | 如何将正弦波转换成方波?

连载9:用余弦信号合成方波信号

怎样使用STM32准确的产生任意个数的脉冲信号

matlab 实现脉冲信号阶跃信号和斜波信号

正弦波转换为方波