Julia DSP:离散信号的卷积

Julia DSP:离散信号的卷积,julia,signal-processing,convolution,Julia,Signal Processing,Convolution,这是你的电话号码。我想为两个简单的信号x[n]=0.2^n*u[n]和h[n]=u[n+2]写一个卷积,对于一些n值。我就是这样实施的: using Plots, DSP x(n) = if n<0 0 else 0.2^n end h(n) = if n<-2 0 else 1 end n = -10:10 conv(h.(n),x.(n)) 知道如何修复它吗?我通过一个新的REPL会话运行得很好: julia> using Plots, DSP [ Info: Pre

这是你的电话号码。我想为两个简单的信号x[n]=0.2^n*u[n]和h[n]=u[n+2]写一个卷积,对于一些n值。我就是这样实施的:

using Plots, DSP

x(n) = if n<0 0 else 0.2^n end
h(n) = if n<-2 0 else 1 end

n = -10:10
conv(h.(n),x.(n))

知道如何修复它吗?

我通过一个新的REPL会话运行得很好:

julia> using Plots, DSP
[ Info: Precompiling Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80]
[ Info: Precompiling DSP [717857b8-e6f2-59f4-9121-6e50c889abd2]
        
julia> x(n) = if n<0 0 else 2^n end
x (generic function with 1 method)

julia> h(n) = if n<-2 0 else 1 end
h (generic function with 1 method)

julia> n = -10:10
-10:10

julia> conv(h.(n),x.(n))
41-element Array{Int64,1}:
    0
    0
  
 (etc)
 
 1984
 1920
 1792
 1536
 1024

julia> plot(conv(h.(n),x.(n)))
(plots ok)
julia>使用绘图,DSP
[信息:预编译图[91a5bcdd-55d7-5caf-9e0b-520d859cae80]
[信息:预编译DSP[717857b8-e6f2-59f4-9121-6e50c889abd2]
julia>x(n)=如果n h(n)=如果n n=-10:10
-10:10
朱莉娅>康文(h(n),x(n))
41元素数组{Int64,1}:
0
0
(等)
1984
1920
1792
1536
1024
朱莉娅>绘图(conv(h(n),x(n)))
(绘图正常)
如果将2/2^n更改为浮点,则需要指定Float64:

julia>  x(n) = if n<0 0 else  0.2^n end
x (generic function with 1 method)

julia> conv(h.(n),Float64.(x.(n)))
41-element Array{Float64,1}:
  0.0
  8.458842092382145e-17
  2.5376526277146434e-16
  4.229421046191072e-17
  2.1147105230955362e-16
       
   (etc)
   
  7.997440000004915e-5
  1.597440000003685e-5
  3.1744000002024485e-6
  6.144000000924524e-7
  1.0240000015600833e-7
julia>x(n)=如果n conv(h(n),Float64(x(n)))
41元素数组{Float64,1}:
0
8.458842092382145e-17
2.5376526277146434e-16
4.229421046191072e-17
2.1147105230955362e-16
(等)
7.997440000004915e-5
1.597440000003685e-5
3.174400000204485E-6
61440000000924524E-7
1.0240000015600833e-7

是的,它是这样工作的,但如果将2更改为0.2,它将不会工作!知道为什么吗?更多详细信息:啊哈,转换为Float64工作:conv(h.(n),Float64.(x.(n)))
julia>  x(n) = if n<0 0 else  0.2^n end
x (generic function with 1 method)

julia> conv(h.(n),Float64.(x.(n)))
41-element Array{Float64,1}:
  0.0
  8.458842092382145e-17
  2.5376526277146434e-16
  4.229421046191072e-17
  2.1147105230955362e-16
       
   (etc)
   
  7.997440000004915e-5
  1.597440000003685e-5
  3.1744000002024485e-6
  6.144000000924524e-7
  1.0240000015600833e-7