信号采样与抽取

最近测试一个上古时期的一个pipeline-SAR ADC, 这个ADC设计120MS/s,开始测试时采样速率设置为10M,但是采得的波形一直很奇怪。发现这个ADC在输出级加了一个数字抽取器,通过移位寄存器使其每隔16384个点输出一个,说是可以通过此种方法来消除高频噪声。由于对于这个操作比较怀疑,因此在MATLAB上进行了模拟。

理论分析:假如采样频率为10M,那么本身的理论信号带宽为5M。如果加上数字抽取器,每隔16384个点输出一个值,那么就相当于把采样频率缩小了16384倍,那么可以量化的信号带宽就会变为305.18Hz。一旦有高于此频率的信号量,那么就会发生混叠,使采样出错。

代码如下: 代码中将信号的频率缩小1000倍。

 


close;
clear all;
fs = 10000; %sampling freq 10k
T1= 1/fs;
L = 10000e2;  %num of sampling points
t = (0:L-1)*T1; %sampling time
f = 50; %信号的频率 OSR=200
y = sin(2*pi*f*t) + sin(2*pi*170*t)+2*randn(size(t));%原始信号

extr = 1024 %extraction rate
fs2 = fs/extr; %采样频率为fd2
T2 = 1/fs2;
t2 = (0:(L-1)/extr)*T2;
y2 = sin(2*pi*f*t2+0*pi) + sin(2*pi*170*t2)+1.1*randn(size(t2));
plot(t,y,'b-',t2,y2,'r-*');
%plot(t,y);
axis([0 5 -1.5 1.5]);

%fft
NFFT = 2^nextpow2(L);
Y = fft(y, NFFT)/L;
f0 = fs/2*linspace(0, 1, NFFT/2+1);
figure;
subplot(121);
plot(f0, 2*abs(Y(1:NFFT/2+1)))
axis([ 0 500 0 1]);
xlabel('Frequency(kHz)');
ylabel('|y(f)|');

%fft extracted points
L_n = L/extr;  % extracted num of points
NFFT2 = 2^nextpow2(L_n);
Y2 = fft(y2, NFFT2)/L_n;
f2 = fs2/2*linspace(0, 1, NFFT2/2+1);
subplot(122);
plot(f2, 2*abs(Y2(1:NFFT2/2+1)))
%axis([ 0 5 0 1]);
xlabel('Frequency(kHz)');
ylabel('|y(f)|');

 

输入信号中最高频率为170,因此相当于本身OSR=58.8,因此当抽取值少于OSR时,正常。extr表示每多少数抽取一个,下图为当extr = 32时的频谱。

信号采样与抽取_第1张图片

下图为extr=128时的频谱, 发现频谱已经折叠到了低频处,也出现了所谓的抑制高频噪声,但如果输入信号比较复杂,会不会出现错误有待进一步学习。

信号采样与抽取_第2张图片

将输入信号变为只有50, 噪声=0.1,在extr=128下,此时还属于Nyquist, 时频域如下。

信号采样与抽取_第3张图片

信号采样与抽取_第4张图片

将输入信号变为只有50, 噪声=0.1,在extr=1024下,此时抽取后相当于欠采样, 时频域如下。尽管是欠采样,由于输入信号为单一频率,所以欠采样也可以恢复出一个其他频率的正弦波。

信号采样与抽取_第5张图片

 

信号采样与抽取_第6张图片

 

将输入信号变为只有50, 噪声=0.1,在extr=2048和4096下,此时抽取后相当于欠采样, 时频域分别如下。尽管是欠采样,由于输入信号为单一频率,所以欠采样也可以恢复出一个其他频率的正弦波。

信号采样与抽取_第7张图片

 

信号采样与抽取_第8张图片

 

当extr不是2的指数关系时,频谱时错误的,下图为exr=4000时.why?

信号采样与抽取_第9张图片

信号采样与抽取_第10张图片

2. 当输入信号50k,采样39.0625k和19.5k时时频如下,欠采样恢复后频率为50-39=11,19.5*3-50=8.5.

信号采样与抽取_第11张图片

 

信号采样与抽取_第12张图片

信号采样与抽取_第13张图片

信号采样与抽取_第14张图片

你可能感兴趣的:(信号)