首页 文章

matlab中的“潜意识”消息

提问于
浏览
3

我试图以相同的频率对两个信号求和,一个是从麦克风录制的,另一个是Matlab的默认声音文件,我打算做的是让它们同时发声,而我可以录制,并且播放wav文件我似乎无法以相同的频率添加它们,对于初学者我试图将两个信号放在相同的频率和相同的数字或行

然而,我当前的问题我有它,我不能在下采样功能中使用小数,所以我不能真正把它们放在相同的频率使用它

到目前为止,我已经有 Ygrabacion 的转置矩阵,但是,我真的不明白如何将它们放在相同的频率和行数,所以我可以将它们添加起来,然后将它们作为单个声音播放

enter image description here

load handel.mat

filename = 'handel.wav';
audiowrite(filename,y,Fs);
clear y Fs 
   [Y,fs] = audioread('handel.wav');       
sound(Y);
%%
X = X = audiorecorder(8000,8,1);
disp('Inicio de grabacion (5s)')
recordblocking(X, 5);
disp('Fin de Grabacion.');
play(X);
grabacion = getaudiodata(X);     
plot(grabacion,'r-');

%%
Columna_Izquierda = Y(:,1);       
C_I_T  = Columna_Izquierda.'; 

Columna_Derecha = grabacion(:,1);
C_D_T = Columna_Derecha.';

1 回答

  • 0

    我觉得你对频率有些困惑 . Fs是“采样频率”,即每秒记录多少个声音样本 . 它与底层信号的频率无关(忽略混叠) .

    如果你只是想把两个声音加在一起;你应该做的第一件事是确保它们具有相同的长度 . handle.mat文件的长度为73113/8192 = 8.92秒 .

    您正在录制5秒钟,因此您应将预先录制的样本截断为5秒 .

    Columna_Izquierda = Y(1:8192*5,1);
    

    除非您的麦克风无法处理,否则请更改录制速率以匹配此频率 . 如果你被限制在8000Hz(我怀疑),你总是可以使用interp1 .

    X = audiorecorder(8192,8,1);
    

    要么

    grabacion_interp = interp1(1:8000*5, grabacion, 1:8192*5,'spline');
    

    您可能会使用样条曲线获得一些锯齿 . 我有一段时间没有看过音频过滤 .

    然后,尺寸应匹配,以便您可以添加它们 .

    一些修改后的代码

    load handel.mat
    
    filename = 'handel.wav';
    audiowrite(filename,y,Fs);
    clear y Fs 
    [Y,fs] = audioread('handel.wav');       
    sound(Y);
    
    X = audiorecorder(8192,8,1); % Changed sampling rate
    disp('Inicio de grabacion (5s)')
    recordblocking(X, 5);
    disp('Fin de Grabacion.');
    play(X);
    grabacion = getaudiodata(X);     
    plot(grabacion,'r-');
    
    % Truncate handel recording
    Y = Y(1:8192*5);
    
    Columna_Izquierda = Y(:,1);       
    C_I_T  = Columna_Izquierda.'; 
    
    Columna_Derecha = grabacion(:,1);
    C_D_T = Columna_Derecha.';
    

相关问题