当前位置: 首页>编程语言>正文

matlab resample 样条 matlab取样

采样对象

40个离散点,在实空间的40个点内,有2个周期:

matlab resample 样条 matlab取样,matlab resample 样条 matlab取样_取值,第1张

采样周期:1/2

每两个点抽样一个,所以抽样结果如下:

matlab resample 样条 matlab取样,matlab resample 样条 matlab取样_取值_02,第2张

对抽样结果分别进行模拟DFT和FFT运算,得到抽样信号的频谱图:

matlab resample 样条 matlab取样,matlab resample 样条 matlab取样_频域_03,第3张

对比两图发现:

1.DFT得到的频谱是40个频率刻度,而FFT得到的只有20个频率刻度。

2.DFT得到的频谱有4个频率分量,而FFT只有两个频率分量。

所以哪个方法得到的结果是对的呢?再回答这个问题前,先看看下面这个离散点只有20个的2(周期)信号图以及他的频谱图(注:此信号不是原信号):

matlab resample 样条 matlab取样,matlab resample 样条 matlab取样_取值_04,第4张

matlab resample 样条 matlab取样,matlab resample 样条 matlab取样_取值_05,第5张

是的,这两个频域图一模一样,连频域的刻度都一样。实空间的曲线也是一样的(因为都是两个周期,且离散点都是20个),只有横轴的范围不一样:一个是1—40,另一个是1—20。是的,FFT把抽样函数当做相同周期的另一个函数了。

造成这一结果的原因在于:抽样函数的离散点减少了,少于原来40个点了。之前说过,频谱会按照离散点的取值,划分频谱图里的频率刻度。40个点划40个频率,20个点划20个基频。

所以只需要把没有采样的点置0,保持40个采样点,就可以得到采样信号的频谱了:

matlab resample 样条 matlab取样,matlab resample 样条 matlab取样_离散抽样_06,第6张

matlab resample 样条 matlab取样,matlab resample 样条 matlab取样_频域_07,第7张

可以看到,这样抽样后的频谱图和之间的DFT是一样的,所以我们以后抽样的时候,没有抽到的部分也要保留下来并置0。

代码:

close all;

%% 原信号
n = 0:1:39;                 %40个离散点
A = cos(2*pi*n*2/40);       %频率:2个周期
figure; stem(n,A); hold on; plot(n,A); title('原信号');

%% 抽样信号
n = 0:2:39;                 %20个离散点
A = cos(2*pi*2*n/40);
figure; stem(n,A); hold on; plot(n,A); title('抽样信号');

%% 抽样信号作FFT和DFT
A = cos(2*pi*2*n/40);

B = fft2(A);
figure; stem(B); title('抽样信号FFT');  

sum = zeros(1,20);
for freq = 0:2:39
    B = cos(2*pi*freq*n/40);
    C = A.*B;
    for num = 0:19
        sum(freq/2+1) = sum(freq/2+1) + C(num+1);
    end
end
figure; stem(n,sum); title('抽样信号DFT');

%% 原信号20个离散点
n = 0:1:19;                 %20个离散点
A = cos(2*pi*n*2/20);       %频率:2个周期
figure; stem(n,A); hold on; plot(n,A); title('20离散点信号');

B = fft2(A);
figure; stem(B); title('20离散点信号FFT');  

sum = zeros(1,20);
for freq = 0:1:19
    B = cos(2*pi*freq*n/20);
    C = A.*B;
    for num = 0:19
        sum(freq+1) = sum(freq+1) + C(num+1);
    end
end
figure; stem(n,sum); title('20离散点信号DFT');

%% 修改后的采样信号频谱
A = zeros(1,40);            %40个离散点
for num = 0:2:39            %抽样1/2
    A(num+1) = cos(2*pi*2*num/40);
end

n = 0:1:39;
figure; stem(n,A); title('40离散点抽样信号');
B = fft2(A);
figure; stem(B); title('40离散点抽样信号FFT');



https://www.xamrdz.com/lan/59w1967408.html

相关文章: