| |
上个星期,要对实现数字功放的算法进行验证,因此开始学习matlab.
现将所遇到的问题及我所用的解决方法列举出来,希望和大家一起学习,也寻求更好的方法.
1.已知18位用补码形式表示的一序列二进制数,在matlab中如何显示出其波形?
%18bit
clear all;
A=textread('1.txt','%s');
B=bin2dec(A);
C=B;
a=size(B);
b=a(1);
for k=1:b
if B(k)>=2^17
C(k)=B(k)-2^18;
end
end
stem(C);
2.已知一序列二进制数(假设是1bit),希望通过1个1bitD/A转换,模拟低通滤波器,反原为正弦波
clear all;
D=textread('1.txt','%s');
x=bin2dec(D);
b=size(x);
N=b(1);
n=1:N;
m=n-1;
axis([1 N -1 1]);
stem(m,x);
xlabel('时间序号');ylabel('振幅');
title('输入数字信号');
pause
%产生量化输出
y=zeros(1,N+1);
a=zeros(1,N+1);
e=0;
for k=2:N+1
a(k)=x(k-1)-e;
if a(k)>=0,
y(k)=1;
else
y(k)=-1;
end
e=y(k)-a(k);
end
yn=y(2:N+1);
axis([0 N -1.2 1.2]);
stem(m,yn);
%画出量化输出
xlabel('时间');ylabel('振幅');
title('量化器的数字输出');
pause
Y=fft(yn);
H=[1 1 0 zeros(1,N-5) 0 1]; %低通滤波器
YF=Y.*H; %在离散傅立叶变换域的滤波
out=ifft(YF);
plot(m,out);
xlabel('时间');ylabel('振幅');
title('低通滤波器后的模拟输出');
%产生量化输出那部分不是很明白
%还有H=[1 1 0 zeros(1,N-5) 0 1]; 中为什么要N列?通过傅立叶变换得到的Y是个怎么样的矩阵?
希望大虾指教!!