绘制1D信号的频谱

时间:2013-11-07 23:14:39

标签: matlab fft

我正在尝试对信号进行一些计算。该信号应该是在868 MHz载波上由40 kHz左右的块波调制的rfid标签的测量读数。我所获得的信号以250 MHz采样,得到1250005个样本,存储在此.mat file中。

现在我想绘制光谱x [n]。我被告知要做的是在一段1024个样本上做一个fft。或者使用Matlabs PSD功能。但我正在努力解决这个问题。到目前为止,这是我的Matlab代码:

load antenna_1;
x = channel_1;

Fs = 250e6; % Sampling frequency 
t = (0:length(channel_1)-1)*1/Fs; % Time vector 
nfft = 1024; % Length of FFT

X = fft(x,nfft);
X = X(1:nfft/2);
mx = abs(X);
f = (0:nfft/2-1)*Fs/nfft; % Frequency vector

plot(t,x);
xlabel('Time (s)'); ylabel('Amplitude');
figure(2);
plot(f,mx);
xlabel('Frequency (Hz)'); ylabel('Power');

最后plot向我展示了119 MHZ附近的一个频率成分。现在,由于868 MHz信号868 - 3 * 250 = 118的混叠,这并不完全奇怪。但我仍然不确定这是否确实是我信号的正确频谱?我将如何使用psd函数来获取频谱?

1 个答案:

答案 0 :(得分:0)

你们真的很有帮助,谢谢你们!

所以我用pwelch代替了以下代码:

load antenna_1;
x = channel_1;

Fs = 250e6;
Nfft = 2^10;
[Pxx,freq] = pwelch(x,hamming(Nfft),[],[],Fs);

figure;
plot(freq,Pxx);

现在这个工作正常,我得到的结果和以前大致相同。但是现在我想把~119MHz的分量转移到零。所以从scheme中的x [n]到w [n]。 要做到这一点,我正在应用以下乘法:

n = 0:1:Nfft-1;
w = linspace(0,2*pi,Nfft/2+1);

Pmult = Pxx.*exp(-1j*pi*2);
F = exp(-j*w*119e6).*Pxx';

figure;
plot(freq,abs(Pmult));

但是我似乎无法让这个组件完全转移?