情节利用fft频谱的矩形脉冲

39视图(30天)
fs = 10000;
t = 2:1 / fs: 2;
g_a = rectpuls (t / 4) + rectpuls (t / 2);
fn = f / 2;
f = linspace (fn、fn元素个数(t));
G_a = fft (G_a);g_a %的傅里叶变换函数
G_a_mag = abs (G_a);
次要情节(2,1,1)
情节(t, g_a)%画出函数关于时间
次要情节(2,1,2)
情节(f, G_a_mag)%绘制频率谱
轴([0 2 0 2])
这是我的代码,我想获得正确的频谱图,但我获得的是奇怪的和错误的。通过计算结果分析,傅里叶变换应该如下:2 * sinc(ω)+ 4 * sinc(2 *ω)。
我不明白我做错了什么,也许我不正确使用fft函数?
谢谢你的帮助。

接受的答案

保罗
保罗 2022年3月6日
下面的代码演示了一个组件的分析的信号。它可以适应包括组件的信号。
注意两个关键代码和代码之间的差异问题,下面提到的。
首先,计算准确的CTFT
信谊t w f
g (t) = rectangularPulse (-0.5, 0.5, t / 2);
G (w) =简化(傅里叶(G (t), t, w))
G (w) =
这是预期的结果在这个问题。
现在计算信号的样本g (t)在speciifed采样周期超过指定的时间。
fs = 10000;Ts = 1 / f;
tval = 2:1 / fs: 2;%可能更善于使用linspace
gval = rectpuls (tval / 2);
注意,rectpuls()结果在tval gval = 1 = 1,但在tval gval = 0 = 1(我相信这是一个想要的结果)。
[tval (10001) gval (10001))
ans = 1×2
1
[tval (30001) gval (30001))
ans = 1×2
1 0
因此,gval有偶数个零样本参数的问题
nnz (gval)
ans = 20000
这个事实很重要。
现在计算DTFT gval使用freqz () / -30 - 30 rad /秒范围。freqz()假设第一点gval对应于离散样本n = 0,所以我们必须转变freqz的输出()usnig DTFT这种财产占这一事实的第一个元素gval实际上对应于n = -20000 (-20000 / fs = 2)
wdtft = linspace (1, - 1, 1001) * 30;% -30 rad / s 30 rad /秒
dtft = freqz (gval 1 wdtft * Ts)。* exp (1 j * wdtft * t * 20000);
dtft小,零的虚部因为nnz (gval)是偶数,即。,gval不是一个奇怪的序列。
马克斯(abs(图像放大(dtft)))
ans = 1.0000
与G (w),我们将看看真实的一部分。
dtft =实际(dtft);
现在计算DFT gval, DTFT样本的元素。转变DFT在频域中出于同样的原因,我们改变了DTFT。
dft = fft (gval)。* exp (1 j *(0:(元素个数(gval) 1)) /元素个数(gval) * 2 *π* 20000);
wdft =(0:(元素个数(dft) 1)) /元素个数(dft) * 2 *π* fs;
去掉小的虚部。
马克斯(abs(图像放大(dft)))
ans = 1.0000
dft =实际(dft);
现在比较CTFT DTFT的频率范围-30 - 30 rad /秒,和DFT / 0 30 rad /秒。可以使用fftshift(),如果我们想获得DFT的形象到负频率。注意问题中的代码没有使用fftsthift f()即使被定义在fn fn。同时,DTFT和DFT比例的样本期近似CTFT;这个比例还需要添加代码的问题。
持有
fplot (G (w),[-30] 30日)
情节(wdtft dtft * Ts)
情节(wdft (wdft < 30), Ts * dft (wdft < 30),“柯”)、网格
包含(“rad /秒”)
传奇(“CTFT”,“T * DTFT”,“T * DFT”)
注意,从DFT其他点的第三点是零,这将导致一个三角形的如果我们绘制的abs()三个曲线和连接DFT的样本。

答案(1)

斯科特·麦肯齐
斯科特·麦肯齐 2022年3月5日
编辑:斯科特·麦肯齐 2022年3月6日
我认为这是你所追求的。大多数情况下,这段代码仅仅遵循的例子 fft 文档,尤其是w.r.t.单面FFT的频谱。顶部wavefrom方波周期为4秒,或者频率0.25赫兹。底部波形频谱。方波的谐波峰值。这些发生在0.25赫兹,0.75赫兹,1.25赫兹,和1.75赫兹,如预期。我不知道为什么三角波形。这可能是因为 fft 函数是只使用一个方波的周期。
fs = 10000;
t = 2:1 / fs: 2;
g_a = rectpuls (t / 4) + rectpuls (t / 2);
g_a(结束)= 1;%修复去年样品(0)
g_a =重新调节(g_a 1 1);%去除直流偏置信号
G_a = fft (G_a);g_a %的傅里叶变换函数
%得到频谱G_a(见fft documenation)
n =元素个数(t) 1;
P2 = abs (G_a / n);
G_a_mag = P2 (1: n / 2 + 1);
G_a_mag (2: end-1) = 2 * G_a_mag (2: end-1);
f = f * (0: (n / 2)) / n;
次要情节(2,1,1)
情节(t, g_a)%画出函数关于时间
轴([2 2 -1.5 - 1.5])
次要情节(2,1,2)
情节(f, G_a_mag)%绘制频率谱
轴([0 2 0 2])

s manbetx 845


释放

R2020b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!