Matlab中的采样和DTFT

时间:2014-04-14 02:30:46

标签: matlab

我需要产生一个信号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 我不知道如何解决它,所以我希望有人可以帮助我!谢谢!

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

我认为你在进行计算时正在使用学位,所以这样做:

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

cosd使用度数而不是弧度。 Radians是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的所有整数, 因为许多Matlab的内置函数都是矢量化的,所以不需要使用for循环。意思是你可以输入一个向量,它将计算向量中每个元素的函数。