多相采样变频器
在这个例子中,分析了FIR速率转换块的应用。
这个单位执行一个有效的多相
采样频率的转换
使用有理系数。
沿第一维度的L/M。
块对待输入的每一列
信号作为一个单独的通道和重采样
中的数据彼此独立。
现在让我们来看看模型本身,开发
对于这个例子。 它产生一个复杂的信号,
对其施加采样频率的多相转换。
辅助功能
In [ ]:
# 启用辅助模型启动功能。
function run_model( name_model)
Path = (@__DIR__) * "/" * name_model * ".engee"
if name_model in [m.name for m in engee.get_all_models()] # 检查将模型加载到内核的条件
model = engee.open( name_model ) # 打开模型
model_output = engee.run( model, verbose=true ); # 启动模型
else
model = engee.load( Path, force=true ) # 上传模型
model_output = engee.run( model, verbose=true ); # 启动模型
engee.close( name_model, force=true ); # 关闭模型
end
sleep(5)
return model_output
end
using FFTW
# 信号频谱的计算
function compute_spectrum(signal, fs)
n = length(signal)
spectrum = abs.(fft(signal)) / n
freqs = (0:n-1) .* (fs / n)
spectrum[1:Int(n/2)], freqs[1:Int(n/2)] # 返回频谱的一半(为方便起见)
end
Out[0]:
启动模型并分析计算
在此示例中,滤波器系数将取自为此模型预先记录的MAT文件。
In [ ]:
Pkg.add("MAT")
In [ ]:
using MAT
# 从a读取数据。mat文件
file = matopen("$(@__DIR__)/Hm.mat")
var_names = names(file)
print("$var_names")
for var_name in var_names
value = read(file, var_name)# 从文件中获取变量的值
@eval $(Symbol(var_name)) = $value # 动态创建名为var_name的变量
end
# 关闭文件
close(file)
In [ ]:
run_model("Rate_Conversion") # 启动模型。
Out[0]:
现在让我们比较输入和输出数据。
In [ ]:
inp = collect(simout["Rate_Conversion/inp"])
sim_time = vcat([m[] for m in inp.time]...) # 从矩阵中提取值
inp = vcat([m[] for m in inp.value]...) # 从矩阵中提取值
out = collect(simout["Rate_Conversion/out"])
out = vcat([vec(m2) for m2 in out.value]...) # 将每个矩阵转换为向量
println("输入编码数据的数量:$(长度(inp))")
print("输出编码数据数:$(length(out))")
正如我们所看到的,输出包含2倍以上的值
比输入。 这表明
已执行插值-增加信号采样频率的过程
通过在现有样本之间添加新样本。
In [ ]:
gr()
A = plot(real(inp[1:1000]), imag(inp[1:1000]), seriestype=:scatter, legend=false,
xlabel="Re", ylabel="Im", title="入口")
B = plot(real(out[1:1000]), imag(out[1:1000]), seriestype=:scatter, legend=false,
xlabel="Re", ylabel="Im", title="出口;出口")
plot(A,B)
Out[0]:
根据数据可视化的结果,可以看出
输出端值分布的幅度
与输入端的值显着不同。
现在让我们来看看输入和输出的频谱比较的结果。
In [ ]:
spectrum_inp, freqs_inp = compute_spectrum(inp[1:4000], 1000)
spectrum_out, freqs_out = compute_spectrum(out[1:4000], 1000)
plot(
plot(freqs_inp, spectrum_inp, xlabel="Frequency (Hz)", ylabel="Amplitude", title="入口", label=""),
plot(freqs_out, spectrum_out, xlabel="Frequency (Hz)", ylabel="Amplitude", title="出口;出口", label="")
)
Out[0]:
该比较表明信号谱显着
失真,并且有用的信号在变换后丢失,基于
谱分析的结果。
结论
在这个演示中,我们检查了一个多相
采样频率转换器和使用它来改变的可能性
个信号的采样频率。 此选项将对您的项目非常有用。

