matlab与python scipy.signal中 freqs freqz 中w,什么时候是角频率,什么时候是真实的工程中使用的采样频率Hz,如何转化
matlab与python scipy.signal中的freqs,freqz频率分析函数,输出的w,有时候是角频率,有时候是真实频率,容易搞混,这里对比一下。
0. 精要总结:
1) freqs:
matlab, 角频率,rad.s
python, 角频率 rad/s ,只能是角频率。
2) freqz
matlab, 形式为 [h,w] = freqz(b,a,n) 角频率
形式为 [h,f] = freqz(___,n,fs) 时,频率输出形式f为Hz形式,fs为采样频率
python scipy 中 w,h =freqz(b,a,worN,fs) , w的单位与输入fs相同,fs为归一化角频率时,w也为角频率,fs为采样频率,单位Hz时,w也为Hz。
3) 角频率范围的区别:
freqs中的角频率是现实中的量,可以很大,比如1000Hz,对应的角频率为1000*2*pi ; freqz中的角频率是数字化的,一般使用时是归一化的,范围在 0,2*pi之间。
4) 角频率与Hz频率转化:
freqs的w结果要想用Hz,显示,可以先 w/2/pi 转化为 Hz 频率; freqz中的角频率如果要转化为具体的频率, 因为他是归一化的,用 0~ pi 的范围代表 0- fs/2 的频率范围,可以用 f=( w/pi)*(fs/2) 转化为Hz频率
1. freqs
1.1 matlab中
freqs 是角频率w的单位 rad/s,想要变成Hz, 显示时使用 f = w/2/pi
模拟的freqs不存在归一化。
a = [1 0.4 1];
b = [0.2 0.3 1];
w = logspace(-1,1); h = freqs(b,a,w);
mag = abs(h);
phase = angle(h);
phasedeg = phase*180/pi; subplot(2,1,1)
loglog(w,mag)
grid on
xlabel('Frequency (rad/s)')
ylabel('Magnitude') subplot(2,1,2)
semilogx(w,phasedeg)
grid on
xlabel('Frequency (rad/s)')
ylabel('Phase (degrees)')
1.2 python scipy.signal 中
freqs 输出的w也是rad/s,也只能是rad/s 角频率。不过这个不是归一化的。模拟的freqs不存在归一化。
w : ndarray
The angular frequencies at which `h` was computed.
b = [1]
a = [0.125 ,1] # b(0) *s^0
# s = ----------------
# a(0)*s^1 +a(1)*s^0 from scipy.signal import bilinear,freqs,freqz
import matplotlib.pyplot as plt
import numpy as np # %% python scipy.signal 中 freqs
wf=np.logspace(-1, 4, 1000)
w,h = freqs(b,a,wf) plt.semilogx(w,20*np.log10(np.abs(h)))
plt.xlabel('rad/s')
如何转化为Hz显示,就是x坐标轴 除以 2*pi
b = [1]
a = [0.125 ,1] # b(0) *s^0
# s = ----------------
# a(0)*s^1 +a(1)*s^0 from scipy.signal import bilinear,freqs,freqz
import matplotlib.pyplot as plt
import numpy as np # %% python scipy.signal 中 freqs
wf=np.logspace(-1, 4, 1000)
w,h = freqs(b,a,wf) # plt.semilogx(w,20*np.log10(np.abs(h)))
# plt.xlabel('rad/s') plt.semilogx(w/2/np.pi,20*np.log10(np.abs(h)))
plt.xlabel('Hz')
2. freqz
2.1 matlab中
1) 函数形式为
[h,w] = freqz(b,a,n)
时,w输出为角频率,且归一化,即最大的角频率为 pi (对应fs/2,归一化处理) 。(n为输出的点的个数)和freqs中
2) 函数形式为
[h,f] = freqz(___,n,fs)
时,频率输出形式f为Hz形式,fs为采样频率。
b=1;
a=[0.125 1];
fs=2000;
[bz,az] = bilinear(b,a,fs);
[hz0,wz0] = freqz(bz,az,100); % 100是 n,输出点的个数
fz0= wz0/pi*fs/2; % 将 归一化的rad/s 转化为 实际的采样频率
plot(fz0,20*log10(abs(hz0)),'o');
xlabel('Hz')
hold on
[hz1,fz1] = freqz(bz,az,100,fs);
plot(fz1,20*log10(abs(hz1)),'r-','linewidth',3);
legend('wz0' , 'fz1')
hold off
结果:
2.2 Python scipy.signal 中
freqz(b,a=1, worN=512, whole=False, plot=None, fs=2*pi, include_nyquist = False,)
Returns
-------
w : ndarray
The frequencies at which `h` was computed, in the same units as `fs`.
By default, `w` is normalized to the range [0, pi) (radians/sample).
w的单位和输入fs的单位相同,如果fs是用的 rad/s则返回w也是rad/s, 若输入fs的单位是 Hz,那么输出的w单位也是Hz。
代码部分
from scipy.signal import bilinear,freqs,freqz
import matplotlib.pyplot as plt
import numpy as np # b(0) *s^0
# s = ----------------
# a(0)*s^1 +a(1)*s^0 b = [1]
a = [0.125 ,1] # %% python scipy.signal 5000中 freqs
wf=np.logspace(-1,4,1000 )
w,h = freqs(b,a,wf) plt.semilogx(w/2/np.pi,20*np.log10(np.abs(h)),'o',label='freqs')
plt.xlabel('Hz')
plt.ylabel('dB') fs=5000
bz,az = bilinear(b,a,fs) worN=np.logspace(-1,4,2000)
idx_end = np.nonzero(worN<=fs/2)[0][-1]
z = freqz(bz,az,worN=worN[0:idx_end],fs=fs) plt.semilogx(z[0],20*np.log10(z[1]),'-',label='freqz')
plt.legend()
matlab与python scipy.signal中 freqs freqz 中w,什么时候是角频率,什么时候是真实的工程中使用的采样频率Hz,如何转化的更多相关文章
- VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html 鸡啄米在上一讲中 ...
- Matlab 调用 Python 脚本
Matlab 调用 Python 脚本 最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题. 1. Python 模块加载 在 Matlab 函数中,想要将 Pytho ...
- 使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)
1.线性规划模型: 2.使用python scipy.optimize linprog求解模型最优解: 在这里我们用到scipy中的linprog进行求解,linprog的用法见https://doc ...
- 【算法导论】八皇后问题的算法实现(C、MATLAB、Python版)
八皇后问题是一道经典的回溯问题.问题描述如下:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8*8个方格),使它们谁也不能被吃掉? 看到这个问题,最容易想 ...
- Python scipy 计算短时傅里叶变换(Short-time Fourier transforms)
计算短时傅里叶变换(STFT) scipy.signal.stft(x,fs = 1.0,window ='hann',nperseg = 256,noverlap = None,nfft = Non ...
- matlab转python
最近在做把matlab代码转成python代码,没有用过matlab,python也只是局限于爬虫,所以.... matlab与python最大的不同是,matlab的下标是从1开始的,python和 ...
- Python使用signal模块实现定时执行
在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...
- 选择、循环与函数结构:MATLAB VS Python
选择.循环与函数结构:MATLAB VS Python 整理基本的程序控制结构,主要是选择 和 循环. 1.MATLAB选择结构 (1)单分支if语句格式: if 条件 语句组 end (2)双分支i ...
- 切片操作:MATLAB VS Python
切片操作:MATLAB VS Python 一.MATLAB 矩阵的拆分 1.冒号表达式: t = e1:e2:e3 e1表示初始值,e2为步长,e3为终止值(包括e3),产生一个从e1到e3,步长为 ...
随机推荐
- Java基础系列(15)- 用户交互Scanner
Scanner对象 之前我们学的基本语法中我们并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入.java.util.Scanner是Java5的新特征.我们可以 ...
- 如何实现Orchard Core CMS的全文索引
Orchard Core提供了Lucene功能,允许您在网站上进行全文搜索.大多数情况下,在运行博客或简单的代理网站时,您可能需要在页面内容中进行搜索.在Orchard Core中,您可以使用Liqu ...
- Jetpack Compose学习(5)——从登录页美化开始学习布局组件使用
原文:Jetpack Compose学习(5)--从登录页美化开始学习布局组件使用 | Stars-One的杂货小窝 本篇主要讲解常用的布局,会与原生Android的布局控件进行对比说明,请确保了解A ...
- 浅析Java中的static关键字
关键点 <Java编程思想>对static方法的描述:"static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建对象的 ...
- jmeter旅程第二站:jmeter登录接口测试
因为上一篇已经讲了jmeter抓包,那么接下来会将讲解jmeter接口测试. 这里以浏览器为例. 从简到繁,那么首先先以比较常见的登录做实例. 目前登录操作有这几种:账户是否存在.账户密码登录.验证码 ...
- P5488-差分与前缀和【NTT,生成函数】
正题 题目链接:https://www.luogu.com.cn/problem/P5488 题目大意 求一个长度为$n$的序列的$k$阶差分/前缀和. 解题思路 先考虑前缀和怎么做 搞出来生成函数就 ...
- P4630-[APIO2018]Duathlon铁人两项【圆方树】
正题 题目链接:https://www.luogu.com.cn/problem/P4630 题目大意 \(n\)个点\(m\)条边的一张无向图,求有多少对三元组\((s,c,f)\)满足\(s\ne ...
- 深入浅出WPF-05.控件与布局
控件与布局 突出特点:1.专门的UI设计语言XAML,无需像MFC那样使用编程语言设计UI.2.前几代在UI和数据交互方面是由消息Message到控件事件,始终是把UI控件放在主导位置而把数据放在了次 ...
- 基于 Ubuntu 21.04 BPF 开发环境全攻略
本文地址:https://www.ebpf.top/post/ubuntu_2104_bpf_env 1. 系统安装 1.1 Vagrant Vagrant 是一款用于构建及配置虚拟开发环境的软件,基 ...
- vue-devtools 安装
vue火了很久了,但是一直赶不上时代步伐的我今天才开始学,首先,根据vue官网介绍,推荐安装Vue Devtools.它允许你在一个更友好的界面中审查和调试 Vue 应用. 首先,将vue-devto ...