与索引值如何阴谋DSP信号

6视图(30天)
我写的代码能够情节dtft价值”级光谱对dft指数k值。我应该重新创建这些图,但我甚至不能获得第一个图看起来正确。我设法得到这个工作为f / fs x轴,我认为我必须做的就是改变轴使其k值(N / 2)。我不确定为什么曲线本身不是正确绘制或信号(竖线)上升到32当理论上他们应该匹配曲线的尽头。任何帮助或见解,改变我的代码出错了,感谢。
编辑添加代码:
f1 = 2 e3;
f2 = 2.5 e3;
f3 = 3 e3;
fs = 10 e3;
t = 0:1 / fs: 0.1;
x = cos(2 *π* f1 * t) + cos(2 *π* f2 * t) + cos(2 *π* f3 * t);
L = 100;
N1 = 32;
N2 = 64;
w = rectwin (L) ';
X1 = fft (x (1: L)。* w, 256);
X2 = fft (x (1: L)。* w, 256);
X1_dtft = abs (fft (x (1: L)。* w, N1));
X2_dtft = fft (x (1: L)。* w, N2);
图(1);
次要情节(2 2 1);
情节(0:255 abs (X1)、 “——” );
持有
茎(0:N1/2-1、abs (X1_dtft (1: n)), “r” , “线宽” ,0.5, “标记” , “没有” )
标题( 的矩形窗口,L = 100, N = 32 ' );
包含( “DFT指数k” );
ylabel ( “谱级” );
xlim ([0 16]);
ylim (50 [0]);
3评论
保罗
保罗 2023年4月4日
嗨,克里斯蒂娜,
仅仅看代码不知道确切的问题正在解决.....的代码
我们从一个采样信号在10 kHz相当长的时间间隔。
然后,我们到一个有限的时间窗口,信号的信号100点。我将称之为x信号。看起来,总的来说,我们的目标是比较DTFT的DFT x或频率DTFT的样本。
近似的DTFT x的一个方法是使用fft但很多补零。看起来像你所做的与X1使用256点。所以X1可能被视为x的DTFT。但后来X2计算相同的方式;什么是应该X1和X2的区别?然后,其他两个变量叫做X1_dtft X2_dtft计算,但计算不是DTFT x;也许他们是错误的。
X1_dtft和X2_dtft使用fft计算长度的N1 = 32和N2 = 64,这都是小于x的长度,即L = 100。调用fft和N1 < L截断输入第一个N1点和以fft的截断输入。N2也一样。我想知道这才是真正的目标。如果目标是获得32位和64点样本DTFT的x,那么它可能更合适 freqz 。但很难说w / o澄清N1和N2的目标是什么。
从根本上讲,DTFT的自变量是频率,而对DFT指数。比较这两个,我认为这是更典型的DFT指标转换为频率样本,尽管我认为它是可行的,情节DTFT反对“映射”的频率指数。

登录置评。

接受的答案

约瑟夫
约瑟夫 2023年4月4日
我认为你是跑到你的两个信号之间的频率对齐的问题。相对应的指标你DTFT情节并不像DFT频率同样大小的指标。它可能容易DTFT转换为频率,然后规模DFT的步长。
这段代码是接近但是需要更多的编辑工作
clc
清晰的所有
关闭所有
f1 = 2 e3;
f2 = 2.5 e3;
f3 = 3 e3;
fs = 10 e3;
t = 0:1 / fs: 0.1;
x = cos(2 *π* f1 * t) + cos(2 *π* f2 * t) + cos(2 *π* f3 * t);
L = 100;
N1 = 32;
N2 = 64;
% w = rectwin (L) ';
w = 1(1升);
X1 = fft (x (1: L)。* w, 256);
X2 = fft (x (1: L)。* w, 256);
X1_dtft = abs (fft (x (1: L)。* w, N1));
X2_dtft = fft (x (1: L)。* w, N2);
图(1);
%次要情节(2 2 1);
f1 = fftfreq (t (1: L), 256);%的频率
f2 = fftfreq (t (1: L), N1);
DFT_index_step = f2 (2) - f2 (1);
x1 = f1 / DFT_index_step-min (f1 / DFT_index_step);
x2 = f2 / DFT_index_step-min (f2 / DFT_index_step);
情节(x1, abs (x1)、“——”);
持有
茎(x2 (1: N1)、abs (X1_dtft (1: N1)),“r”,“线宽”,0.5,“标记”,“没有”)
标题(的矩形窗口,L = 100, N = 32 ');
包含(“DFT指数k”);
ylabel (“谱级”);
xlim ([0 16]);
ylim (50 [0]);
函数f = fftfreq的(t, N)
如果~ (“N”,“var”)| | isempty (N)
N =长度(t);
结束
Fs =差异(t);
Fs = 1 / f (1);
df = Fs / N;
f = - f / 2: df (Fs /第二代);
结束

更多的答案(0)

标签

社区寻宝

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

开始狩猎!

翻译的