matlab在信号系统的常用函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab在信号系统的常用函数相关的知识,希望对你有一定的参考价值。
MATLAB 信号处理常用函数
【一】、 波形产生
函数名 功能
sawtooth 产生锯齿波或三角波Sinc 产生sinc或函数sin(pi*t)/(pi*t)
Square 产生方波
Diric 产生Dirichlet或周期sinc函数
【二】、 滤波器分析和实现
函数名 功能
Abs 求绝对值(幅值)Freqs 模拟滤波器频率响应
Angle 求相角
Freqspace 频率响应中的频率间隔
Conv 求卷积
Freqz 数字滤波器频率响应
Fftfilt 重叠相加法FFT滤波器实现
Grpdelay 平均滤波器延迟(群延迟)
Filter 直接滤波器实现
Impz 数字滤波器的冲激响应
Filtfilt 零相位数字滤波
Zplane 离散系统零极点图
Filtie Filter 函数初始条件选择
【三】、 线性系统变换
函数名 功能
Convmtx 卷积矩阵Ss2tf 变系统状态空间形式为传递函数形式
Ploy2rc 从多项式系数中计算反射系数
Ss2zp 变系统状态空间形式为零极点增益形式
Rc2ploy 从反射系数中计算多项式系数
Tf2ss 变系统传递函数形式为状态空间形式
Residuez Z变换部分分式展开或留数计算
Tf2zp 变系统传递函数形式为零极点增益形式
Sos2ss 变系统二阶分割形式为状态空间形式
Zp2sos 变系统零极点形式为二阶分割形式
Sos2zp 变系统二阶分割形式为零极点增益形式
Zp2tf 变系统零极点增益形式为传递函数形式
Ss2sos 变系统状态空间形式为二阶分割形式
【四】、 IIR滤波器设计
Besself Bessel(贝塞尔)模拟滤波器设计Cheby2 Chebyshev(切比雪夫)II型模拟滤波器设计
Butter Butterworth(巴特沃思)模拟滤波器设计
Ellip 椭圆模拟滤波器设计
Cheby1 Chebyshev(切比雪夫)I 型模拟滤波器设计
Yulewalk 递归数字滤波器设计
【五】、 IIR滤波器阶选择
Buttord Butterworth(巴特沃思)滤波器阶的选择Cheb2ord Chebyshev(切比雪夫)II型滤波器阶的选择
Ehebord Chebyshev(切比雪夫)I 型滤波器阶的选择
Clipord 椭圆滤波器设计阶的选择 模拟原型滤波器设计
Besselap Bessel模拟低通滤波器原型
Cheb2ap Chebyshev(切比雪夫)II型低通滤波器原型
Buttap Butterworth(巴特沃思)模拟低通滤波器原型
Ellipap 椭圆模拟低通滤波器原型
Cheb1ap Chebyshev(切比雪夫)I 型低通滤波器原型
【六】、 频率变换
Lp2bp 低通到带通模拟滤波器转换Lp2bs 低通到带阻模拟滤波器变换
Lp2hp 低通到高通模拟滤波器变换
Lp2lp 低通到低通模拟滤波器转换
【七】、 滤波器离散化
Blinear 双线性变换Impinvar 冲激响应不变法
【八】、 FIR滤波器设计
Fir1 基于窗函数的 FIR 滤波器设计—标准响应Intfilt 内插FIR滤波器设计
Fir2 基于窗函数的 FIR 滤波器设计—任意响应
Remez Firls 最小二乘FIR滤波器设计
Remezord Parks-McCellan 最优 FIR 滤波器 j阶估计
【九】、 窗函数
Boxcar 矩形窗Hanning Hanning(汉宁)窗
Triang 三角窗
Blackman Blackman(布莱克曼)窗
Bartlett Bartlett(巴特得特)窗
Chebwin Chebyshev(切比雪夫)窗
Hamming Hamming(汉明)窗
Kaiser Kaiser(凯泽)窗
【十】、 变换
Ctz 线性调频Z变换Fft 一维快速傅里叶变换
Dct 离散余弦变换
Ifft 一维快速傅里叶逆变换
Idct 逆离散余弦变换
Fftshift 重新排列 fft的输出
Dftmtx 离散傅里叶变换矩阵
Hilbert Hilbert(希尔伯特)变换
【十一】、 统计信号处理
Cov 协方差矩阵Psd 信号功率谱密度(PSD)估计
Xcov 互协方差函数估计
Tfe 从输入输出中估计传递函数
Corrcoef 相关系数矩阵
Periodogram 采用周期图法估计功率谱密度
Xcoor 互相关系数估计
Pwelch 采用 Welch方法估计功率谱密度
Cohere 相关函数平方幅值估计
Rand 生成均匀分布的随机数
Csd 互谱密度估计
Randn 生成正态分布的随机数
【十二】、 自适应滤波器部分
Adaptfilt.lms 最小均方(LMS)自适应算法Adaptfilt.rls 递推最小二乘(RLS)自适应算法
Adaptfilt.nlms 归一化最小均方(NLMS)自适应算法
【十三】、 时频分析与小波变换部分
Spectrogram 短时傅里叶变换Idwt 单级离散一维小波逆变换
Waveinfo 介绍小波工具箱中所有小波的信息
Wavedec 多级离散一维小波分解
Cwt 连续一维小波变换
Appcoef 一维小波变换近似系数
Dwt 单级离散一维小波变换
Detcoef 一维小波变换细节系数
【十四】、 二维信号处理
Conv2 二维卷积Xcorr2 二维互相关参数
Fft2 二维快读傅里叶变换
Dwt2 单级离散二维小波变换
Ifft2 二维逆快速傅里叶变换
Idwt2 单级离散二维小波逆变换
Filter2 二维数字滤波器
Waverec2 多级离散二维小波分解 参考技术A MATLAB 信号处理常用函数 【一】、 波形产生 函数名 功能 sawtooth 产生锯齿波或三角波 Sinc 产生sinc或函数sin(pi*t)/(pi*t) Square 产生方波 Diric 产生Dirichlet或周期sinc函数 【二】、 滤波器分析和实现 函数名 功能 Abs 求绝对值(幅值) Freqs 模拟滤波器频率响应 Angle 求相角 Freqspace 频率响应中的频率间隔 Conv 求卷积 Freqz 数字滤波器频率响应 Fftfilt 重叠相加法FFT滤波器实现 Grpdelay 平均滤波器延迟(群延迟) Filter 直接滤波器实现 Impz 数字滤波器的冲激响应 Filtfilt 零相位数字滤波 Zplane 离散系统零极点图 Filtie Filter 函数初始条件选择 【三】、 线性系统变换 函数名 功能 Convmtx 卷积矩阵 Ss2tf 变系统状态空间形式为传递函数形式 Ploy2rc 从多项式系数中计算反射系数 Ss2zp 变系统状态空间形式为零极点增益形式 Rc2ploy 从反射系数中计算多项式系数 Tf2ss 变系统传递函数形式为状态空间形式 Residuez Z变换部分分式展开或留数计算 Tf2zp 变系统传递函数形式为零极点增益形式 Sos2ss 变系统二阶分割形式为状态空间形式 Zp2sos 变系统零极点形式为二阶分割形式 Sos2zp 变系统二阶分割形式为零极点增益形式 Zp2tf 变系统零极点增益形式为传递函数形式 Ss2sos 变系统状态空间形式为二阶分割形式 【四】、 IIR滤波器设计 Besself Bessel(贝塞尔)模拟滤波器设计 Cheby2 Chebyshev(切比雪夫)II型模拟滤波器设计 Butter Butterworth(巴特沃思)模拟滤波器设计 Ellip 椭圆模拟滤波器设计 Cheby1 Chebyshev(切比雪夫)I 型模拟滤波器设计 Yulewalk 递归数字滤波器设计 【五】、 IIR滤波器阶选择 Buttord Butterworth(巴特沃思)滤波器阶的选择 Cheb2ord Chebyshev(切比雪夫)II型滤波器阶的选择 Ehebord Chebyshev(切比雪夫)I 型滤波器阶的选择 Clipord 椭圆滤波器设计阶的选择 模拟原型滤波器设计 Besselap Bessel模拟低通滤波器原型 Cheb2ap Chebyshev(切比雪夫)II型低通滤波器原型 Buttap Butterworth(巴特沃思)模拟低通滤波器原型 Ellipap 椭圆模拟低通滤波器原型 Cheb1ap Chebyshev(切比雪夫)I 型低通滤波器原型 【六】、 频率变换 Lp2bp 低通到带通模拟滤波器转换 Lp2bs 低通到带阻模拟滤波器变换 Lp2hp 低通到高通模拟滤波器变换 Lp2lp 低通到低通模拟滤波器转换 【七】、 滤波器离散化 Blinear 双线性变换 Impinvar 冲激响应不变法 【八】、 FIR滤波器设计 Fir1 基于窗函数的 FIR 滤波器设计—标准响应 Intfilt 内插FIR滤波器设计 Fir2 基于窗函数的 FIR 滤波器设计—任意响应 Remez Firls 最小二乘FIR滤波器设计 Remezord Parks-McCellan 最优 FIR 滤波器 j阶估计 【九】、 窗函数 Boxcar 矩形窗 Hanning Hanning(汉宁)窗 Triang 三角窗 Blackman Blackman(布莱克曼)窗 Bartlett Bartlett(巴特得特)窗 Chebwin Chebyshev(切比雪夫)窗 Hamming Hamming(汉明)窗 Kaiser Kaiser(凯泽)窗 【十】、 变换 Ctz 线性调频Z变换 Fft 一维快速傅里叶变换 Dct 离散余弦变换 Ifft 一维快速傅里叶逆变换 Idct 逆离散余弦变换 Fftshift 重新排列 fft的输出 Dftmtx 离散傅里叶变换矩阵 Hilbert Hilbert(希尔伯特)变换 【十一】、 统计信号处理 Cov 协方差矩阵 Psd 信号功率谱密度(PSD)估计 Xcov 互协方差函数估计 Tfe 从输入输出中估计传递函数 Corrcoef 相关系数矩阵 Periodogram 采用周期图法估计功率谱密度 Xcoor 互相关系数估计 Pwelch 采用 Welch方法估计功率谱密度 Cohere 相关函数平方幅值估计 Rand 生成均匀分布的随机数 Csd 互谱密度估计 Randn 生成正态分布的随机数 【十二】、 自适应滤波器部分 Adaptfilt.lms 最小均方(LMS)自适应算法 Adaptfilt.rls 递推最小二乘(RLS)自适应算法 Adaptfilt.nlms 归一化最小均方(NLMS)自适应算法【十三】、 时频分析与小波变换部分 Spectrogram 短时傅里叶变换 Idwt 单级离散一维小波逆变换 Waveinfo 介绍小波工具箱中所有小波的信息 Wavedec 多级离散一维小波分解 Cwt 连续一维小波变换 Appcoef 一维小波变换近似系数 Dwt 单级离散一维小波变换 Detcoef 一维小波变换细节系数 【十四】、 二维信号处理 Conv2 二维卷积 Xcorr2 二维互相关参数 Fft2 二维快读傅里叶变换 Dwt2 单级离散二维小波变换 Ifft2 二维逆快速傅里叶变换 Idwt2 单级离散二维小波逆变换 Filter2 二维数字滤波器 Waverec2 多级离散二维小波分解
Matlab - 常用函数集锦
在使用matlab进行信号处理和图形绘制过程中,某些函数被频繁调用,所以有必要将这些常用函数进行总结归类。
滤波函数
低通滤波
function [filtered_signal,filtb,filta]=lopass_butterworth(inputsignal,cutoff_freq,Fs,order)
% Low-pass Butterworth filter
% [filtered_signal,filtb,filta] = lopass_butterworth(inputsignal,cutoff_freq,Fs,order)
%
% This is simply a set of built-in Matlab functions, repackaged for ease of
% use by Chad Greene, October 2012.
%
% INPUTS:
% inputsignal = input time series
% cutoff_freq = filter corner frequency
% Fs = data sampling frequency
% order = order of Butterworth filter
%
% OUTPUTS:
% filtered_signal = the filtered time series
% filtb, filta = filter numerator and denominator (optional)
%
% EXAMPLE 1:
% load train
% t = (1:length(y))/Fs;
% y_filt = lopass_butterworth(y,900,Fs,4); % cut off at 900 Hz
% figure
% plot(t,y,'b',t,y_filt,'r')
% xlabel('time in seconds')
% box off
% legend('unfiltered','filtered')
% sound(y,Fs) % play original time series
% pause(2) % pause two seconds
% sound(y_filt,Fs) % play filtered time series
nyquist_freq = Fs/2; % Nyquist frequency
Wn=cutoff_freq/nyquist_freq; % non-dimensional frequency
[filtb,filta]=butter(order,Wn,'low'); % construct the filter
filtered_signal=filtfilt(filtb,filta,inputsignal); % filter the data with zero phase
高通滤波
function [filtered_signal,filtb,filta]=hipass_butterworth(inputsignal,cutoff_freq,Fs,order)
% High-pass Butterworth filter
% [filtered_signal,filtb,filta] = hipass_butterworth(inputsignal,cutoff_freq,Fs,order)
%
% This is simply a set of built-in Matlab functions, repackaged for ease of
% use by Chad Greene, October 2012.
%
% INPUTS:
% inputsignal = input time series
% cutoff_freq = filter corner frequency
% Fs = data sampling frequency
% order = order of Butterworth filter
%
% OUTPUTS:
% filtered_signal = the filtered time series
% filtb, filta = filter numerator and denominator (optional)
%
% EXAMPLE 1:
% load train
% t = (1:length(y))/Fs;
% y_filt = hipass_butterworth(y,900,Fs,4); % cut off at 900 Hz
% figure
% plot(t,y,'b',t,y_filt,'r')
% xlabel('time in seconds')
% box off
% legend('unfiltered','filtered')
% sound(y,Fs) % play original time series
% pause(2) % pause two seconds
% sound(y_filt,Fs) % play filtered time series
nyquist_freq = Fs/2; % Nyquist frequency
Wn=cutoff_freq/nyquist_freq; % non-dimensional frequency
[filtb,filta]=butter(order,Wn,'high'); % construct the filter
filtered_signal=filtfilt(filtb,filta,inputsignal); % filter the data with zero phase
带通滤波
function [filtered_signal,filtb,filta]=bandpass_butterworth(inputsignal,cutoff_freqs,Fs,order)
% Bandpass Butterworth filter
% [filtered_signal,filtb,filta] = bandpass_butterworth(inputsignal,cutoff_freq,Fs,order)
%
% This is simply a set of built-in Matlab functions, repackaged for ease of
% use by Chad Greene, October 2012.
%
% INPUTS:
% inputsignal = input time series
% cutoff_freqs = filter corner frequencies in the form [f1 f2]
% Fs = data sampling frequency
% order = order of Butterworth filter
%
% OUTPUTS:
% filtered_signal = the filtered time series
% filtb, filta = filter numerator and denominator (optional)
%
% EXAMPLE 1:
% load train
% t = (1:length(y))/Fs;
% y_filt = bandpass_butterworth(y,[800 1000],Fs,4); % cut off below 800 Hz and above 1000 Hz
%
% figure
% plot(t,y,'b',t,y_filt,'r')
% xlabel('time in seconds')
% box off
% legend('unfiltered','filtered')
% sound(y,Fs) % play original time series
% pause(2) % pause two seconds
% sound(y_filt,Fs) % play filtered time series
nyquist_freq = Fs/2; % Nyquist frequency
Wn=cutoff_freqs/nyquist_freq; % non-dimensional frequency
[filtb,filta]=butter(order,Wn,'bandpass'); % construct the filter
filtered_signal=filtfilt(filtb,filta,inputsignal); % filter the data with zero phase
带阻滤波
function [filtered_signal,filtb,filta]=bandstop_butterworth(inputsignal,cutoff_freqs,Fs,order)
% Band-stop Butterworth filter
% [filtered_signal,filtb,filta] = bandstop_butterworth(inputsignal,cutoff_freqs,Fs,order)
%
% This is simply a set of built-in Matlab functions, repackaged for ease of
% use by Chad Greene, October 2012.
%
% INPUTS:
% inputsignal = input time series
% cutoff_freqs = filter corner frequencies in the form [f1 f2]
% Fs = data sampling frequency
% order = order of Butterworth filter
%
% OUTPUTS:
% filtered_signal = the filtered time series
% filtb, filta = filter numerator and denominator (option 大专栏 Matlab - 常用函数集锦al)
%
% EXAMPLE 1:
% load train
% t = (1:length(y))/Fs;
% y_filt = bandstop_butterworth(y,[800 1000],Fs,4); % cut off below 800 Hz and above 1000 Hz
%
% figure
% plot(t,y,'b',t,y_filt,'r')
% xlabel('time in seconds')
% box off
% legend('unfiltered','filtered')
% sound(y,Fs) % play original time series
% pause(2) % pause two seconds
% sound(y_filt,Fs) % play filtered time series
nyquist_freq = Fs/2; % Nyquist frequency
Wn=cutoff_freqs/nyquist_freq; % non-dimensional frequency
[filtb,filta]=butter(order,Wn,'stop'); % construct the filter
filtered_signal=filtfilt(filtb,filta,inputsignal); % filter the data with zero phase
绘图函数
function [ ] = setPlot( varargin )
% setPlot()
% setPlot(title)
% setPlot(title,xlabel)
% setPlot(title,xlable,ylabel)
% setPlot(title,xlabel,ylabel,xlim)
% setPlot(title,xlable,ylabel,xlim,ylim)
narginchk(0,5); % 判断输入参数是否足够
grid on;
axis tight;
if nargin>=1
title(varargin{1});
end
if nargin>=2
xlabel(varargin{2});
end
if nargin>=3
ylabel(varargin{3});
end
if nargin>=4
xlim(varargin{4});
end
if nargin>=5
ylim(varargin{5});
end
end
信号处理函数
频谱分析
function [freq,amp]=fft_signal(signal,fs,N)
% Spectrum analysis
% INPUTS:
% signal = input time series
% fs = data sampling frequency
% N = data length of signal
%
% OUTPUTS:
% freq = frequency of Spectrum
% amp = amplitude of Spectrum
%
% EXAMPLE 1:
% fs = 100;
% N = fs*10;
% t = (0:N-1)/fs;
% y = sin(2*pi*10*t);
% [freq,amp] = fft_signal(y,fs,N);
% plot(freq,amp);
amp = 2*abs(fft(signal))/N; % 求取信号的幅度谱
amp = amp(1:fix(length(amp)/2)); % 截取有效部分
freq=(0:length(amp)-1)*fs/N; % 横坐标代表频率
end
幅值分布
function [ amp,dist ] = ampDist( signal,sectionNum )
% Calculate the amplitude distribution of the signal
% INPUTS:
% signal : The signal to be analyzed
% sectionNum : Number of segments
%
% OUTPUTS:
% amp : Amplitude after segmentation
% dist :Amplitude distribution
%
% EXAMPLE 1:
% fs = 1000;
% N = fs*100;
% y = wgn(1,N,10); % 高斯白噪声
% [amp,dist] = ampDist(y,500);
% bar(amp,dist);
yMin = min(signal);
yMax = max(signal);
amp = linspace(yMin,yMax,sectionNum);
dist = hist(signal,amp);
dist = dist./length(signal);
end
LMS最小均方算法
function [ y_error, y_filter ] = LMS( x_input,x_dest,M,u )
% LMS 最小均方算法
% INPUTS:
% x_input 原始信号
% x_dest 期望信号
% M 阶次
% u 步长因子
%
% OUTPUTS:
% y_error 误差信号
% y_filter 滤波器信号输出
%
% EXAMPLE 1:
% load train
% t = (1:length(y))/Fs;
% M = 2; u = 0.5;
% y_dest = (max(y)-min(y))/2*cos(2*pi*18*t); % 参考信号
% [y_error,y_filter] = LMS(y,y_dest,M,u);
% plot(t,y_error,t,y_filter);
N = length(x_input);
y_filter = zeros(1,N);
y_error = zeros(1,N);
h = zeros(1,M);
for k=M:N
h_old = h;
y_filter(k) = x_dest(k:-1:k-M+1)*h_old';
y_error(k) = x_input(k) - y_filter(k);
h = h_old + 2*u*y_error(k)*x_dest(k:-1:k-M+1);
end
end
EMD经验模态分解
function imf = emd(x)
% Empiricial Mode Decomposition (Hilbert-Huang Transform)
% imf = emd(x)
% Funcs : ismonotonic, isimf, getspline, findpeaks
x = transpose(x(:)); % 将x变为一维向量
imf = [];
while ~ismonotonic(x)
x1 = x;
sd = Inf;
cnt=0;
while (sd > 0.1) || ~isimf(x1)
s1 = getspline(x1);
s2 = -getspline(-x1);
x2 = x1-(s1+s2)/2;
sd = sum((x1-x2).^2)/sum(x1.^2);
x1 = x2;
cnt=cnt+1;
end
% cnt
imf{end+1} = x1;
x = x-x1;
end
imf{end+1} = x;
% FUNCTIONS
% 判断信号的单调性
function u = ismonotonic(x)
u1 = length(findpeaks(x))*length(findpeaks(-x));
if u1 > 0
u = 0;
else
u = 1;
end
% 判断信号是否满足IMF条件
% 条件:极大值点数和极小值点数之和与过零点数相等或相差1?
function u = isimf(x)
N = length(x);
u1 = sum(x(1:N-1).*x(2:N) < 0);
u2 = length(findpeaks(x))+length(findpeaks(-x));
if abs(u1-u2) > 1
u = 0;
else
u = 1;
end
% 使用三次样条函数,得到包络线
function s = getspline(x)
N = length(x);
p = findpeaks(x);
s = spline([0 p N+1],[0 x(p) 0],1:N);
% 寻找极大值点
function n = findpeaks(x)
% Find peaks.
% n = findpeaks(x)
n = find(diff(diff(x) > 0) < 0);
u = find(x(n+1) > x(n));
n(u) = n(u)+1;
以上是关于matlab在信号系统的常用函数的主要内容,如果未能解决你的问题,请参考以下文章