如何填补丢失的频率响应数据的开始和结束?

12个视图(30天)
fillmissing interp1工作的差距的一个数组,但是我找不到任何适用于填充缺失数据的开始和结束。看起来曲线拟合工具箱可能会这样做,但我有搜索,找不到任何的例子,有人填补缺失数据的开始和结束。
频率响应数据的问题:一些我从音频分析仪不包括所有箱子从0赫兹到奈奎斯特频率。
解决方案:我找到了最好的解决方案是大小估计0赫兹,然后使用fillmissing之间的数据。结果并不好。我可以很容易地做一个更好的估计就半径标注我的眼睛。
这里有一个例子fillmissing被用来填补0-10Hz和20-48kHz之间的数据。我已经试了所有的方法(花键等)和提供更糟的结果。谢谢你任何建议! !
S_TF = fillmissing (S_TF,“线性”,“EndValues”,“extrap”);
12个评论

登录置评。

接受的答案

马修•诺伊
马修•诺伊 2022年6月28日
内森
正如上面说的,这里的完整代码:
% % playgroundFillGaps
clc;明确;接近;格式紧凑的;格式短g;
newFs = 96000;对于那些= newFs / 2;
%加载数据
TF = readmatrix (“k3 - 110 - 0.99 - m - nr2.txt”,“NumHeaderLines”9);%{“频率”、“大小”、“阶段”,“一致性”};
频率=特遣部队(:1);
mag_dB =特遣部队(:,2);
phas_deg =特遣部队(:3);
相干=特遣部队(:1);
%以下数据只保留Fs / 2频率
印第安纳州=(频率< = newFs / 2);
频率=频率(印第安纳州);
mag_dB = mag_dB(印第安纳州);
phas_deg = phas_deg(印第安纳州);
相干=一致性(印第安纳州);
%添加虚拟直流值(复制第一个可用的数据)
频率= [0;频率);
mag_dB = [mag_dB (1);mag_dB];
phas_deg = [phas_deg (1);phas_deg];
相干=[相干(1);连贯性);
% =让两端自然行为
%高通滤波器和低频率的行为结束(低于20 Hz)
%在高频率的低通滤波器等行为结束(20 kHz以上)
% =巴特沃斯带通滤波器应用频率窗口
f_low = 20;%降低切断频率赫兹
f_high = 20 e3;%切断高频率赫兹
N_bpf = 2;%过滤器订单
[b] =黄油(N_bpf 2 / newFs * [f_low f_high]);
frf_filter = freqz (b, a,频率,newFs);
频= 10 ^ (mag_dB / 20)。* exp (j *π/ 180 * phas_deg);%初始频
frf_filtered =润扬悬索桥。* frf_filter;%,复杂的初始误差+带通频窗口
% %的阴谋
图(1)
次要情节(2,1,1),semilogx (mag_dB频率,频率,20 * log10 (abs (frf_filtered)))
次要情节(2,1,2),semilogx (phas_deg频率,频率,180 /π*角(frf_filtered))
% % fft方法
频= frf_filtered;
%创建fliiped负频率误差数据(conjuguate)
如果国防部(长度(降维),2)= = 0% iseven
frf_sym =连词(润扬悬索桥(结束:1:2));
其他的
frf_sym =连词(润扬悬索桥(end-1: 1:2));
结束
冷杉=实际(传输线([降维;frf_sym]));%,正面和负面的频率误差转化为红外
%冷杉=冷杉(1:1);%截断是可能的如果冷杉衰变足够
frfid = freqz(杉木、1频率newFs);
% %的阴谋
图(2)
次要情节(311),图(0,0,1:长度(杉木),冷杉);
传奇(没有数据的,“确认冷杉模型(fft)”);
包含(“样本”);
ylabel (“振幅”);
次要情节(312),semilogx(频率,20 * log10 (abs(降维)),频率,20 * log10 (abs (frfid)));
ylim([马克斯(mag_dB) -80 max (mag_dB) + 10]);
传奇(输入模型的,“确认冷杉模型(fft)”);
包含(的频率(赫兹));
ylabel (“降模量(dB)”);
次要情节(313),semilogx(频率、180 /π*角(降维),频率,180 /π*角(frfid));
传奇(输入模型的,“确认冷杉模型(fft)”);
包含(的频率(赫兹));
ylabel (“润扬悬索桥角(°)”);

更多的答案(2)

乔恩
乔恩 2022年6月24日
编辑:乔恩 2022年6月24日
可以满足您的频率响应数据与传递函数模型,然后使用该模型生成缺失的数据。你可能需要把在某些限制你的配件来匹配你所“知道”的稳态(零频率)获得的系统。
如果你能做一些假设(你有知识)的设备在低频率的特点,你可以做一些匹配条件的传递函数模型在零和的开始您的数据
不管怎样,作为人所指出的,除非你有一些物理基础的模型,没有正确的方法生成缺失的数据,这种行为可以是任何东西,你没有数据
4评论
内森活泼
内森活泼 2022年6月24日
嘿,乔,我不知道如果你有任何带宽来演示你谈论的一些测量我上面贴。否则,我去查一下这个周末出来。

登录置评。


内森活泼
内森活泼 2022年6月26日
好的,我有一个想法使用fillgaps传输线所产生的脉冲响应。这个周末我花了几个小时,但我似乎无法让它工作。我已经尝试了一些变体,但我认为我已经达到我的极限对FFT的理解。请让我知道如果你看到任何错误。
我一直在阅读有关有多难填补在数组的开始和结束,所以我认为这将是一个新颖的解决方案转换回时域频域数据,circshift脉冲响应,这样的差距将会在中间,而不是结束,然后使用fillgaps。再一次,不知道为什么它没有工作。
% % playgroundFillGaps
clc;明确;接近;格式紧凑的;格式短g;
newFs = 96000;对于那些= newFs / 2;
%加载数据
url1 =“https://www.sounddesignlive.com/wp content/uploads/2022/06/k3 - 110 - 0.99 - m - nr2.txt”;
TF = readtable (url1,“ReadVariableNames”、假);
TF.Properties。VariableNames = {“频率”,“级”,“阶段”,“一致性”};
% %创建时间表
TT =时间表(“SampleRate”newFs);
TT.frequency = TF.frequency;
TT。Z = [db2mag (TF.magnitude)。* exp (1 j *(函数(TF.phase))));
TT。IR =实际(传输线(TT.Z“对称”))*高(TT);
%添加一个缺口
TT。IRgap = TT.IR;
TT.IRgap(21) =南;
% %填补缺口
TT。IRshifted = circshift (TT.IRgap界线);
TT。IRgapFill = fillgaps (TT.IRshifted);
TT。IRgapFill = circshift (TT.IRgapFill * 1把);
% %频域
TT。Z2 = fft (TT.IRgapFill) /身高(TT);
TT。magnitude2 = mag2db (abs (TT.Z2));
TT。phase2 = rad2deg(角(TT.Z2));
% %的阴谋
semilogx (TF.frequency TF.magnitude、TT.frequency TT.magnitude2)
传奇(“原始大小dB”,“fillsgaps dB级”,“位置”,“最佳”,“字形大小”,30)
9日评论
马修•诺伊
马修•诺伊 2022年6月28日
你好,内森
很高兴我的作品会有一些使用!
我复制一个反潜战如果你想接受,那就好了!
所有最好的未来!

登录置评。

标签

下载188bet金宝搏


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的