专栏
标签
使用 ifft 函数报错:ERROR: MethodError: no method matching plan_bfft(::Matrix{Complex}, ::Int64)
技术分享
发布于 2025-07-10 11:01:57
查看 1过去327天

由于 ifft 函数不支持输入参数类型为 Matrix{Complex} 的抽象类型复数矩阵,导致数据类型不匹配出现报错,需要指明数据类型为 Float64 后再进行运算。
运行以下代码会报错

using TyCommunication
using TyMath    
using TyPlot
rng = MT19937ar(1234)
trellis_a = poly2trellis(7, [133 171])
# 20M颊域数据子载波位置  
N_CBPS = 52
Nsym = 50
Nsc = 64
r = 0.5
AllScIdx = -32:1:31
NullScIdx = cat(-32:-27,0, 27:31,dims=1)
ScIdx = setdiff(AllScIdx, NullScIdx)
ScIdx = ScIdx + 33*ones(Int, size(ScIdx))
# src 比特生成
data = rand(rng, 0:1, Int64(Nsym*N_CBPS*r))
# MCSO编码
codedout, fstate = convenc(data, trellis_a)
# print(codedout)
# BPSK映射
myBPSK = comm_BPSKModulator(; PhaseOffset=0)
sym = step(myBPSK, codedout)
symR = reshape(sym, (N_CBPS, Nsym))
# scatterplot(sym)
# 额域子就波映射
FreqSym = zeros(Complex,Nsc, Nsym)
FreqSym[ScIdx,:] = symR
FreqSymShift = fftshift(FreqSym, 1)

TdSym = ifft(FreqSymShift, 1)

修改代码

using TyCommunication
using TyMath    
using TyPlot
rng = MT19937ar(1234)
trellis_a = poly2trellis(7, [133 171])
# 20M颊域数据子载波位置  
N_CBPS = 52
Nsym = 50
Nsc = 64
r = 0.5
AllScIdx = -32:1:31
NullScIdx = cat(-32:-27,0, 27:31,dims=1)
ScIdx = setdiff(AllScIdx, NullScIdx)
ScIdx = ScIdx + 33*ones(Int, size(ScIdx))
# src 比特生成
data = rand(rng, 0:1, Int64(Nsym*N_CBPS*r))
# MCSO编码
codedout, fstate = convenc(data, trellis_a)
# print(codedout)
# BPSK映射
myBPSK = comm_BPSKModulator(; PhaseOffset=0)
sym = step(myBPSK, codedout)
symR = reshape(sym, (N_CBPS, Nsym))
# scatterplot(sym)
# 额域子就波映射
# FreqSym = zeros(Complex,Nsc, Nsym) #定义的数据类型为抽象复数矩阵,会导致报错
FreqSym = zeros(ComplexF64,Nsc, Nsym) #指明数据类型为 Float64
FreqSym[ScIdx,:] = symR
FreqSymShift = fftshift(FreqSym, 1)

TdSym = ifft(FreqSymShift, 1)

运行上述代码,可以看到得到了正确结果:
image.png

所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境
科学计算

全部回答

暂无数据
暂无数据
用户
和原帖交流更多问题细节吧,去
我要发帖 我要发帖
资料中心 资料中心
查看更多>
热门帖子 热门帖子
主要贡献者 主要贡献者
过去7天