从音频文件过滤出特定声音

499意见(过去30天)
利亚张伯伦
利亚张伯伦 2017年4月24日
回答: Kavitha Kavi.2020年12月31日
我很感激你对我的项目的帮助。问题和我所尝试的是下面。
问题:你已经被提供了一个声音文件,buzzjc.wav,这是一个某人说话的音频剪辑,但它被添加了一个由一些音调组成的蜂鸣器信号破坏了。首先使用命令wavread(使用较老的MATLAB版本)和audioread(使用较新版本)将信号加载到MATLAB中,你可以在MATLAB帮助文件中阅读更多。在MATLAB中加载音频文件并播放音频的示例(2017a):
%读取音频文件并将音频存储在数据中,采样率存储在fs [data, fs] = audioread('test3_Q3.wav');
%播放音频文件
玩家= audioplayer(数据,fs);
玩(球员);
一个。)使用DFT来弄清出音调频率(至少大约)。列出音调频率。
湾)描述如何使用本课程中覆盖的主题在音频信号中删除这些不需要的音调。
c。)接下来,删除这些音调,然后侦听剪辑(注意:如果您使用的是旧版MATLAB,则可能必须使用命令波形播放音频剪辑。夹子中的人说是什么?
我的解决方案:
[数据,fs] = audioread('buzzjc.wav');
玩家= audioplayer(数据,fs);
玩(球员);
dt = 1 / fs;%采样时间[s]
t = 0:DT:1;% 时间
N =长度(数据);
f =(1:n / 2 + 1)* fs / n;%的频率
剪辑= 205;%剪辑大小(点数)
X = 0(剪辑,长度(数据)-剪辑);%剪辑矩阵
y =零(长度(f),长度(数据)-clip);%光谱图
为了i = 1:长度(数据)-clip
x(:,i)=数据(i:i +剪辑-1);
TMPS = FFT(x(:,i),n);
y(:,i)= abs(tmps(1:n / 2 + 1));
结尾
ImagesC(T,F,(Y))
标题(“隐藏词的声谱图”);
Xlabel('时间[S]'
ylabel(的频率(赫兹)
beginFreq = 800 / (fs/2);
endFreq = 900 / (fs/2);
[b,a] = butter(6, (beginFreq/endFreq/2));
fOut = filtfilt(b, a, f);
p = audioplayer(Fout,FS);
p.play;
我得到了需要删除的频率。975Hz,875Hz,675Hz和450Hz。
当运行它有错误消息尝试执行脚本黄油作为一个函数:/Users/Leah/Documents/MATLAB/butter.m
[b,a] = butter(6, (beginFreq/endFreq/2))
它不允许我附加文件。任何帮助都将非常感激。
1条评论
艾伦巴斯蒂安
艾伦巴斯蒂安 于2020年5月14日
我们如何删除Instumenatl音乐以仅仅赠送音频文件

登录发表评论。

答案(6)

图像分析师
图像分析师 2017年4月24日
你打电话给你的脚本黄油(/users/leah/documents/matlab/butter.m)。叫它,因为黄油()是一个内置的功能,它会令人困惑地使用哪种黄油。叫它练习6.m或描述性的东西。但 不是 butter.m
6评论
星节演唱
星节演唱 2017年4月24日
试试这个:
保存('buzzjc.mat''F''fs'
然后上传它。

登录发表评论。


利亚张伯伦
利亚张伯伦 2017年4月24日
编辑:利亚张伯伦 2017年4月24日
好吧,我再试一次,我想成功了。抱歉,我不是想换个新答案。

星节演唱
星节演唱 2017年4月24日
编辑:星节演唱 2017年4月25日
我可能会错过一些东西,但我听不到除了该信号中的四个频率之外的任何东西。我设计了一个多缺口 冷杉 过滤器,然后因为它的长度,使用 FFTFILT. 来过滤它。我再也听不到任何能让我明白的话语了。
的代码 -
d = load('buzzjc.mat');
信号= D.F;
FS = D.FS;
%玩家= audioplayer(f,fs);
%玩(球员);
n =尺寸(信号,1);%确定音频文件中的样本总数
fn = fs / 2;
ftsignal = fft(信号)/ n;
Fv = linspace(0,1, fix(N/2)+1)*Fn;%频率矢量
IV = 1:长度(FV);%索引矢量
[PKS,FRQS] = FindPeaks(ABS(Ftsignal(IV))* 2,Fv,“MinPeakHeight”,0.1);
图1)
情节(FV,ABS(FTSignal(IV))* 2)
抓住
情节(FRQS,PKS,“+ r”
抓住
网格
Notch_frq = sort([frqs-2.5 frqs+2.5 frqs-1.5 frqs+1.5]);;
mags = [1 0 1 0 1 0 1 0 1];
DEVS = [0.05 0.01 0.05 0.01 0.05 0.05 0.01 0.01 0.01 0.01 0.01 0.05];
[n,wn,beta,ftype] = kaiserord(notch_frq,mags,devs,fs);
N = N + rem(N,2);
hh = fir1 (n, n, ftype kaiser (n + 1,β),'规模');
图(2);
freqz(hh, 1,2 ^16, Fs)
fOut = fftfilt(hh, signal);
FTOut = fft(输出端)/ N;
图(3)
情节(FV,ABS(FTOUT(IV))* 2)
网格
图(4)
情节(阵线、abs (FTOut (Iv)。/ FTsignal (Iv)) * 2)
网格
p1 = audioplayer(fOut*50, Fs);
播放(P1);
我留给你们自己去实验看看能不能从中得到什么。过滤器似乎已经成功地工作了,尽管我不知道为什么输出是不可理解的。您可能想要创建单独的Chebyshev类型 II 每个识别的频率的过滤器( 'frqs' 的输出 findpeaks. 呼叫),然后串联串联,看看你是否可以获得更好的结果。你可以使用 filtfilt. 功能较短过滤器。我的过滤器在这里比你的信号长,所以我采用了另一种过滤方法。您可以使用Chebyshev过滤器获得非常窄的过渡区域(陡峭的卷口),因此过渡区域按顺序 1-2 赫兹是可能的。

Greg Dionne.
Greg Dionne. 2017年4月25日
使用期限图来弄清频率。然后:
加载buzzjc
%Soundsc(F,FS)
n = numel(f);
折叠= F;
为了fi = [220 440 660 880]
a = sum(f。* cos(2 * pi * fi / fs *(1:n)'))/ n;
B = sum(f .* sin(2*pi*fi/fs*(1:n)'))/n;
F = F - a.*cos(2*pi*fi/fs*(1:n)')*2;
F = F - b. sin(2*pi*fi/fs*(1:n)')*2;
结尾
情节([折叠f])
Soundsc(F,FS)

吉姆汤普森
吉姆汤普森 2019年6月19日
我刚刚注册,所以我是这个论坛的一个全新的成员。
请注意:我从来没有编码在我的生活,只是剪切和粘贴发布arduino草图-与成功我应该添加。
由于几个朋友从耳鸣截止了几个朋友,我想使用特定于每个个人患者的频率或频率来创建一个缺口的音乐文件,这是兴趣。
问题:
  1. 上述文件的支持性(底层)金宝app计划或申请是什么?
  2. 使用它们需要哪些先决条件?(什么编码技能等)
  3. 任何提示的初学者进入这一学科将是最欣赏的。
提前谢谢,
吉姆汤普森
澳大利亚。
2评论
吉姆汤普森
吉姆汤普森 2019年6月19日
图像分析。
谢谢你的问题回复。
对你的问题没有简单的答案,所以我不得不推迟回答它的任何尝试,直到以后。我完全打算这样做,与一些解释性的链接等。
更稍后时间允许........
吉姆。

登录发表评论。


Kavitha Kavi.
Kavitha Kavi. 2020年12月31日
如何测试FIR滤波器与音频文件,并绘制频谱音频信号之前和之后的滤波?

标签

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!