专栏
标签
求m文件程序转成jl语言
一般问题
发布于 2024-12-17 09:40:44
查看 24过去559天

这一段程序原来在MATLAB里运行过,但是放在syslab没能运行成功,求帮忙!另外,能否帮忙解惑向量与矩阵在运算时是否有不同的要求,为什么要区分这两种定义呢?非常感谢!!!

正弦信号+高斯白噪声

N=16; #滤波器长度
fs=2000; #采样频率
fc=500; #低通滤波器的截止频率
B=12; #量化位数

#生成blackman窗函数
w_kais=blackman(N);

#采用fir1函数设计FIR滤波器
b_kais=fir1(N-1,fc*2/fs,"lowpass",w_kais);

#量化滤波器系数
Q_kais=round(b_kais/max(abs(float(b_kais)))(2^(B-1)-1))
#转化成16进制数补码
Q_h=dec2hex(Q_kais+2^B
(Q_kais<0));

#求滤波器的幅频响应
m_kais=20log(abs(fft(b_kais,1024)))/log(10); m_kais=m_kais-max(m_kais);
Q_kais=20
log(abs(fft(Q_kais,1024)))/log(10); Q_kais=Q_kais-max(Q_kais);

#设置幅频响应的横坐标单位为Hz
x_f=[0:(fs/length(m_kais)):fs/2];
#只显示正频率部分的幅频响应
m5=m_kais(1:length(x_f));
m6=Q_kais(1:length(x_f));

#绘制幅频响应曲线
plot(x_f,m5,'-',x_f,m6,'--');
xlabel('频率(Hz)');ylabel('幅度(dB)');
legend('未量化','12bit量化');
grid;

所属专栏:Syslab基础平台
产品信息:Syslab科学计算环境
科学计算
附件 1 个附件(1kb)

全部回答 1

发布于 2024-12-17 10:34:07

您好,您的37行代码涉及到向量化运算的概念,Julia中无法自动扩展数组,因此对于维度不匹配的数组计算需要使用.加上运算符的方式。另外,Julia中的去最大元素使用maximum。
julia中有严格意义上的一维数组即向量,向量的和一行或者一列矩阵是有数据类型上的差异的,这个由于julia追求性能,在函数定义时会根据不同的输入类型定义不同的算法,在具体编译计算的时候会根据输入类型选择匹配的算法进行计算(多重派发)。但是向量和行或者列可以进行转换使用reshape函数,具体使用方法可以查看帮助文档reshape函数使用说明

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