matlab自己写一个resample函数
时间: 2023-05-29 11:02:52 浏览: 279
基于matlab实现TimeSeries时间序列函数
以下是一个简单的resample函数的示例代码:
```matlab
function y=resample(x,p,q)
% x: 输入信号
% p: 原始采样频率(Hz)
% q: 目标采样频率(Hz)
L=length(x);
n=0:L-1;
ts=n/p;
tsq=n/q;
y=interp1(ts,x,tsq,'spline');
end
```
可以通过以下步骤来测试这个函数:
1. 创建一个原始信号x,例如一个正弦波:
```matlab
fs=1000; % 采样频率
f0=50; % 正弦波频率
t=0:1/fs:1-1/fs; % 时间序列
x=sin(2*pi*f0*t); % 正弦波
```
2. 使用resample函数将信号从1000 Hz 降采样到500 Hz:
```matlab
y=resample(x,fs,500);
```
3. 绘制原始信号和重采样后的信号的时域波形和频域谱:
```matlab
% 时域波形
subplot(2,1,1);
plot(t,x,t,y);
legend('原始信号','重采样信号');
xlabel('时间 (秒)');
ylabel('幅值');
xlim([0.4 0.5]);
% 频域谱
L=length(x);
X=fft(x)/L;
Y=fft(y)/L;
f=fs*(0:(L/2))/L;
subplot(2,1,2);
plot(f,2*abs(X(1:L/2+1)),f,2*abs(Y(1:L/2+1)));
legend('原始信号','重采样信号');
xlabel('频率 (Hz)');
ylabel('幅值');
xlim([0 100]);
```
这将绘制出一个包含原始信号和重采样信号的时域波形和频域谱的图形。可以观察到,重采样后的信号与原始信号在时域和频域上非常相似。
阅读全文