Matlab中包络函数的使用方法
How to use envelope function in Matlab
下面的 Matlab 代码生成一个声音,但它包含类似 tak tak 的声音,可以很容易地heard.Can有人通过使用包络函数消除了这种噪音。
Fs=44100;
T=1/Fs;
M=zeros(1,88);
for I=7:88
M(I)=round(36.8*(2^(1/12))^(I-6));
end
signal=[];
FrTm=[50,3;50,3;52,3;54,3;50,3;54,3;52,3;45,3;50,3;50,3;52,3;54,3;50,6;
49,3;1,3;50,3;50,3;52,3;54,3;55,3;54,3;52,3;50,3;49,3;45,3;47,3;49,3;50,6;
50,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;1,3;45,5;47,1;45,3;43,3;42,6;
45,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;47,3;45,3;50,3;49,3;52,3;50,6;
50,6];
for i=1:length(FrTm)
x=FrTm(i,1);
y=FrTm(i,2);
F=M(x);
time=0:1/Fs:y/18;
sinewave=*sin(2*pi*10*F*time);
signal=[signal sinewave];
end
stem(signal)
sound(signal,Fs)
这里有两种可能的解决方案。它们并不完美,因为 tak-tak 仍然在这里,但它要低得多。
应用高通滤波器去除看似低频的恼人声音
Fs=44100;
T=1/Fs;
M=zeros(1,88);
for I=7:88
M(I)=round(36.8*(2^(1/12))^(I-6));
end
signal=[];
FrTm=[50,3;50,3;52,3;54,3;50,3;54,3;52,3;45,3;50,3;50,3;52,3;54,3;50,6;
49,3;1,3;50,3;50,3;52,3;54,3;55,3;54,3;52,3;50,3;49,3;45,3;47,3;49,3;50,6;
50,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;1,3;45,5;47,1;45,3;43,3;42,6;
45,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;47,3;45,3;50,3;49,3;52,3;50,6;
50,6];
for i=1:length(FrTm)
x=FrTm(i,1);
y=FrTm(i,2);
F=M(x)/4;
time=0:1/Fs:y/18;
sinewave=sin(2*pi*10*F*time);
signal=[signal sinewave];
end
% Creating high-pass filter with passband frequency of 1000 Hz (may be too high)
hpFilt = designfilt('highpassiir','FilterOrder',8, ...
'PassbandFrequency',1000,'PassbandRipple',0.2, ...
'SampleRate',Fs);
% Filtering sound
signal = filter(hpFilt,signal);
sound(signal,Fs)
从每个生成的正弦波中取最后一个值并为下一个正弦波找到对应的相位,使正弦波尽可能连续
Fs=44100;
T=1/Fs;
M=zeros(1,88);
for I=7:88
M(I)=round(36.8*(2^(1/12))^(I-6));
end
signal=[];
FrTm=[50,3;50,3;52,3;54,3;50,3;54,3;52,3;45,3;50,3;50,3;52,3;54,3;50,6;
49,3;1,3;50,3;50,3;52,3;54,3;55,3;54,3;52,3;50,3;49,3;45,3;47,3;49,3;50,6;
50,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;1,3;45,5;47,1;45,3;43,3;42,6;
45,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;47,3;45,3;50,3;49,3;52,3;50,6;
50,6];
previous_end_val = 0;
for i=1:length(FrTm)
x=FrTm(i,1);
y=FrTm(i,2);
F=M(x)/4;
time=0:1/Fs:y/18;
% Calculating required phase to match the end of previous sinewave
phi = asin(previous_end_val);
% Generating sinewave with phase phi
sinewave=sin(2*pi*10*F*time + phi);
previous_end_val = sinewave(end);
signal=[signal sinewave];
end
sound(signal,Fs)
第一个解决方案并不完美:如果通带频率太高,您将听不到最低的可听频率。第二种解决方案更快更优雅。有不懂的方法请教
下面的 Matlab 代码生成一个声音,但它包含类似 tak tak 的声音,可以很容易地heard.Can有人通过使用包络函数消除了这种噪音。
Fs=44100;
T=1/Fs;
M=zeros(1,88);
for I=7:88
M(I)=round(36.8*(2^(1/12))^(I-6));
end
signal=[];
FrTm=[50,3;50,3;52,3;54,3;50,3;54,3;52,3;45,3;50,3;50,3;52,3;54,3;50,6;
49,3;1,3;50,3;50,3;52,3;54,3;55,3;54,3;52,3;50,3;49,3;45,3;47,3;49,3;50,6;
50,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;1,3;45,5;47,1;45,3;43,3;42,6;
45,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;47,3;45,3;50,3;49,3;52,3;50,6;
50,6];
for i=1:length(FrTm)
x=FrTm(i,1);
y=FrTm(i,2);
F=M(x);
time=0:1/Fs:y/18;
sinewave=*sin(2*pi*10*F*time);
signal=[signal sinewave];
end
stem(signal)
sound(signal,Fs)
这里有两种可能的解决方案。它们并不完美,因为 tak-tak 仍然在这里,但它要低得多。
应用高通滤波器去除看似低频的恼人声音
Fs=44100; T=1/Fs; M=zeros(1,88); for I=7:88 M(I)=round(36.8*(2^(1/12))^(I-6)); end signal=[]; FrTm=[50,3;50,3;52,3;54,3;50,3;54,3;52,3;45,3;50,3;50,3;52,3;54,3;50,6; 49,3;1,3;50,3;50,3;52,3;54,3;55,3;54,3;52,3;50,3;49,3;45,3;47,3;49,3;50,6; 50,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;1,3;45,5;47,1;45,3;43,3;42,6; 45,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;47,3;45,3;50,3;49,3;52,3;50,6; 50,6]; for i=1:length(FrTm) x=FrTm(i,1); y=FrTm(i,2); F=M(x)/4; time=0:1/Fs:y/18; sinewave=sin(2*pi*10*F*time); signal=[signal sinewave]; end % Creating high-pass filter with passband frequency of 1000 Hz (may be too high) hpFilt = designfilt('highpassiir','FilterOrder',8, ... 'PassbandFrequency',1000,'PassbandRipple',0.2, ... 'SampleRate',Fs); % Filtering sound signal = filter(hpFilt,signal); sound(signal,Fs)
从每个生成的正弦波中取最后一个值并为下一个正弦波找到对应的相位,使正弦波尽可能连续
Fs=44100; T=1/Fs; M=zeros(1,88); for I=7:88 M(I)=round(36.8*(2^(1/12))^(I-6)); end signal=[]; FrTm=[50,3;50,3;52,3;54,3;50,3;54,3;52,3;45,3;50,3;50,3;52,3;54,3;50,6; 49,3;1,3;50,3;50,3;52,3;54,3;55,3;54,3;52,3;50,3;49,3;45,3;47,3;49,3;50,6; 50,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;1,3;45,5;47,1;45,3;43,3;42,6; 45,3;1,3;47,5;49,1;47,3;45,3;47,3;49,3;50,3;47,3;45,3;50,3;49,3;52,3;50,6; 50,6]; previous_end_val = 0; for i=1:length(FrTm) x=FrTm(i,1); y=FrTm(i,2); F=M(x)/4; time=0:1/Fs:y/18; % Calculating required phase to match the end of previous sinewave phi = asin(previous_end_val); % Generating sinewave with phase phi sinewave=sin(2*pi*10*F*time + phi); previous_end_val = sinewave(end); signal=[signal sinewave]; end sound(signal,Fs)
第一个解决方案并不完美:如果通带频率太高,您将听不到最低的可听频率。第二种解决方案更快更优雅。有不懂的方法请教