帮助重新采样/上采样

我有一个240个数据点的数组,采样率为600hz,代表400ms。我需要将此数据重新采样到512hz采样的512个数据点,代表500ms。我假设因为我从400ms的数据开始,最后的100ms只需要用0填充。 有没有最好的方法来实现这一目标?     
已邀请:
如果要避免插值,则需要上采样到76.8 kHz采样率(即在每个输入采样后插入127 0s),低通滤波器,然后进行抽取(每75个采样中丢弃74个)。     
您可以使用窗口Sinc插值,使用带有窗口Sinc脉冲响应的线性相位FIR低通滤波器,可以获得与上采样和下采样相同的结果。当使用FIR滤波器时,通常必须填充两侧FIR滤波器内核长度为零的信号。 添加: 另一种可能性是使用60个零填充240个样本,应用长度为300的非2次幂FFT,“中心”零填充FFT结果,使用212个复数零,使其长512,但具有相同的频谱,并执行长度为512的IFFT以获得重新采样的结果。     
对于endolith的响应是,如果你想通过简单地计算FFT,零填充然后IFFT来插入x [n],如果x [n]不是周期性的,你将得到错误。请参阅此参考资料:http://www.embedded.com/design/other/4212939/Time-domain-interpolation-using-the-Fast-Fourier-Transform-     
基于FFT的重采样/上采样非常简单...... 如果你可以使用python,scipy.signal.resample应该可行。 对于C / C ++,如果你有真实的(而不是复杂的)数据,有一个简单的fftw技巧可以进行上采样。 nfft =原始数据长度 upnfft =新数据长度 double * data =原始数据 //分配 fftw_complex * tmp_fd =(fftw_complex *)fftw_malloc((upnfft / 2 + 1)* sizeof(fftw_complex)); double * result =(double *)fftw_malloc(upnfft * sizeof(double)); //创建fftw计划 fftw_plan fft_plan = fftw_plan_dft_r2c_1d(nfft,data,tmp_fd,FFTW_ESTIMATE); fftw_plan ifft_plan = fftw_plan_dft_c2r_1d(upnfft,tmp_fd,result,FFTW_ESTIMATE); //将tmp_fd归零 memset(tmp_fd,0,(upnfft / 2 + 1)* sizeof(fftw_complex)); //执行计划(向前然后反向) fftw_execute_dft_r2c(fft_plan,data,tmp_fd); fftw_execute_dft_c2r(ifft_plan,tmp_fd,result); // 清理 fftw_free(tmp_fd);     

要回复问题请先登录注册