Matlab/Octave:用 FIR 插值给出按比例缩小的信号
Matlab/Octave: interpolating with FIR gives scaled down signal
给定 x(n),它被放大了 4 倍,我想用以下代码对其进行插值:
pkg load signal;
n = [1:100];
x = n.*cos(n);
upsampled = upsample(x,4);
b = fir1(30,0.25,'low');
interpolated = filter(b,1,upsampled)(16:end);
figure;
stem([1:4:400],x);
hold on;
stem(interpolated);
剧情是:
其中原始 x(n) 为蓝色,插值后为红色。
为什么插值信号按比例缩小?
这看起来更好:
pkg load signal;
n = [1:100];
x = n.*cos(n);
upsampled = upsample(x,4);
b = fir1(30,0.25,'low');
interpolated = filter(b,1,upsampled)(16:end);
figure;
stem([1:4:400],x);
hold on;
stem(interpolated*4); %notice the multiplication by 4 here
但为什么它有效?还是我运气好?
我可以看出以下各项之间存在明显的相关性:
upsample(x,4)
和;
stem(interpolated * 4)
upsample
在变量的每对值之间插入 3 个零。因此,您的过滤器功能将产生平滑的结果。如果你的结果让你满意,那很好。或者,尝试像这样规避问题:
pkg load signal;
n = 1:100;
x = n .* cos(n);
b = fir1(30,0.25,'low');
interpolated = filter(b,1,x)(4:end);
final = upsample(interpolated,4);
figure;
stem([1:4:400],x);
hold on;
stem(final);
给定 x(n),它被放大了 4 倍,我想用以下代码对其进行插值:
pkg load signal;
n = [1:100];
x = n.*cos(n);
upsampled = upsample(x,4);
b = fir1(30,0.25,'low');
interpolated = filter(b,1,upsampled)(16:end);
figure;
stem([1:4:400],x);
hold on;
stem(interpolated);
剧情是:
其中原始 x(n) 为蓝色,插值后为红色。
为什么插值信号按比例缩小?
这看起来更好:
pkg load signal;
n = [1:100];
x = n.*cos(n);
upsampled = upsample(x,4);
b = fir1(30,0.25,'low');
interpolated = filter(b,1,upsampled)(16:end);
figure;
stem([1:4:400],x);
hold on;
stem(interpolated*4); %notice the multiplication by 4 here
但为什么它有效?还是我运气好?
我可以看出以下各项之间存在明显的相关性:
upsample(x,4)
和;
stem(interpolated * 4)
upsample
在变量的每对值之间插入 3 个零。因此,您的过滤器功能将产生平滑的结果。如果你的结果让你满意,那很好。或者,尝试像这样规避问题:
pkg load signal;
n = 1:100;
x = n .* cos(n);
b = fir1(30,0.25,'low');
interpolated = filter(b,1,x)(4:end);
final = upsample(interpolated,4);
figure;
stem([1:4:400],x);
hold on;
stem(final);