【问题标题】:fir filter implementation in octave without inbuilt function没有内置函数的 octave 中的 fir 滤波器实现
【发布时间】:2018-02-12 00:53:50
【问题描述】:

我想做一个 FIR 滤波器。我有一个系数数组 n2 和一个数据数组 n1 但没有在八度音程中使用内置函数(fir)。我不确定这里有什么问题。

运行此代码时出现错误。 错误:y(0):下标必须是整数 1 到 (2^31)-1 或逻辑 错误:调用自 fir1 在第 12 行第 10 列

`n1=input('enter length of random sequence');     
 n2=input('enter length of filter');        
 for i=1:n1        
 x(i)=input('elements of x')        
 end            
 for i=1:n2       
 y(i)=input('elements of y')        
 end        
 c=zeros(1,(n1+n2));        
 for i=1:(n1+n2)    
 for j=1:n2    
     c(i)=c(i)+x(j)*y(i-j+1);    
 end    
 end        
 c`

【问题讨论】:

  • 创建一个minimal reproducible example 总是一个好主意,尤其是一个完整的例子。在您的情况下,结果很大程度上取决于 endered 数字。如果您以编程方式设置n1,n2,x and y,这个问题会好得多。由于您不想要内置函数(我想这是一些作业),您可以添加(检查)输出以显示您的预期值(请提及)是好的
  • i-j+1j>i 时超出范围。您需要以不同的方式处理信号的边缘。

标签: octave


【解决方案1】:

非常感谢..我想通了.. 我尝试了以下代码来解决这个问题。

clear all;                                   
%random input sequence of 1000 
random_i = randn(1,1000);

%filter coefficients of order 5
h =[1 0.5 0.25 0.125 0.0625] ;

l1=length(random_i);
l2=length(h);
length=l1+l2-1;

output_f=zeros(1,length);        
 %convolution 
 for i=1:length
 for j=1:length
   if ((i-j+1)<=l2 && j<=l1 && j<=i)
     output_f(i)=output_f(i)+random_i(j)*h(i-j+1);    
   endif
 end 
end 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多