function [f, ch1_power, ch1_ch2power, ch2_power] = coh_fn(ch1, ch2, targetFreq, fs) % FFT fftlength = length(ch1); ch1_fft = fft(ch1) / fftlength * 2; ch1_fft = ch1_fft(1:fftlength/2); ch2_fft = fft(ch2) / fftlength * 2; ch2_fft = ch2_fft(1:fftlength/2); % 互功率谱叠加 ch1_ch1 = ch1_fft .* conj(ch1_fft); im_ch1_ch2 = imag(ch1_fft .* conj(ch2_fft)); re_ch2_ch1 = real(ch2_fft .* conj(ch1_fft)); ch2_ch2 = ch2_fft .* conj(ch2_fft); % 滑动平均 freq_step = fs / fftlength; fy = 0 : (fftlength/2 - 1); fy = fy .* freq_step; targetFreqIndex = find(fy == targetFreq); window_size = round(targetFreq / freq_step); % 窗口大小为目标频率对应的样本数的一半 DQA_Power = zeros(5, fftlength/2); for i = 1:(fftlength/2) start_index = max(1, i - window_size); end_index = min(fftlength/2, i + window_size); freq = fy(i); power_buf = ch1_ch1(start_index:end_index); DQA_Power(2, i) = mean(power_buf) / (fs/fftlength); power_buf = im_ch1_ch2(start_index:end_index); DQA_Power(3, i) = mean(power_buf) / (fs/fftlength); power_buf = re_ch2_ch1(start_index:end_index); DQA_Power(4, i) = mean(power_buf) / (fs/fftlength); power_buf = ch2_ch2(start_index:end_index); DQA_Power(5, i) = mean(power_buf) / (fs/fftlength); end f = fy; ch1_ch2power = sqrt(DQA_Power(4,:).^2 + DQA_Power(3,:).^2); ch1_power = sqrt(DQA_Power(2,:)); ch2_power = sqrt(DQA_Power(5,:)); end
时间: 2024-04-09 12:29:25 浏览: 228
Insert_Coh.zip_abaqus嵌入单元_coh insert soft_厚度cohesive_零厚度单元
这是一个名为 `coh_fn` 的函数,它计算两个信号之间的频谱相关性。函数的输入参数包括两个信号 `ch1` 和 `ch2`,目标频率 `targetFreq`,以及采样频率 `fs`。函数的输出包括频率向量 `f`,信号1的功率谱密度 `ch1_power`,信号1和信号2的交叉功率谱密度 `ch1_ch2power`,以及信号2的功率谱密度 `ch2_power`。
函数的实现过程如下:
1. 首先,对信号 `ch1` 和 `ch2` 进行FFT变换,并进行归一化处理。
2. 计算互功率谱叠加,包括信号1的功率谱密度 `ch1_ch1`,信号1和信号2的交叉功率谱密度的虚部 `im_ch1_ch2`,信号2和信号1的交叉功率谱密度的实部 `re_ch2_ch1`,以及信号2的功率谱密度 `ch2_ch2`。
3. 进行滑动平均计算,通过设置窗口大小来对目标频率附近的功率谱密度进行平均计算。具体步骤包括确定窗口大小、遍历每个频率点、计算对应窗口内的功率谱密度均值,并存储到 `DQA_Power` 中。
4. 输出结果,包括频率向量 `f`,信号1和信号2的交叉功率谱密度 `ch1_ch2power`,信号1的功率谱密度 `ch1_power`,以及信号2的功率谱密度 `ch2_power`。
请注意,函数中使用的变量和计算过程是根据您提供的代码片段推测的,如果有任何错误或遗漏,请及时纠正。
阅读全文