【问题标题】:Interpolating signal from 4 sec to 1 sec插值信号从 4 秒到 1 秒
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

    • 不幸的是,它不能只是一个简单的情节变化,因为它将是一个音频文件,将被导入,对其进行一些计算,然后作为另一个音频文件导出。
    • 当然可以,但这不会改变您对待信号的方式。向量y 中存储的信号不包含任何时间信息;它可以每 10 秒采样一次,就像每纳秒采样一次一样。您可以将其视为以您选择的任何速率进行采样。
    • 我认为Rick T的意思是,如果他简单地压缩信号,就会出现频移。您需要使用某种 FFT (en.wikipedia.org/wiki/Fft)。这是一个解释一些时间压缩方法的链接(顺便说一句,第一个 Google 结果):dspdimension.com/admin/time-pitch-overview
    【解决方案2】:

    你会想要使用某种FFT。这是一个解释一些时间压缩方法的链接(顺便说一句,第一个 Google 结果):http://dspdimension.com/admin/time-pitch-overview

    【讨论】:

      猜你喜欢
      • 2022-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-30
      • 2012-06-08
      • 1970-01-01
      • 2017-02-17
      相关资源
      最近更新 更多