如何使用整数除法降低采样率?
How to reduce sample rate using integer division?
我想将我的基频 F (80000 Hz) 降低一个 仅使用整数除法的任意分数。
假设 new_sample() 函数以频率 F 调用。然后我可以使用下面的代码将采样率降低到 40000 Hz。
i = 0; // global counter
new_sample(value){
if(i % 2 == 0){
add_sample_to_buffer(value);
}else{
// skip sample
}
i++;
}
如果我想将采样率降低 1.6 倍至 50000 Hz,该怎么办?
正如克利福德指出的那样:我想在不改变频率的情况下改变采样率。基本上我想通过实时跳过一些样本来对信号进行欠采样。
p.s.:
我知道预分频器和后分频器通常用于降低频率。我不知道他们是否允许将频率降低一小部分。
试试这个:
unsigned Nanoseconds = 0; // global counter
void new_sample(value){
Nanoseconds += 12500; // interval between calls at 80000
if(Nanoseconds>20000){
Nanoseconds-=20000;
add_sample_to_buffer(value);
}else{
// skip sample
}
}
在一秒内Nanoseconds
将递增80000次等于12500等于1E9,将递减50000次20000。
如果你想改变信号的采样率,而不改变信号内容的绝对位置,你想做信号处理中称为 "decimation" 的事情。如果你想了解它,你可能希望阅读这个非常密集的大学讲座:https://homepages.wmich.edu/~bazuinb/ECE6560/CR_DecAndInterp.pdf. In a nutshell, you have to perform some filtering, some decimation, as well as some interpolation. More simple explanation is here: https://dspguru.com/dsp/faqs/multirate/decimation/,它确实有一个 link 面向 scopeFIR 免费工具,包括抽取相位滤波器,以及源代码代码。多读书,我知道...
我想将我的基频 F (80000 Hz) 降低一个 仅使用整数除法的任意分数。
假设 new_sample() 函数以频率 F 调用。然后我可以使用下面的代码将采样率降低到 40000 Hz。
i = 0; // global counter
new_sample(value){
if(i % 2 == 0){
add_sample_to_buffer(value);
}else{
// skip sample
}
i++;
}
如果我想将采样率降低 1.6 倍至 50000 Hz,该怎么办?
正如克利福德指出的那样:我想在不改变频率的情况下改变采样率。基本上我想通过实时跳过一些样本来对信号进行欠采样。
p.s.: 我知道预分频器和后分频器通常用于降低频率。我不知道他们是否允许将频率降低一小部分。
试试这个:
unsigned Nanoseconds = 0; // global counter
void new_sample(value){
Nanoseconds += 12500; // interval between calls at 80000
if(Nanoseconds>20000){
Nanoseconds-=20000;
add_sample_to_buffer(value);
}else{
// skip sample
}
}
在一秒内Nanoseconds
将递增80000次等于12500等于1E9,将递减50000次20000。
如果你想改变信号的采样率,而不改变信号内容的绝对位置,你想做信号处理中称为 "decimation" 的事情。如果你想了解它,你可能希望阅读这个非常密集的大学讲座:https://homepages.wmich.edu/~bazuinb/ECE6560/CR_DecAndInterp.pdf. In a nutshell, you have to perform some filtering, some decimation, as well as some interpolation. More simple explanation is here: https://dspguru.com/dsp/faqs/multirate/decimation/,它确实有一个 link 面向 scopeFIR 免费工具,包括抽取相位滤波器,以及源代码代码。多读书,我知道...