Python 数字信号处理程序实现求解

Python 数字信号处理程序实现求解,第1张

数字信号处理是把信号用数字或符号表示成序列,通过计算机或通用(专用)信号处理设备,用数值计算方法进行各种处理,达到提取有用信息便于应用的目的。例如:滤波、检测、变换、增强、估计、识别、参数提取、频谱分析等。

一般地讲,数字信号处理涉及三个步骤:

⑴模数转换(A/D转换):把模拟信号变成数字信号,是一个对自变量和幅值同时进行离散化的过程,基本的理论保证是采样定理。

⑵数字信号处理(DSP):包括变换域分析(如频域变换)、数字滤波、识别、合成等。

⑶数模转换(D/A转换):把经过处理的数字信号还原为模拟信号。通常,这一步并不是必须的。 作为DSP的成功例子有很多,如医用CT断层成像扫描仪的发明。它是利用生物体的各个部位对X射线吸收率不同的现象,并利用各个方向扫描的投影数据再构造出检测体剖面图的仪器。这种仪器中fft(快速傅里叶变换)起到了快速计算的作用。以后相继研制出的还有:采用正电子的CT机和基于核磁共振的CT机等仪器,它们为医学领域作出了很大的贡献。

信号处理的目的是:削弱信号中的多余内容;滤出混杂的噪声和干扰;或者将信号变换成容易处理、传输、分析与识别的形式,以便后续的其它处理。 下面的示意图说明了信号处理的概念。

1、理想采样信号序列

(1)首先产生信号x(n),0<=n<=50

n=0:50%定义序列的长度是50

A=444.128%设置信号有关的参数

a=50*sqrt(2.0)*pi

T=0.001%采样率

w0=50*sqrt(2.0)*pi%ω符号在MatLab 中不能输入,用w 代替

x=A*exp(-a*n*T).*sin(w0*n*T)%pi 是MATLAB 定义的π,信号乘可采用“.*”

close all %清除已经绘制的x(n)图形

subplot(3,1,1)stem(x)%绘制x(n)的图形

title(‘理想采样信号序列’)%设置结果图形的标题

(2)绘制信号x(n)的幅度谱和相位

k=-25:25

W=(pi/12.5)*k

X=x*(exp(-j*pi/12.5)).^(n’*k)

magX=abs(X)%绘制x(n)的幅度谱

subplot(3,1,2)stem(magX)title(‘理想采样信号序列的幅度谱’)

angX=angle(X)%绘制x(n)的相位谱

subplot(3,1,3)stem(angX) title (‘理想采样信号序列的相位谱’)

(3)改变参数为: 1, 0.4, 2.0734, 1 0 A = α = Ω = T =

n=0:50%定义序列的长度是50

A=1a=0.4w0=2.0734T=1%设置信号有关的参数和采样率T

x=A*exp(-a*n*T).*sin(w0*n*T)%pi 是MATLAB 定义的π,信号乘可采用“.*”

close all %清除已经绘制的x(n)图形

subplot(3,1,1)stem(x)%绘制x(n)的图形

title(‘理想采样信号序列’)

k=-25:25

W=(pi/12.5)*k

X=x*(exp(-j*pi/12.5)).^(n’*k)

magX=abs(X)%绘制x(n)的幅度谱

subplot(3,1,2)stem(magX)title(‘理想采样信号序列的幅度谱’)

angX=angle(X)%绘制x(n)的相位谱

subplot(3,1,3)stem(angX) title (‘理想采样信号序列的相位谱’)

2、单位脉冲序列

在 MatLab 中,这一函数可以用zeros 函数实现:

n=1:50%定义序列的长度是50

x=zeros(1,50)%注意:MATLAB 中数组下标从1 开始

x(1)=1close all

subplot(3,1,1)stem(x)title(‘单位冲击信号序列’)

k=-25:25

X=x*(exp(-j*pi/12.5)).^(n’*k)

magX=abs(X)%绘制x(n)的幅度谱

subplot(3,1,2)stem(magX)title(‘单位冲击信号的幅度谱’)

angX=angle(X)%绘制x(n)的相位谱

subplot(3,1,3)stem(angX) title (‘单位冲击信号的相位谱’)

3、矩形序列

n=1:50x=sign(sign(10-n)+1)

close allsubplot(3,1,1)stem(x)title(‘单位冲击信号序列’)

k=-25:25X=x*(exp(-j*pi/25)).^(n’*k)

magX=abs(X)%绘制x(n)的幅度谱

subplot(3,1,2)stem(magX)title(‘单位冲击信号的幅度谱’)

angX=angle(X)%绘制x(n)的相位谱

subplot(3,1,3)stem(angX) title (‘单位冲击信号的相位谱’)

4、特定冲击串

x(n) =δ (n) + 2.5δ (n ?1) + 2.5δ (n ? 2) +δ (n ? 3)

n=1:50%定义序列的长度是50

x=zeros(1,50)%注意:MATLAB 中数组下标从1 开始

x(1)=1x(2)=2.5x(3)=2.5x(4)=1

close allsubplot(3,1,1)stem(x)title(‘单位冲击信号序列’)

n=20

rp=0.5

wn=[100 8000]/10000

[b,a]=cheby1(n,rp,wn)figure(1)

freqz(b,a)

m=1b1=abs(b)

while fix(b1)>0

b1=abs(b)/(2^m)

m=m+1

end

c1=fix(b1*2^6)

c=sign(b).*c1.*2^(m-6-1)

n=1b2=abs(a)

while fix(b2)>0

b2=abs(b)/(2^n)

n=n+1

end

d1=fix(b2*2^6)

d=sign(a).*d1.*2^(m-6-1)figure(2)

freqz(c,d)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11076833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存