respeaker / usb_4_mic_array

ReSpeaker 4 Mic Array with builtin VAD, DOA, AEC, Beamforming & NS
https://www.seeedstudio.com/ReSpeaker-Mic-Array-v2.0-p-3053.html
Apache License 2.0
137 stars 64 forks source link

Bad AEC performance. Tips? #70

Open RafigRzayev opened 1 year ago

RafigRzayev commented 1 year ago

Hello, I am using the mic for smart-speaker application.

Microphone is connected to a single board computer via USB. Sound system is connected to 3.5mm audio jack on the microphone for AEC to work. Below is the demonstration of setup: scheme

I have watched your video showing the AEC performance, and it seems very good. I hoped that I will have similar results, but unfortunately microphone recording gets distorted by the signal emitted through speaker more than on your video. When I compared recording of single-channel firmware vs the first-channel of 6-channel firmware(processed for AEC), the quality of the latter is much better. But still it is not sufficient. I need to understand what is wrong with my setup, and why it doesn't work as in your video.

For my application I am using Linux, and this is what I do for audio settings:

pactl load-module module-remap-source master=alsa_input.usb-SEEED_ReSpeaker_4_Mic_Array__UAC1.0_-00.multichannel-input master_channel_map=front-left channel_map=front-left remix=false
pactl set-default-sink alsa_output.usb-SEEED_ReSpeaker_4_Mic_Array__UAC1.0_-00.analog-stereo
pactl set-default-source alsa_input.usb-SEEED_ReSpeaker_4_Mic_Array__UAC1.0_-00.multichannel-input.remapped

Through this, I make sure that only the first channel is used for my voice detection application(clear of noise), and that audio output is streamed into the microphone for the filtering purpose.

from pacmd stat:

Default sample spec: s16le 2ch 44100Hz Default channel map: front-left,front-right Default sink name: alsa_output.usb-SEEED_ReSpeaker_4_Mic_ArrayUAC1.0_-00.ag-stereo Default source name: alsa_input.usb-SEEED_ReSpeaker_4_Mic_ArrayUAC1.0_-00.ichannel-input.remapped

from pacmd list-sources:

  • index: 5 name: driver: flags: DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY state: RUNNING suspend cause: (none) priority: 1000 volume: front-left: 65536 / 100% / 0.00 dB balance 0.00 base volume: 65536 / 100% / 0.00 dB volume steps: 65537 muted: no current latency: 1.03 ms max rewind: 0 KiB sample spec: s16le 1ch 16000Hz channel map: front-left used by: 2 linked by: 2 configured latency: 8.69 ms; range is 0.50 .. 2000.00 ms module: 25 properties: device.master_device = "alsa_input.usb-SEEED_ReSpeaker_4_Mic_Array_UAC1.0-00.multichannel-input" device.class = "filter" device.description = "Remapped ReSpeaker 4 Mic Array (UAC1.0) Multichannel" device.icon_name = "audio-input-microphone"

from pacmd list-sinks:

  • index: 1 name: driver: flags: HARDWARE DECIBEL_VOLUME LATENCY DYNAMIC_LATENCY state: SUSPENDED suspend cause: IDLE priority: 9549 volume: front-left: 55000 / 84% / -4.57 dB, front-right: 55000 / 84% / -4.57 dB balance 0.00 base volume: 65536 / 100% / 0.00 dB volume steps: 65537 muted: no current latency: 0.00 ms max request: 0 KiB max rewind: 0 KiB monitor source: 2 sample spec: s24le 2ch 16000Hz channel map: front-left,front-right Stereo used by: 0 linked by: 0 configured latency: 0.00 ms; range is 0.50 .. 2000.00 ms card: 1 module: 8 properties: alsa.resolution_bits = "24" device.api = "alsa" device.class = "sound" alsa.class = "generic" alsa.subclass = "generic-mix" alsa.name = "USB Audio" alsa.id = "USB Audio" alsa.subdevice = "0" alsa.subdevice_name = "subdevice #0" alsa.device = "0" alsa.card = "0" alsa.card_name = "ReSpeaker 4 Mic Array (UAC1.0)" alsa.long_card_name = "SEEED ReSpeaker 4 Mic Array (UAC1.0) at usb-fe3e0000.usb-1, full speed" alsa.driver_name = "snd_usb_audio" device.bus_path = "platform-fe3e0000.usb-usb-0:1:1.0" sysfs.path = "/devices/platform/fe3e0000.usb/usb4/4-1/4-1:1.0/sound/card0" udev.id = "usb-SEEED_ReSpeaker_4_Mic_Array_UAC1.0-00" device.bus = "usb" device.vendor.id = "2886" device.vendor.name = "SEEED" device.product.id = "0018" device.product.name = "ReSpeaker 4 Mic Array (UAC1.0)" device.serial = "SEEED_ReSpeaker_4_Mic_Array_UAC1.0" device.form_factor = "speaker" device.string = "front:0" device.buffering.buffer_size = "192000" device.buffering.fragment_size = "96000" device.access_mode = "mmap+timer" device.profile.name = "analog-stereo" device.profile.description = "Analog Stereo" device.description = "ReSpeaker 4 Mic Array (UAC1.0) Analog Stereo" module-udev-detect.discovered = "1" device.icon_name = "audio-speakers-usb" ports: analog-output: Analog Output (priority 9900, latency offset 0 usec, available: unknown) properties:

    active port: <analog-output>

P.S. If you want I can make a video which shows performance on audacity.