增加信号频率

时间:2011-04-07 14:51:29

标签: matlab signal-processing octave

问候全部

我回去使用resample(来自信号处理工具箱)和repmat,但我注意到某些值的行与采样率不同,请参阅下面的图片链接。注意行的顶部图像值为1000,底部图像表示rows = 1008.当我更改resample和repmat(freq_new)的值但仅针对某些值时,会发生这种情况。我该如何正确解决这个问题?我可以在1000之后删除所有内容,但我不确定这是一个错误还是只是resample / repmat的工作方式。 PS:使用matlab / octave

http://dl.dropbox.com/u/6576402/questions/rows_different.png

这是我用来测试这个

的测试代码
%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)])

1 个答案:

答案 0 :(得分:3)

由于您的原始信号长度为1000个样本,因此将其重新采样时间缩短9倍将在一个周期内为您提供111.11111个样本。 Matlab将这个数字增加到112个。想一想。如果您的周期长度为111个样本,那么您的完整波长将为999个样本。因为它长了112个样本,当你将它们中的9个放在一起时,它们产生1008个样本长的信号。没有办法让它成为1000,因为你处理离散时间。代码是正确的,它完成了它应该做的事情。实际上没有办法将9个完全相同的周期组合成1000个离散样本。我希望这会有所帮助。

或者,你可以尝试首先重复你的初始波9次然后然后重新采样它。你的周期不一样,但它们很适合1000个样本。

我希望这有助于=)