【发布时间】:2018-02-09 04:47:59
【问题描述】:
我创建了一个 6 位量化器并通过它传递一个信号,但是当我绘制 DFT 时,它在 200 MHz 处达到峰值,然后停止;我没有看到整个频谱。是什么阻止我在我的代码中获得更高频率的其余点?
这是我的代码:
bits = 6; %6-bit
fs = 400e6; %sampling frequency
amp = 1; %amplitude
f = 200e6; %actual frequency
vpp = 2; peak-to-peak voltage
LSB = vpp/(2^bits); %least-significant bit
cycles = 1000;
duration = cycles/f;
values = 0:1/fs:duration;
party = LSB:LSB:(vpp-LSB); %partition
blocker = 0:1:(2^bits - 1); %codebook
biblocker = fliplr(decimaltobinary(blocker)); %I created a function that converts decimal to binary
qtone = amp + amp*sin(2*pi*f*values); %tone
[index, q] = quantization(qtone,party,blocker); %I created a quantizing function
ftq = fft(q)/length(q); % Fourier Transform (Scaled)
qf = linspace(0, 1, fix(length(q))/2+1)*(fs/2); % Frequency Vector
qi = 1:length(qf); % Index Vector
qa = abs(ftq(qi))*2/.7562;
figure
plot(qf/1e6, qa) % One-Sided Amplitude Plot
xlim([100 500]);
xlabel('Frequency [MHz]')
ylabel('Amplitude')
这是我得到的:
【问题讨论】:
-
在我看来,您正在绘制一半的样本,如果您期望更高的频率,也许您计算
qf错误?您确实有一个错字:fix(length(q))/2+1应该是fix(length(q)/2)+1。但似乎linspace不在乎它不是一个整数值。 -
@CrisLuengo 这是 qf!将其更改为 qf = linspace(0, 1, fix(length(q)))*(fs);谢谢!
标签: matlab signal-processing fft