661 字
3 分钟
Matlab增采样仿真
(2)——代码实现
代码讲解
0、全局参数
A = 2; % 增采样倍数Fs = 16; % 采样率 单位hzT = 1/Fs; % 采样周期L = 8; % 采样点数t = (0:L-1)*T; % 时间间隔1、生成原始信号
首先生成一个2hz的正弦信号,采样率为16hz,一个周期8个点。
% 生成虚拟信号x1 = sin(2*pi*2*t); % 采集一个2hz正弦信号
% 绘制原始信号波形subplot(3,2,1);stem(x1);xlabel('原始信号x1');ylabel('幅度');% 生成对应频谱x1_fft=fft(x1); %fft变换x1_abs=abs(x1_fft/(L/2)); %取模x1_abs(1)=2*x1_abs(1); %幅度归一subplot(3,2,2);stem(1:Fs/L:Fs,x1_abs);xlabel('频率');ylabel('幅度');
2、增采样过程量
通过函数upsample对原始信号x1进行增采样,生成过程量x2。
可以看到正如理论分析所得到的结论一样,2倍增采样下,频谱由x1的一份,变成两份,幅度也比例衰减2倍。要恢复原始信号,只需要低通滤波就可以。
% 增采样过程量x2=upsample(x1,A); % 增采样subplot(3,2,3);stem(x2);xlabel('增采样过程量x2');ylabel('幅度');% 绘制对应频谱x2_fft=fft(x2);x2_abs=abs(x2_fft/(A*L/2));x2_abs(1)=2*x2_abs(1);subplot(3,2,4);stem(1:(Fs*A)/(L*A):Fs*A,x2_abs);xlabel('频率');ylabel('幅度');
upsample函数简介
y = upsample(x,n)
- x 原始信号
- n 增采样倍数
示例:
x = [1,2,3];y = upsample(x,3);y = [1,0,0,2,0,0,3,0,0];
3、低通滤波,实现“增采样”
对信号x2,进行低通滤波,保留2hz频率的部分,再补充幅度损失,就可以得到最终增采样的信号x3。
% 对增采样过程量,做低通滤波,实现完整的"增采样"x3=lowpass(x2,5,Fs*A); % 以5为截止频率上限,做lowpassx3=A*x3; % 补充幅度subplot(3,2,5);stem(x3);xlabel('最终增采样信号x3');ylabel('幅度');% 绘制对应频谱x3_fft=fft(x3);x3_abs=abs(x3_fft/(A*L/2));x3_abs(1)=2*x3_abs(1);subplot(3,2,6);stem(1:(Fs*A)/(L*A):Fs*A,x3_abs);xlabel('频率');ylabel('幅度');
总体代码
clear;clc;
A = 2; % 增采样倍数Fs = 16; % 采样率 单位hzT = 1/Fs; % 采样周期L = 8; % 采样点数t = (0:L-1)*T; % 时间间隔
% 生成虚拟信号x1 = sin(2*pi*2*t); % 采集一个2hz正弦信号
% 绘制原始信号波形subplot(3,2,1);stem(x1);xlabel('原始信号x1');ylabel('幅度');% 生成对应频谱x1_fft=fft(x1); %fft变换x1_abs=abs(x1_fft/(L/2)); %取模x1_abs(1)=2*x1_abs(1); %幅度归一subplot(3,2,2);stem(1:Fs/L:Fs,x1_abs);xlabel('频率');ylabel('幅度');
% 增采样过程量x2=upsample(x1,A); % 增采样subplot(3,2,3);stem(x2);xlabel('增采样过程量x2');ylabel('幅度');% 绘制对应频谱x2_fft=fft(x2);x2_abs=abs(x2_fft/(A*L/2));x2_abs(1)=2*x2_abs(1);subplot(3,2,4);stem(1:(Fs*A)/(L*A):Fs*A,x2_abs);xlabel('频率');ylabel('幅度');
% 对增采样过程量,做低通滤波,实现完整的"增采样"x3=lowpass(x2,5,Fs*A); % 以3为截止频率上限,做lowpassx3=A*x3; % 补充幅度subplot(3,2,5);stem(x3);xlabel('最终增采样信号x3');ylabel('幅度');% 绘制对应频谱x3_fft=fft(x3);x3_abs=abs(x3_fft/(A*L/2));x3_abs(1)=2*x3_abs(1);subplot(3,2,6);stem(1:(Fs*A)/(L*A):Fs*A,x3_abs);xlabel('频率');ylabel('幅度');
部分信息可能已经过时