【发布时间】:2011-08-17 02:26:02
【问题描述】:
我有一个从 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 的建议做了,并使用了 resample 和 repmat,但我注意到在某些值上,行与采样率不同(见下图)。
请注意,顶部图像的行数显示为 1000,底部图像显示行数 = 1008。当我更改 resample 和 repmat (freq_new) 的值时会发生这种情况,但仅适用于某些值。我怎样才能解决这个问题?我可以删除 1000 之后的所有内容,但我不确定这是一个错误还是 resample/repmat 的工作方式。
这是我用来测试的代码:
%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)])
【问题讨论】:
标签: matlab interpolation