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不存在归一化。

  1. a = [1 0.4 1];
  2. b = [0.2 0.3 1];
  3. w = logspace(-1,1);
  4.  
  5. h = freqs(b,a,w);
  6. mag = abs(h);
  7. phase = angle(h);
  8. phasedeg = phase*180/pi;
  9.  
  10. subplot(2,1,1)
  11. loglog(w,mag)
  12. grid on
  13. xlabel('Frequency (rad/s)')
  14. ylabel('Magnitude')
  15.  
  16. subplot(2,1,2)
  17. semilogx(w,phasedeg)
  18. grid on
  19. xlabel('Frequency (rad/s)')
  20. 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.

  1. b = [1]
  2. a = [0.125 ,1]
  3.  
  4. # b(0) *s^0
  5. # s = ----------------
  6. # a(0)*s^1 +a(1)*s^0
  7.  
  8. from scipy.signal import bilinear,freqs,freqz
  9. import matplotlib.pyplot as plt
  10. import numpy as np
  11.  
  12. # %% python scipy.signal 中 freqs
  13. wf=np.logspace(-1, 4, 1000)
  14. w,h = freqs(b,a,wf)
  15.  
  16. plt.semilogx(w,20*np.log10(np.abs(h)))
  17. plt.xlabel('rad/s')

  

如何转化为Hz显示,就是x坐标轴 除以 2*pi

  1. b = [1]
  2. a = [0.125 ,1]
  3.  
  4. # b(0) *s^0
  5. # s = ----------------
  6. # a(0)*s^1 +a(1)*s^0
  7.  
  8. from scipy.signal import bilinear,freqs,freqz
  9. import matplotlib.pyplot as plt
  10. import numpy as np
  11.  
  12. # %% python scipy.signal 中 freqs
  13. wf=np.logspace(-1, 4, 1000)
  14. w,h = freqs(b,a,wf)
  15.  
  16. # plt.semilogx(w,20*np.log10(np.abs(h)))
  17. # plt.xlabel('rad/s')
  18.  
  19. plt.semilogx(w/2/np.pi,20*np.log10(np.abs(h)))
  20. 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为采样频率。

  1. b=1;
  2. a=[0.125 1];
  3. fs=2000;
  4. [bz,az] = bilinear(b,a,fs);
  5. [hz0,wz0] = freqz(bz,az,100); % 100 n,输出点的个数
  6. fz0= wz0/pi*fs/2; % 归一化的rad/s 转化为 实际的采样频率
  7. plot(fz0,20*log10(abs(hz0)),'o');
  8. xlabel('Hz')
  9. hold on
  10. [hz1,fz1] = freqz(bz,az,100,fs);
  11. plot(fz1,20*log10(abs(hz1)),'r-','linewidth',3);
  12. legend('wz0' , 'fz1')
  13. 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。

代码部分

  1. from scipy.signal import bilinear,freqs,freqz
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4.  
  5. # b(0) *s^0
  6. # s = ----------------
  7. # a(0)*s^1 +a(1)*s^0
  8.  
  9. b = [1]
  10. a = [0.125 ,1]
  11.  
  12. # %% python scipy.signal 5000中 freqs
  13. wf=np.logspace(-1,4,1000 )
  14. w,h = freqs(b,a,wf)
  15.  
  16. plt.semilogx(w/2/np.pi,20*np.log10(np.abs(h)),'o',label='freqs')
  17. plt.xlabel('Hz')
  18. plt.ylabel('dB')
  19.  
  20. fs=5000
  21. bz,az = bilinear(b,a,fs)
  22.  
  23. worN=np.logspace(-1,4,2000)
  24. idx_end = np.nonzero(worN<=fs/2)[0][-1]
  25. z = freqz(bz,az,worN=worN[0:idx_end],fs=fs)
  26.  
  27. plt.semilogx(z[0],20*np.log10(z[1]),'-',label='freqz')
  28. plt.legend()

  

matlab与python scipy.signal中 freqs freqz 中w,什么时候是角频率,什么时候是真实的工程中使用的采样频率Hz,如何转化的更多相关文章

  1. VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)

    VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html   鸡啄米在上一讲中 ...

  2. Matlab 调用 Python 脚本

    Matlab 调用 Python 脚本 最近尝试在 Matlab 环境中调用 Python 脚本,这里总结下碰到的几个问题. 1. Python 模块加载 在 Matlab 函数中,想要将 Pytho ...

  3. 使用python scipy.optimize linprog和lingo线性规划求解最大值,最小值(运筹学学习笔记)

    1.线性规划模型: 2.使用python scipy.optimize linprog求解模型最优解: 在这里我们用到scipy中的linprog进行求解,linprog的用法见https://doc ...

  4. 【算法导论】八皇后问题的算法实现(C、MATLAB、Python版)

    八皇后问题是一道经典的回溯问题.问题描述如下:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8*8个方格),使它们谁也不能被吃掉?         看到这个问题,最容易想 ...

  5. Python scipy 计算短时傅里叶变换(Short-time Fourier transforms)

    计算短时傅里叶变换(STFT) scipy.signal.stft(x,fs = 1.0,window ='hann',nperseg = 256,noverlap = None,nfft = Non ...

  6. matlab转python

    最近在做把matlab代码转成python代码,没有用过matlab,python也只是局限于爬虫,所以.... matlab与python最大的不同是,matlab的下标是从1开始的,python和 ...

  7. Python使用signal模块实现定时执行

    在liunx系统中要想每隔一分钟执行一个命令,最普遍的方法就是crontab了,如果不想使用crontab,经同事指点在程序中可以用定时器实现这种功能,于是就开始摸索了,发现需要一些信号的知识... ...

  8. 选择、循环与函数结构:MATLAB VS Python

    选择.循环与函数结构:MATLAB VS Python 整理基本的程序控制结构,主要是选择 和 循环. 1.MATLAB选择结构 (1)单分支if语句格式: if 条件 语句组 end (2)双分支i ...

  9. 切片操作:MATLAB VS Python

    切片操作:MATLAB VS Python 一.MATLAB 矩阵的拆分 1.冒号表达式: t = e1:e2:e3 e1表示初始值,e2为步长,e3为终止值(包括e3),产生一个从e1到e3,步长为 ...

随机推荐

  1. Java面向对象系列(8)- Super详解

    场景一 场景二 场景三 场景四 注意:调用父类的构造器,super()必须在子类构造器的第一行 场景五 场景六 super注意点 super调用父类得构造方法(即构造器),必须在构造方法得第一个 su ...

  2. 计算机python二级 第六套

    第一模块  基本操作 1. random.seed(100)   随机种子  就是100 2.import  random 3.https://www.runoob.com/python3/pytho ...

  3. 2021“MINIEYE杯”中国大学生算法设计超级联赛(7)部分题解

    前言 找大佬嫖到个号来划水打比赛了,有的题没写或者不是我写的就不放了. 目前只有:1004,1005,1007,1008,1011 正题 题目链接:https://acm.hdu.edu.cn/con ...

  4. .NET 排序 Array.Sort<T> 实现分析

    System.Array.Sort<T> 是.NET内置的排序方法, 灵活且高效, 大家都学过一些排序算法,比如冒泡排序,插入排序,堆排序等,不过你知道这个方法背后使用了什么排序算法吗? ...

  5. 一个Electron的设计缺陷及应对方案

    当你想实现阻止Electron窗口关闭,并弹出询问对话框,提示用户:"文章尚未保存,是否要关闭窗口"这类业务时,那么你99%会碰到这个BUG: https://github.com ...

  6. HttpRunner3.X - 全面讲解如何落地项目实战

    一.前言 接触httprunner框架有一段时间了,也一直探索如何更好的落地到项目上,本篇主要讲述如何应用到实际的项目中,达到提升测试效率的目的. 1.项目难题 这个月开始忙起来了,接了个大项目,苦不 ...

  7. nsq topic

    与Topic相关的代码主要位于nsqd/topic.go中. 上一篇文字我们讲解了下nsq的启动流程.对nsq的整体框架有了一个大概的了解.本篇文章就是由大到小.对于topic这一部分进行详尽的讲解. ...

  8. 简单Tab切换

    延迟Tab切换,使用css中的flex布局,原生js实现.(京东首页菜单也有此延迟功能哦!) 每天进步一丢丢~~ 1.延迟Tab切换 <!DOCTYPE html> <html la ...

  9. 试题 算法训练 最大最小公倍数 java题解

    资源限制 时间限制:1.0s   内存限制:256.0MB 问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数 ...

  10. CF468C Hack it! 超详细解答

    CF468C Hack it! 超详细解答 构造+数学推导 原文极简体验 CF468C Hack it! 题目简化: 令\(f(x)\)表示\(x\)在十进制下各位数字之和 给定一整数\(a\)构造\ ...