Matlab 从4秒到1秒的插值信号

Matlab 从4秒到1秒的插值信号,matlab,interpolation,Matlab,Interpolation,我有一个信号,从0到4秒循环两次,我想在信号从0到1秒时插值循环两次。我知道这是我的xi变量的问题;我只是不知道如何修复它 这个例子只是一个简单的正弦波方程,但我将导入一个真实的音频wav文件;这就是我选择使用插值的原因。不幸的是,它不能仅仅是一个简单的绘图更改,因为它将是一个音频文件,将被导入,对其进行一些计算,然后作为另一个音频文件导出 %Interpolation test clear all, clc,clf,tic x= linspace(0,2*pi,400); %from 0 to

我有一个信号,从0到4秒循环两次,我想在信号从0到1秒时插值循环两次。我知道这是我的
xi
变量的问题;我只是不知道如何修复它


这个例子只是一个简单的正弦波方程,但我将导入一个真实的音频wav文件;这就是我选择使用插值的原因。不幸的是,它不能仅仅是一个简单的绘图更改,因为它将是一个音频文件,将被导入,对其进行一些计算,然后作为另一个音频文件导出

%Interpolation test
clear all, clc,clf,tic
x= linspace(0,2*pi,400); %from 0 to 4 sec
fs_rate=100
freq=2;
y=sin(freq*(x)); 

xo=linspace(0,length(y)/fs_rate,length(y)); %go from 0 to x sec 
xi=linspace(0,1,length(y)); %go from 0 to 1 sec 
new_y=interp1(xo,y,xi,'linear');

subplot(2,2,1),plot(xo,y),title('Orginal signal over 4 sec')
subplot(2,2,3),plot(xi,new_y),title('Entire signal over 1 sec')

我回去按照Sergei的建议做了,并使用了重采样和重采样,但我注意到,在一些值上,行与采样率不同(见下图)

请注意,行的顶部图像值表示为1000,底部图像表示为rows=1008。当我更改resample和repmat(freq_new)的值,但仅更改某些值时,就会发生这种情况。我怎样才能解决这个问题?我可以在1000之后删除所有内容,但我不确定这是一个bug还是重采样/重采样的工作方式

下面是我用来测试的代码:

%resample_repmat signal
clear all, clf
Fs = 1000; % Sampling rate
Ts = 1/Fs; %sampling interval
t=0:Ts:1-Ts; %sampling period

freq_orig=1;
y=sin(2*pi*t*freq_orig)'; %gives a short wave

freq_new=9;
y2=resample(y,1,freq_new); %resample matrix
y3=repmat (y2,freq_new,1); %replicate matrix

[r_orig,c_orig] = size(y) %get orig number of rows and cols
[r_new,c_new] = size(y3) %get new number of rows and cols

subplot(2,1,1),plot(y),title('Orginal signal')
title(['rows=',num2str(r_orig),' cols=',num2str(c_orig)])
subplot(2,1,2),plot(y3),title('New signal')
title(['rows=',num2str(r_new),' cols=',num2str(c_new)])

我可能不完全理解这个问题,但听起来你不是真的对执行插值感兴趣,而是对时间进行压缩?您只需将原始的
y
与新的时间向量
xi
一起使用,即可获得所需的结果:

plot(xi, y); title('Entire signal over 1 sec')

你会想用某种方法。这里有一个链接,解释了一些时间压缩的方法(第一次谷歌结果顺便说一下):。

不幸的是,它不能仅仅是一个简单的绘图更改,因为它将是一个音频文件,将被导入,对其进行一些计算,然后导出为另一个音频文件。当然,但这不会改变您处理信号的方式。存储在向量
y
中的信号不包含任何时间信息;它每10秒采样一次的可能性和每纳秒采样一次的可能性一样。你可以按你选择的任何速率对它进行采样。我认为Rick T的意思是,如果他简单地压缩信号,就会出现频率偏移。您需要使用某种FFT()。这里有一个链接,解释了一些时间压缩的方法(第一个谷歌结果顺便说一句):。