如何使用C#生成方波?
我想生成一个数字信号,然后将其用于实现 ASK(幅移键控)信号。
假设消息位为 10110,数据速率:3.9 Khz & 3.9 Khz幅度 A.
生成方波信号(数字)的最佳方法是什么。
我尝试了以下代码,但结果不是我想要的。
double[] x = new double[1000];
double[] y = new double[1000];
double freq = 3900.0;
for (int k = 0; k < y.Length; k++)
{
x[k] = k;
y[k] = (4 / Math.PI) * (((Math.Sin(((2 * k) - 1) * (2 * Math.PI * freq))) / ((2 * k) - 1)));
}
// Plot Square Wave
plotSquare(x, y, Msg);
I would like to generate a digital signal, which'll then be used to implement an ASK(Amplitude Shift Keying) Signal.
Let's say the message bits are 10110, data rate : 3.9 Khz & amplitude A.
What would be the best way to generate a Square signal(Digital).
I tried the following code, but the outcome is not a desired one.
double[] x = new double[1000];
double[] y = new double[1000];
double freq = 3900.0;
for (int k = 0; k < y.Length; k++)
{
x[k] = k;
y[k] = (4 / Math.PI) * (((Math.Sin(((2 * k) - 1) * (2 * Math.PI * freq))) / ((2 * k) - 1)));
}
// Plot Square Wave
plotSquare(x, y, Msg);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我能想到的最简单的方法是将 y 设置为正弦波的符号,并考虑到它为零的情况。我不知道 C# 是否有三重运算符,但这样的东西可能有效:
The easiest way I can think of is to set y to be sign of a sine wave, making allowances for when it equals zero. I don't know if C# has the triple-operator, but something like this might work:
Math.Sin 对于正弦波很有用,但方波应该简单得多(即信号在一个周期内为“高”,然后在一个周期内为“低”)。如果你在任何地方都有一个
Math.Sin
,你就会生成一个正弦波,而不是方波。请记住,方波可以在有条件(x>y)的情况下生成,而正弦波需要完整的数学运算,因此它的效率也高得多。Math.Sin
is useful for sine wave, but a square wave should be far, far simpler (i.e. signal is 'high' for a period, then 'low' for a period). If you have aMath.Sin
anywhere, you are generate a sine wave, not a square wave. Bearing in mind a square wave can be generated with a condition (is x>y) and a sine wave needs a full mathematical operation, it's far more efficient, too.我想到了 C# 的 迭代器块 支持:
像这样使用:
C#'s Iterator Block support comes to mind:
use like this: