matlab抽取与插值

什么是抽取?

我们假设一个数字信号 x ( n ) , n = 1 , 2 , . . . , N x(n),n=1,2,...,N x(n),n=1,2,...,N共有 N N N个点,抽取就是每个几个点抽1个点,比如2倍抽取,那么抽取后的信号为 y ( n ) , y ( 1 ) = x ( 1 ) , y ( 2 ) = x ( 3 ) , y ( 3 ) = x ( 5 ) , . . . , y ( N / 2 ) = x ( N − 1 ) y(n),y(1)=x(1),y(2)=x(3),y(3)=x(5),...,y(N/2)=x(N-1) y(n),y(1)=x(1),y(2)=x(3),y(3)=x(5),...,y(N/2)=x(N−1),可以看到抽取之后信号的长度变短了。

什么是插值?

插值和抽取相反,插值之后信号会变得越来越密集,注意绝对时间长度是不变的。例如数字信号 x ( n ) , n = 1 , 2 , . . . , N x(n),n=1,2,...,N x(n),n=1,2,...,N共有 N N N个点,2倍插值之后,就会变成 2 N 2N 2N个点,但是假设 N N N个点时间向量对应的是 t 0 < t < t 1 t_0<t<t_1 t0<t<t1,那么插值之后对应的时间还是它,只不过采样率提高了。

抽取仿真

假设, x ( n ) = c o s ( 2 π f n ) , f = 1 H z x(n)=cos(2\pi fn),f=1Hz x(n)=cos(2πfn),f=1Hz,信号的采样率 f s = 16 H z f_s=16Hz fs=16Hz,每个周期内可以采到16个点,我们进行 M = 2 M=2 M=2倍的抽取。

抽取可以用matlab的decimate函数。

matlab 复制代码
%% 信号的抽取和插值
f = 1;  %信号频率
fs = 16;%采样频率
N = 33; %采样点数
n = 0:1:N-1;
xn = cos(2*pi*f*n*(1/fs));
figure; 
stem(n,xn); %绘制原信号
title('x(n)');
xlabel('n');
ylabel('amplitude');

M = 2; %抽取的倍数
xn1 = decimate(xn,M); %抽取之后的信号
stem(xn1)%注意对上m和xn1
title('进行M=4倍抽取后的x(n)图像')
xlabel('n')
ylabel('幅度')

绘制的信号如下:

图1 原始信号


图2 抽取后的信号

插值可以用interp函数

matlab 复制代码
L = 3; %L倍插值
xn2 = interp(xn,L);  %以L倍采样率进行插值
stem(xn2)
title('进行L=3倍插值后的x(n)图像')
xlabel('n')
ylabel('幅度')

3倍插值后的信号

图3 3倍插值后的信号

指定插值方法的interp1函数使用方法

上面的插值,只需要指定倍数就可以了,matlab还有一种方法能够能够做插值,并且可以指定插值方法

interp1函数是Matlab中用于数据插值的工具,它能够根据给定的一组数据点(x、y),以及所要得到的插值点(xq),计算出插值点对应的函数值(vq)。interp1函数支持的插值方式包括:线性、样条、分段常数、分段线性和分段三次等。其中线性插值是最简单的插值方法,其他插值方法可以满足更高的精度要求。

vq = interp1(x, y, xq) 
vq = interp1(x, y, xq, method) 
vq = interp1(x, y, xq, method, extrapval)

interp1函数的语法格式包含3~5个输入参数和一个输出参数,具体参数说明如下:

  • x:一维向量,表示数据点的自变量;
  • y:一维向量,表示数据点的因变量;
  • xq:一维向量,表示插值点的自变量;
  • method: 字符串,表示插值方式,可选值为'linear'、'nearest'、'next'、'previous'、'pchip'、'cubic'和'spline';linter是线性插值,spline是样条插值,pchip是分段多项式插值;
  • extrapval:数字或字符串,表示在插值点xq超出x的范围时用于外推的值,默认为NaN
  • 一维向量,表示插值点对应的函数值
相关推荐
吱吱鼠叔2 分钟前
MATLAB计算与建模常见函数:5.曲线拟合
算法·机器学习·matlab
不知所云,1 小时前
qt cmake自定义资源目录,手动加载资源(图片, qss文件)
开发语言·qt
安冬的码畜日常2 小时前
【玩转 JS 函数式编程_006】2.2 小试牛刀:用函数式编程(FP)实现事件只触发一次
开发语言·前端·javascript·函数式编程·tdd·fp·jasmine
阑梦清川2 小时前
Java继承、final/protected说明、super/this辨析
java·开发语言
PythonFun2 小时前
Python批量下载PPT模块并实现自动解压
开发语言·python·powerpoint
Death2002 小时前
Qt 6 相比 Qt 5 的主要提升与更新
开发语言·c++·qt·交互·数据可视化
机器视觉知识推荐、就业指导2 小时前
使用Qt实现实时数据动态绘制的折线图示例
开发语言·qt
快乐就好ya3 小时前
Java多线程
java·开发语言
CS_GaoMing4 小时前
Centos7 JDK 多版本管理与 Maven 构建问题和注意!
java·开发语言·maven·centos7·java多版本
2401_858120534 小时前
Spring Boot框架下的大学生就业招聘平台
java·开发语言