Matlab增采样仿真——代码实现
Posted 四臂西瓜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab增采样仿真——代码实现相关的知识,希望对你有一定的参考价值。
Matlab增采样仿真(2)——代码实现
文章目录
代码讲解
0、全局参数
A = 2; % 增采样倍数
Fs = 16; % 采样率 单位hz
T = 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为截止频率上限,做lowpass
x3=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; % 采样率 单位hz
T = 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为截止频率上限,做lowpass
x3=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('幅度');
以上是关于Matlab增采样仿真——代码实现的主要内容,如果未能解决你的问题,请参考以下文章
svpwm用matlab仿真的时候,采样周期Ts用哪个元件(模块)?
数字信号基于matlab轴承故障仿真信号时域波形图+幅度谱图含Matlab源码 001期