【问题标题】:Sampling and DTFT in MatlabMatlab中的采样和DTFT
【发布时间】:2014-04-14 10:46:17
【问题描述】:

我需要产生一个信号 x=-2*cos(100*pi*n)+2*cos(140*pi*n)+cos(200*pi*n) 所以我这样说:

N=1024;
for n=1:N
    x=-2*cos(100*pi*n)+2*cos(140*pi*n)+cos(200*pi*n);
end

但我得到的是结果一直给出 1 我尝试根据每个 n 测试每个值,并且对于任何 n 都得到相同的结果 例如,n=1 的 -2*cos(100*pi*n) 必须是 -1.393310473。取而代之的是,Matlab 给它的结果是 -2 并且它总是给任何 n 给 -2 我不知道如何解决它,所以我希望有人能帮助我!谢谢!

【问题讨论】:

  • 你是怎么得到结果-1.393310473的?

标签: matlab


【解决方案1】:

不知道你从哪里知道-2*cos(100*pi) 应该是-2 以外的任何东西。也许您不知道 Matlab 以弧度工作?

看看你的表情。每个术语都可以分解为包含2*pi*(an integer)。你应该知道cos(2*pi*(an integer)) = 1。

所以结果完全符合预期。

您所看到的基本上是对波形进行欠采样时发生的情况。您可能知道,奈奎斯特准则表明您需要有一个至少比当前最高频率分量大两倍的采样率;但在您的情况下,您每 50、70、100 个完整周期采样一个点。所以你“远远超出了奈奎斯特”。而这只能通过更仔细地抽样来解决。

例如,你可以这样做:

t = linspace(0, 1, 1024); % sample the waveform 1024 times between 0 and 1
f1 = 50;
f2 = 70;
f3 = 100;
signal = -2*cos(2*pi*f1*t) + 2*cos(2*pi*f2*t) + cos(2*pi*f3*t);

figure; plot(t, signal)

【讨论】:

  • 我明白了,您能否为我建议一些理想的方法来创建 x(n) =-2*cos(100*pin)+2*cos(140*pi n)+cos(200*pi*n)!?谢谢!
  • 你能解释一下你想要的结果吗?如果你坚持认为n 是一个整数,那么我无能为力。但是,如果您认识到“信号”通常具有时间分量,那么您应该能够看到我上面给出的代码 sn-p 正是我认为您需要的。如果不是这样,您需要更清楚地解释您想要什么以及为什么。
【解决方案2】:

我认为您在进行计算时使用了度数,所以这样做:

n = 1:1024
x=-2*cosd(100*pi*n)+2*cosd(140*pi*n)+cosd(200*pi*n);

cosd 使用度数而不是弧度。弧度是cos 的默认值,因此当使用度数输入时,matlab 有一个单独的函数。对我来说,这给了:

-2*cosd(100*pi*1) = -1.3933

我使用的第一个术语:

x=-2*cosd(100*pi*1)+2*cosd(140*pi*1)+cosd(200*pi*1)
x = -1.0693

还请注意,我将 n 定义为 n = 1:1024;这将给出 1,2,...,1024 中的所有整数, 无需使用 for 循环,因为 Matlab 的许多内置函数都是矢量化的。这意味着您可以只输入一个向量,它将计算向量中每个元素的函数。

【讨论】:

    猜你喜欢
    • 2013-01-26
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-14
    相关资源
    最近更新 更多