相干函数的基本概念及其案例

一、相干函数的基本概念

设有一个系统,传递函数为H,平稳随机过程输入为x(t),输出为y(t),则有y(t)=h(t)*x(t)

其中:h(t)是传递函数H的脉冲响应,’*‘表示卷积。在频域上有Y(f)=H(f)X(f)或Pyy(f)=H^2(f)*Pxx(f)

式中:Pxx(f)是x(t)的自功率谱;Pyy(f)是y(t)的自功率谱。在已知输入x(t)和输出y(t)时,可以求出传递函数H为

 

在离散条件下,上式转换为

上式中频率f用离散频率索引来表示,f=k△f。
系统的相干函数定义为

 

其中:Pxx(f)是x(t)的自功率谱;Pyy(f)是y(t)的自功率谱;Pxy(f)是x(t)和y(t)的互功率谱。相干函数Yxy(f)可用来描述这两个信号在各频率点处的相关程度。

从相干函数Yxy(f)可以确定输出信号y(t)在多大程度上来自于输入信号x(t)。若Yxy(f)=1,说明输出完全来自于输入,且系统必为线性系统;若Yxy(f)<1,对于线性系统表明在频率点f处,输出谱Pyy(f)有多少成分来自于输入谱Pxx(f),其余部分可能来自于另外的信号源或噪声;若,Yxy(f)=0,则x(t)和y(t)完全不相干。

离散条件下,上式可以转换为

与传递函数一样,上式中频率f用离散频率索引来表示,f=k△f。

二、相干函数的估算
名称:mscohere
功能:对两个数据序列估算相干函数
调用格式:
Cxy=mscohere(x,y)
Cxy = mscohere(x,y,window)
Cxy = mscohere(x,y,window,noverlap)
[Cxy,W] = mscohere(x,y,window,noverlap,nfft)
[Cxy,F] = mscohere(x,y,window,noverlap,nfft,fs)
[.……] = mscohere(x,Y,...,'twosided')
mscohere(.….)
说明:输人参数:x和y是两列数据,表示系统的输人和输出;window是窗函数,默认时用海明窗;noverlap是分段时两段之间的重叠部分;nfft是傅里叶变换时的长度;fs是采样频率;一般x和y为实数序列时求出的相干函数是单边谱,若要求双边谱可用参数'twosided'。输出参数:Cxy是计算出的相干函数;W是归一化的角频率矢量,在单边谱时在[0,pi]之间,双边谱在[0,2*pi]之间;F是频率矢量,只有在输入参数中含有fs才给出F,它是实际频率值。当没有输出参数时,将显示出相干函数的图谱。

案例、有2个FIR滤波器,它们的系数分别为h=ones(1,10)/10和h1=fir1(30,0.2,rectwin(31))。由随机数列通过这两个滤波器产生输出序列为x(n)和y(n),再用x(n)和y(n)以 welch法求自谱及互谱,并计算出相干函数,然后调用mscohere函数计算出x(n)和y(n)的相干函数,比较这两种方法的计算结果。程序如下:

clear all; clc; close all;

randn('state',0);                  % 随机数初始化
h = ones(1,10)/10;                 % 滤波器1系数
h1 = fir1(30,0.2,rectwin(31));     % 滤波器2系数
r = randn(16384,1);                % 产生随机数
x = filter(h,1,r);                 % 产生第1路信号x
y = filter(h1,1,r);                % 产生第2路信号y

N=length(x);                       % 数据点长度
[H,wh]=freqz(h,1);                 % 滤波器1的响应函数
[H1,wh1]=freqz(h1,1);              % 滤波器2的响应函数

wind=hamming(1024);                % 设置海明窗,窗长1024
noverlap=512;                      % 重叠长度
Nfft=1024;                         % FFT变换长度
PY1=pwelch(x,wind,noverlap,Nfft);  % 求第1路信号自谱
PY2=pwelch(y,wind,noverlap,Nfft);  % 求第2路信号自谱
[CY12,w1]=cpsd(x,y,wind,noverlap,Nfft);   % 求第1路和第2路信号的互谱
Co12=abs(CY12).^2./(PY1.*PY2);     % 按(8-5-5)计算相干函数
[CR,w2]=mscohere(x,y,wind,noverlap,Nfft); % 调用mscohere函数计算相干函数
mcof=max(abs(Co12-CR))             % 求两种方法的差值
% 作图
figure(1)
subplot 211; plot(x,'k'); title('第1路信号x波形');
ylabel('幅值'); xlabel('样点'); axis([0 N -1.2 1.2]);
subplot 212; plot(y,'k'); title('第2路信号y波形');
ylabel('幅值'); xlabel('样点'); axis([0 N -1.2 1.2]);
set(gcf,'color','w'); 
figure(2)
subplot 211; plot(wh/pi,20*log10(abs(H)),'k'); grid;
ylim([-60 10]); title('滤波器1幅值响应曲线');
ylabel('幅值/dB'); xlabel('归一化频率/pi');
subplot 212; plot(wh1/pi,20*log10(abs(H1)),'k'); grid;
ylim([-70 10]); title('滤波器2幅值响应曲线');
ylabel('幅值/dB'); xlabel('归一化频率/pi');
set(gcf,'color','w'); 
figure(3)
plot(w1/pi,Co12,'r','linewidth',2);
hold on; grid;
plot(w2/pi,CR,'k');
legend('调用自谱和互谱','调用mscohere',3)
title('两种方法求得相干函数比较');
ylabel('幅值'); xlabel('归一化频率/pi');
set(gcf,'color','w'); 

运行结果如下:

 

 

运行程序先得到x(n)和y(n)两序列的波形图,上图所示;然后又给出了两个FIR滤波器的幅频响应,上图所示。用两种方法计算了相干函数,并把这两个相干函数显示在一张图上,上图所示,可以看出这两条曲线重合得很好。同时计算了两种方法的差值,得到两种方法的差值为0,说明这两种计算方法是一致的。

参考文献:MATLAB数字信号处理85个实用案例精讲——入门到进阶;宋知用(编著)

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
相干函数是一种用于分析信号相互关系的数学工具,在MATLAB中也有相应的函数来进行相干函数的计算。理解和使用相干函数可以帮助我们了解信号的频率成分和相互之间的相关性。 在MATLAB中,计算两个信号的相干函数可以使用xcov函数。xcov函数可以计算两个信号的互协方差函数,进而得到它们的相干函数。该函数的输入参数是要计算相干函数的信号向量,可以是列向量或行向量。xcov函数还有一些可选的参数,可以控制计算相干函数的样本数、延迟范围和归一化等。 使用xcov函数计算的相干函数结果是一个向量,其中包含了信号的自相关和互相关信息。通过对相干函数结果进行进一步的处理,可以得到信号的相关性和频谱特性。 除了xcov函数,MATLAB还提供了其他与相干函数相关的函数,如spectrogram、pwelch等。这些函数可以进一步分析信号的频谱特性和相干性。 在使用相干函数进行信号分析时,我们可以通过观察相干函数的峰值位置和宽度来判断两个信号之间的相互关系。如果相干函数的峰值很尖锐且位于某个频率上,表示两个信号在该频率上有很强的相关性;而如果相干函数的峰值较宽且分布在整个频率范围上,表示两个信号之间的相关性较弱。 总之,相干函数是MATLAB中用于分析信号相互关系的重要工具,通过计算和分析相干函数,可以更好地理解信号的频谱特性和相关性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值